hacktricks/pentesting-web/cache-deception.md

225 lines
18 KiB
Markdown
Raw Normal View History

# Trovanje keša i prevara keša
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:24:39 +00:00
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:11:20 +00:00
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodiču PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 13:11:20 +00:00
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
Dobijte pristup danas:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
## Razlika
> **Koja je razlika između trovanja keša veb stranica i prevara keša veb stranica?**
>
> * U **trovanju keša veb stranica**, napadač uzrokuje da aplikacija sačuva zlonamerni sadržaj u kešu, a ovaj sadržaj se servira iz keša drugim korisnicima aplikacije.
> * U **prevari keša veb stranica**, napadač uzrokuje da aplikacija sačuva osetljiv sadržaj koji pripada drugom korisniku u kešu, a zatim napadač preuzima ovaj sadržaj iz keša.
2024-02-10 13:11:20 +00:00
## Trovanje keša
Trovanje keša ima za cilj manipulisanje kešom na strani klijenta kako bi se naterali klijenti da učitavaju resurse koji su neočekivani, delimični ili pod kontrolom napadača. Obim uticaja zavisi od popularnosti pogođene stranice, jer zaraženi odgovor se servira isključivo korisnicima koji posećuju stranicu tokom perioda zagađenja keša.
2024-02-06 03:10:38 +00:00
Izvođenje napada trovanja keša uključuje nekoliko koraka:
2024-02-06 03:10:38 +00:00
1. **Identifikacija neindeksiranih ulaza**: To su parametri koji, iako nisu potrebni da bi zahtev bio keširan, mogu promeniti odgovor koji vraća server. Identifikacija ovih ulaza je ključna jer mogu biti iskorišćeni za manipulaciju keša.
2. **Iskorišćavanje neindeksiranih ulaza**: Nakon identifikacije neindeksiranih ulaza, sledeći korak je saznati kako iskoristiti ove parametre da se izmeni odgovor servera na način koji koristi napadaču.
3. **Osiguravanje da je zaraženi odgovor keširan**: Poslednji korak je osigurati da je manipulisani odgovor sačuvan u kešu. Na ovaj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš zagađen će dobiti zaraženi odgovor.
2024-02-10 13:11:20 +00:00
### Otkrivanje: Provera HTTP zaglavlja
2022-08-12 16:57:56 +00:00
Obično, kada je odgovor **sačuvan u kešu**, postoji **zaglavlje koje to pokazuje**, možete proveriti na koja zaglavlja treba da obratite pažnju u ovom postu: [**HTTP zaglavlja keša**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
2022-08-12 16:57:56 +00:00
2024-02-10 13:11:20 +00:00
### Otkrivanje: Keširanje koda 400
2022-08-12 16:57:56 +00:00
Ako sumnjate 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 na uobičajen način i ako je **odgovor status kod 400**, znate da je ranjiv (i čak možete izvesti DoS).\
2024-02-10 13:11:20 +00:00
Loše konfigurisano zaglavlje može biti samo `\:` kao zaglavlje.\
_Napomena da ponekad ovi tipovi statusnih kodova nisu keširani pa će ovaj test biti beskoristan._
2022-08-12 16:57:56 +00:00
2024-02-10 13:11:20 +00:00
### Otkrivanje: Identifikacija i procena neindeksiranih ulaza
Možete koristiti [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) da **bruteforce-ujete parametre i zaglavlja** koji mogu **promeniti odgovor stranice**. Na primer, stranica može koristiti zaglavlje `X-Forwarded-For` da bi pokazala klijentu da učita skriptu odande:
```markup
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
2024-02-10 13:11:20 +00:00
### Izazovite štetan odgovor sa serverske strane
Sa identifikovanim parametrom/headerom proverite kako se **filtrira** i **gde** se **odražava** ili utiče na odgovor iz headera. Možete li ga zloupotrebiti na bilo koji način (izvršiti XSS ili učitati JS kod koji kontrolišete? izvršiti DoS?...)
### Dobijanje keširanog odgovora
Kada ste **identifikovali** **stranicu** koja može biti zloupotrebljena, koji **parametar**/**header** koristiti i **kako** ga zloupotrebiti, trebate dobiti keširanu stranicu. Zavisno od resursa koji pokušavate dobiti u kešu, ovo može potrajati neko vreme, možda ćete morati pokušavati nekoliko sekundi.\
Header **`X-Cache`** u odgovoru može biti veoma koristan jer može imati vrednost **`miss`** kada zahtev nije bio keširan i vrednost **`hit`** kada je keširan.\
Header **`Cache-Control`** je takođe interesantan kako biste znali da li se resurs kešira i kada će sledeći put resurs ponovo biti keširan: `Cache-Control: public, max-age=1800`\
Još jedan interesantan header je **`Vary`**. Ovaj header se često koristi da **ukazuje na dodatne headere** koji se tretiraju kao **deo ključa keša** čak i ako obično nisu ključni. Stoga, ako korisnik zna `User-Agent` žrtve koju cilja, može otrovati keš za korisnike koji koriste taj specifičan `User-Agent`.\
Još jedan header koji se odnosi na keš je **`Age`**. Definiše vreme u sekundama koliko je objekat bio u kešu proxy servera.
Prilikom keširanja zahteva, budite **oprezni sa headerima koje koristite** jer neki od njih mogu biti **neočekivano korišćeni** kao **ključni** i **žrtva će morati koristiti isti header**. Uvek **testirajte** Trovanje Keša sa **različitim pregledačima** da biste proverili da li radi.
## Primeri eksploatacije
2024-02-10 13:11:20 +00:00
### Najjednostavniji primer
Header poput `X-Forwarded-For` se odražava u odgovoru nefiltriran.\
Možete poslati osnovni XSS payload i otrovati keš tako da će svako ko pristupi stranici biti izložen XSS napadu:
```markup
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
```
### Korišćenje trovanja keša veb stranica za iskorišćavanje ranjivosti u rukovanju kolačićima
Kolačići takođe mogu biti reflektovani u odgovoru stranice. Ako možete zloupotrebiti to da izazovete XSS na primer, možete iskoristiti XSS u nekoliko klijenata koji učitavaju zlonamerni keš odgovor.
```markup
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
### Trovanje keša sa prolazom 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>
[**Ovaj tekst 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 urađeno kada je zahtev stigao do veb servera.
### Korišćenje više zaglavlja za iskorišćavanje ranjivosti trovanja keša na vebu <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 **iskoristiti nekoliko neindeksiranih ulaza** kako biste mogli zloupotrebiti keš. Na primer, možete pronaći **Otvoreno preusmeravanje** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** je **server** **preusmeravao** sve **HTTP** zahteve **na HTTPS** i koristio zaglavlje `X-Forwarded-Scheme` kao ime domena za preusmeravanje. Možete kontrolisati gde će stranica biti usmerena preusmeravanjem.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
```
2024-02-10 13:11:20 +00:00
### Iskorišćavanje sa ograničenim `Vary` zaglavljem
Ako ste otkrili da se zaglavlje **`X-Host`** koristi kao **ime domena za učitavanje JS resursa** ali da **`Vary`** zaglavlje u odgovoru ukazuje na **`User-Agent`**. Zatim, trebate pronaći način da eksfiltrirate User-Agent žrtve i otrovate keš koristeći taj korisnički agent:
```markup
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
```
### Iskorišćavanje HTTP Cache Trovanja zloupotrebom HTTP Request Smuggling
Saznajte kako izvesti [napade Cache Trovanja zloupotrebom HTTP Request Smuggling](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
### Automatizovano testiranje za Web Cache Trovanje
2022-06-06 22:28:05 +00:00
Alat [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) može se koristiti za automatsko testiranje web cache trovanja. Podržava mnoge različite tehnike i visoko je prilagodljiv.
2022-05-06 10:58:15 +00:00
2024-02-10 13:11:20 +00:00
Primer korišćenja: `wcvs -u example.com`
2022-05-06 10:58:15 +00:00
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-02-10 13:11:20 +00:00
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
Pristupite danas:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
## Vulnerabilni Primeri
2022-07-28 09:46:19 +00:00
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
ATS je prosleđivao fragment unutar URL-a bez uklanjanja i generisao ključ keša koristeći samo host, putanju i upit (ignorišući fragment). Dakle, zahtev `/#/../?r=javascript:alert(1)` je poslat backend-u kao `/#/../?r=javascript:alert(1)` i ključ keša nije sadržavao payload unutar njega, samo host, putanju i upit.
2022-07-28 09:46:19 +00:00
### GitHub CP-DoS
Slanje loše vrednosti u zaglavlju content-type izazvalo je keširan odgovor 405. Ključ keša je sadržavao kolačić tako da je bilo moguće napasti samo neautentifikovane korisnike.
2022-07-28 09:46:19 +00:00
### GitLab + GCP CP-DoS
GitLab koristi GCP buckete za skladištenje statičkog sadržaja. **GCP Bucketi** podržavaju **zaglavlje `x-http-method-override`**. Tako je bilo moguće poslati zaglavlje `x-http-method-override: HEAD` i otrovati keš tako da vrati prazno telo odgovora. Takođe je mogao podržavati metod `PURGE`.
2022-07-28 09:46:19 +00:00
2024-02-06 03:10:38 +00:00
### Rack Middleware (Ruby on Rails)
2022-07-28 09:46:19 +00:00
U Ruby on Rails aplikacijama često se koristi Rack middleware. Svrsishodnost Rack koda je da uzme vrednost zaglavlja **`x-forwarded-scheme`** i postavi je kao šemu zahteva. Kada se pošalje zaglavlje `x-forwarded-scheme: http`, dolazi do 301 preusmerenja na istu lokaciju, što potencijalno može izazvati DoS (Denial of Service) za taj resurs. Dodatno, aplikacija može prepoznati zaglavlje `X-forwarded-host` i preusmeriti korisnike na određeni host. Ovo ponašanje može dovesti do učitavanja JavaScript fajlova sa servera napadača, predstavljajući sigurnosni rizik.
2022-07-28 09:46:19 +00:00
### 403 i Skladišni Bucketi
2022-07-28 09:46:19 +00:00
Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Storage Blobs sa neispravnim Autorizacijskim zaglavljima rezultovao bi 403 odgovorom koji bi bio keširan. Iako je Cloudflare prestao sa keširanjem 403 odgovora, ovo ponašanje može još uvek biti prisutno u drugim proxy uslugama.
2022-07-28 09:46:19 +00:00
### Ubacivanje Ključnih Parametara
2022-07-28 09:46:19 +00:00
Kešovi često uključuju određene GET parametre u ključ keša. Na primer, Fastly-jev Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-kodirana verzija parametra (npr. `siz%65`) takođe poslata sa pogrešnom vrednošću, ključ keša bi bio konstruisan koristeći ispravan `size` parametar. Ipak, backend bi obradio vrednost u URL-kodiranom parametru. URL-kodiranje drugog `size` parametra dovelo je do njegovog izostavljanja iz keša ali njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanjem 400 Bad Request greške.
2022-07-28 09:46:19 +00:00
### Pravila Korisničkog Agent
2022-07-28 09:46:19 +00:00
Neki programeri blokiraju zahteve sa korisničkim agentima koji se podudaraju sa onima visokoprometnih alata poput FFUF ili Nuclei kako bi upravljali opterećenjem servera. Ironično, ovaj pristup može uvesti ranjivosti poput keš trovanja i DoS-a.
2022-07-28 09:46:19 +00:00
### Nezakonita Zaglavlja
2022-07-28 09:46:19 +00:00
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) specificira prihvatljive karaktere u imenima zaglavlja. Zaglavlja koja sadrže karaktere van navedenog opsega **tchar** bi idealno trebala izazvati odgovor 400 Bad Request. U praksi, serveri se ne pridržavaju uvek ovog standarda. Značajan primer je Akamai, koji prosleđuje zaglavlja sa nevažećim karakterima i kešira bilo koju 400 grešku, sve dok zaglavlje `cache-control` nije prisutno. Identifikovan je iskoristiv obrazac gde slanje zaglavlja sa nevažećim karakterom, poput `\`, rezultuje keširanom 400 Bad Request greškom.
2022-07-28 09:46:19 +00:00
2024-02-10 13:11:20 +00:00
### Pronalaženje novih zaglavlja
2022-07-28 09:46:19 +00:00
[https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6)
## Cache Prevara
Cilj Cache Prevara je da natera klijente da **učitavaju resurse koji će biti sačuvani u kešu sa njihovim osetljivim informacijama**.
Pre svega, napomenimo da su **ekstenzije** poput `.css`, `.js`, `.png` itd. obično **konfigurisane** da se **sačuvaju** u **kešu**. Stoga, ako pristupite `www.example.com/profile.php/nonexistent.js` keš će verovatno sačuvati odgovor jer vidi `.js` **ekstenziju**. Međutim, ako **aplikacija** ponavlja sa **osetljivim** korisničkim sadržajima sačuvanim u _www.example.com/profile.php_, možete **ukrasti** te sadržaje od drugih korisnika.
Drugi testovi:
2022-08-12 16:57:56 +00:00
* _www.example.com/profile.php/.js_
* _www.example.com/profile.php/.css_
* _www.example.com/profile.php/test.js_
* _www.example.com/profile.php/../test.js_
* _www.example.com/profile.php/%2e%2e/test.js_
2024-02-10 13:11:20 +00:00
* _Koristite manje poznate ekstenzije poput_ `.avif`
2022-04-28 16:01:33 +00:00
Još jedan veoma jasan primer može se naći u ovom opisu: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
U primeru je objašnjeno da ako učitate nepostojeću stranicu poput _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 pregledaču i posmatrati **poverljive informacije** korisnika koji su pristupili pre.
Napomena da bi **keš proxy** trebalo da bude **konfigurisan** da **kešira** fajlove **bazirano** na **ekstenziji** fajla (_.css_) a ne na osnovu tipa sadržaja. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` tip sadržaja umesto `text/css` mime tipa (što se očekuje za _.css_ fajl).
Saznajte kako izvesti [Napade Cache Prevara zloupotrebom HTTP Request Smuggling](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
## Automatski Alati
* [**toxicache**](https://github.com/xhzeem/toxicache): Golang skener za pronalaženje ranjivosti web cache trovanja na listi URL-ova i testiranje više tehnika ubacivanja.
## Reference
* [https://portswigger.net/web-security/web-cache-poisoning](https://portswigger.net/web-security/web-cache-poisoning)
* [https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities](https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities)
* [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712)
* [https://youst.in/posts/cache-poisoning-at-scale/](https://youst.in/posts/cache-poisoning-at-scale/)
* [https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9](https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9)
* [https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/](https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
Pristupite danas:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:24:39 +00:00
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:11:20 +00:00
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 13:11:20 +00:00
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>