hacktricks/pentesting-web/http-response-smuggling-desync.md

143 lines
9.3 KiB
Markdown
Raw Normal View History

# HTTP Odgovor Smugling / Desinkronizacija
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:25:17 +00:00
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **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 [**The PEASS Family**](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 **pratite** nas 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>
**Tehnika ovog posta je preuzeta iz videa:** [**https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s**](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s)
2024-02-06 03:10:38 +00:00
## Desinhronizacija Reda HTTP Zahteva
2024-02-06 03:10:38 +00:00
Prvo, ova tehnika **zloupotrebljava ranjivost HTTP zahteva za smugling**, tako da morate znati šta je to:
2021-11-05 20:59:42 +00:00
**Glavna** **razlika** između ove tehnike i običnog HTTP zahteva za smugling je što **umesto** **napadanja** **zahteva** **žrtve dodavanjem prefiksa**, mi ćemo **procuriti ili modifikovati odgovor koji žrtva prima**. Ovo se postiže tako što, umesto slanja 1 zahteva i pola za zloupotrebu HTTP zahteva za smugling, **šaljemo 2 potpuna zahteva za desinhronizaciju redova odgovora posrednika**.
2021-11-05 20:59:42 +00:00
Ovo je zato što ćemo biti u mogućnosti da **desinhronizujemo red odgovora** tako da **odgovor** sa **legitimnog zahteva** **žrtve bude poslat napadaču**, ili **ubacivanjem sadržaja kontrolisanog od strane napadača u odgovor žrtvi**.
2021-11-05 20:59:42 +00:00
### Desinhronizacija HTTP Pipelina
2021-11-05 20:59:42 +00:00
HTTP/1.1 omogućava da se zatraže **različiti resursi bez čekanja na prethodne**. Stoga, ako postoji **posrednik** u **sredini**, posao posrednika je da **održava sinhronizovan odgovarajući par zahteva poslatih backendu i odgovora koji dolaze od njega**.
2021-11-05 20:59:42 +00:00
Međutim, postoji problem desinhronizacije redova odgovora. Ako napadač pošalje napad za smugling HTTP odgovora i odgovori na **početni zahtev i prokrijumčaren** budu odgovoreni odmah, prokrijumčareni odgovor neće biti ubačen unutar reda odgovora žrtve već će **biti odbačen kao greška**.
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (633).png>)
2021-11-05 20:59:42 +00:00
Stoga je potrebno da **prokrijumčareni zahtev** **traje duže da se obradi** unutar serverske strane. Stoga, do trenutka kada se prokrijumčareni zahtev obradi, komunikacija sa napadačem će biti završena.
2021-11-05 20:59:42 +00:00
Ukoliko u ovoj specifičnoj situaciji **žrtva pošalje zahtev** i **prokrijumčareni zahtev bude odgovoren pre** legitimnog zahteva, **prokrijumčareni odgovor će biti poslat žrtvi**. Stoga, napadač će **kontrolisati zahtev "izvršen" od strane žrtve**.
2021-11-05 20:59:42 +00:00
Osim toga, ako **napadač zatim izvrši zahtev** i **legitimni odgovor** na **žrtvin** zahtev bude **odgovoren** **pre** napadačevog zahteva. **Odgovor žrtvi će biti poslat napadaču**, **ukradući** odgovor žrtvi (koji može sadržati na primer zaglavlje **Set-Cookie**).
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1020).png>)
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (719).png>)
2021-11-05 20:59:42 +00:00
### Višestruke Ugnježdene Injekcije
2021-11-05 20:59:42 +00:00
Još jedna **interesantna razlika** sa običnim **HTTP zahtevom za smugling** je da, u običnom napadu za smugling, **cilj** je **modifikovati početak zahteva žrtve** tako da izvrši neočekivanu akciju. U **napadu za smuglingu HTTP odgovora**, pošto **šaljete kompletne zahteve**, možete **ubaciti u jedan payload desetine odgovora** koji će **desinhronizovati desetine korisnika** koji će **primiti** **ubacene** **odgovore**.
2021-11-05 20:59:42 +00:00
Osim što možete **jednostavnije distribuirati desetine eksploatacija** među legitimnim korisnicima, ovo takođe može biti korišćeno za izazivanje **DoS** na serveru.
2021-11-05 20:59:42 +00:00
### Organizacija Eksploatacije
2021-11-05 20:59:42 +00:00
Kao što je objašnjeno ranije, da biste zloupotrebili ovu tehniku, potrebno je da **prva prokrijumčarena poruka** u serveru **traje dugo da se obradi**.
2021-11-05 20:59:42 +00:00
Ovaj **zahtev koji traje dugo** je dovoljan ako želimo samo da **pokušamo ukrasti odgovor žrtve**. Ali ako želite izvršiti složeniju eksploataciju, ovo će biti zajednička struktura za eksploataciju.
2021-11-05 20:59:42 +00:00
Prvo **početni** zahtev zloupotrebljavajući **HTTP** **zahtev** **za smugling**, zatim **zahtev koji traje dugo** i zatim **1 ili više zahteva za payload** čiji će odgovori biti poslati žrtvama.
2021-11-05 20:59:42 +00:00
## Zloupotreba Desinhronizacije Reda HTTP Odgovora
2021-11-05 20:59:42 +00:00
### Hvatanje zahteva drugih korisnika <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
2021-11-05 20:59:42 +00:00
Kao i sa poznatim payloadima za HTTP zahtev za smugling, možete **ukrasti zahtev žrtve** sa jednom važnom razlikom: U ovom slučaju vam je potrebno samo da **poslati sadržaj bude reflektovan u odgovoru**, **nije potrebno trajno skladištenje**.
2021-11-05 20:59:42 +00:00
Prvo, napadač šalje payload koji sadrži **završni POST zahtev sa reflektovanim parametrom** na kraju i velikim Content-Length
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1053).png>)
2021-11-05 20:59:42 +00:00
Zatim, kada je **početni zahtev** (plavi) **obradjen** i **dok** se **spori** zahtev obrađuje (žuti) **sledeći zahtev koji stiže od žrtve** će biti **dodat u red odmah posle reflektovanog parametra**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (794).png>)
2021-11-05 20:59:42 +00:00
Zatim, **žrtva** će **primiti** **odgovor na spor** zahtev i ako u međuvremenu **napadač pošalje još jedan zahtev**, **odgovor na zahtev sa reflektovanim sadržajem će biti poslat njemu**.
2021-11-05 20:59:42 +00:00
## Desinhronizacija Odgovora
Do ovog trenutka, naučili smo kako zloupotrebiti napade HTTP zahteva za smugling da **kontrolišemo** **zahtev** **čiji** **odgovor** **klijent** **treba da** **primi** i kako možete zatim **ukrasti odgovor koji je bio namenjen žrtvi**.
Ali još uvek je moguće **desinhronizovati još više** odgovora.
Postoje interesantni zahtevi poput **HEAD** zahteva koji su specifični da nemaju **bilo kakav sadržaj unutar tela odgovora** i koji bi (mora) **sadržati Content-Length** zahteva kao **da je to GET zahtev**.
Stoga, ako napadač **ubaci** **HEAD** zahtev, kao na ovim slikama:
![](<../.gitbook/assets/image (1107).png>)
Onda, **kada plavi bude odgovoren napadaču**, sledeći zahtev žrtve će biti ubačen u red:
![](<../.gitbook/assets/image (999).png>)
Zatim, **žrtva** će **primiti** **odgovor** na **HEAD** zahtev, koji će **sadržati Content-Length ali nikakav sadržaj**. Stoga, posrednik **neće poslati ovaj odgovor** žrtvi, već će **čekati** na neki **sadržaj**, koji će zapravo biti **odgovor na žuti zahtev** (takođe ubačen od strane napadača):
![](<../.gitbook/assets/image (735).png>)
2024-02-10 13:11:20 +00:00
### Konfuzija sadržaja
2021-11-05 20:59:42 +00:00
Sledeći prethodni primer, znajući da možete **kontrolisati telo** zahteva čiji će odgovor primiti žrtva i da **HEAD** **odgovor** obično sadrži u zaglavljima **Content-Type i Content-Length**, možete **poslati zahtev kao što je sledeći** da biste izazvali XSS u žrtvi, a da stranica nije ranjiva na XSS:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (688).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
### Trovanje keša
2021-11-05 20:59:42 +00:00
Zloupotrebom prethodno komentisanog napada na konfuziju sadržaja odgovora desinhronizacije, **ako keš čuva odgovor na zahtev koji je izvršila žrtva i ovaj odgovor je ubačen koji izaziva XSS, tada je keš zaražen**.
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
Zlonamerni zahtev koji sadrži XSS payload:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (614).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
Zlonamerni odgovor žrtvi koji sadrži zaglavlje koje ukazuje kešu da sačuva odgovor:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (566).png>)
2021-11-05 20:59:42 +00:00
{% hint style="warning" %}
Imajte na umu da u ovom slučaju ako je **"žrtva" napadač** on može sada izvršiti **trovanje keša na proizvoljnim URL-ovima** jer može **kontrolisati URL koji će biti keširan** sa zlonamernim odgovorom.
2021-11-05 20:59:42 +00:00
{% endhint %}
### Prevara keša veb stranica
2021-11-05 20:59:42 +00:00
Ovaj napad je sličan prethodnom, ali **umesto ubacivanja payloada unutar keša, napadač će keširati informacije žrtve unutar keša:**
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (991).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
### Podela odgovora
2021-11-05 20:59:42 +00:00
Cilj ovog napada je ponovo zloupotreba **desinhronizacije odgovora** kako bi se **naterao proxy da pošalje odgovor koji je 100% generisao napadač**.
2021-11-05 20:59:42 +00:00
Da bi postigao ovo, napadač mora pronaći krajnju tačku veb aplikacije koja **reflektuje neke vrednosti unutar odgovora** i **znati dužinu sadržaja HEAD odgovora**.
2021-11-05 20:59:42 +00:00
Poslaće **eksploataciju** kao:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (911).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
Nakon što se prvi zahtev reši i pošalje nazad napadaču, **zahtev žrtve se dodaje u red**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (737).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 13:11:20 +00:00
Žrtva će kao odgovor primiti **HEAD odgovor + sadržaj odgovora drugog zahteva (koji sadrži deo reflektovanih podataka):**
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (356).png>)
2021-11-05 20:59:42 +00:00
Međutim, primetite kako je **reflektovani podatak imao veličinu u skladu sa Content-Length** odgovora **HEAD** koji je **generisao validan HTTP odgovor u redu odgovora**.
2022-04-28 16:01:33 +00:00
Stoga, **naredni zahtev drugog žrtve** će **primiti** kao **odgovor nešto potpuno kreirano od strane napadača**. Pošto je odgovor potpuno kreiran od strane napadača, on takođe može **naterati proxy da kešira odgovor**.