mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/http-request-smuggling/README.md'] to sr
This commit is contained in:
parent
fbde33150d
commit
dd7819d09d
@ -24,21 +24,21 @@ To omogućava korisniku da **modifikuje sledeći zahtev koji stigne do pozadinsk
|
||||
|
||||
### Stvarnost
|
||||
|
||||
**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**.
|
||||
**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-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**.
|
||||
|
||||
### Posebnosti
|
||||
|
||||
Zapamtite da u HTTP **novi red karakter se sastoji od 2 bajta:**
|
||||
Zapamtite da u HTTP **novi red karaktera se sastoji od 2 bajta:**
|
||||
|
||||
- **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.
|
||||
- **Connection**: Na osnovu mog iskustva, preporučuje se korišćenje **`Connection: keep-alive`** na prvom zahtevu prilikom smuggling-a.
|
||||
|
||||
## 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 uređaji zloupotrebljavaju nove redove, povratne znakove i neispravne dužine sadržaja.
|
||||
> 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 content-length vrednosti.
|
||||
|
||||
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.
|
||||
|
||||
@ -57,7 +57,7 @@ HTTP request smuggling napadi se kreiraju slanjem nejasnih zahteva koji koriste
|
||||
|
||||
- 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 deljen zbog `Transfer-Encoding: chunked` zaglavlja, tumačeći preostale podatke kao odvojen, sledeći zahtev.
|
||||
- Pozadinski server obrađuje zahtev kao chunked zbog `Transfer-Encoding: chunked` zaglavlja, tumačeći preostale podatke kao odvojen, sledeći zahtev.
|
||||
- **Primer:**
|
||||
|
||||
```
|
||||
@ -79,7 +79,7 @@ Foo: x
|
||||
- **Pozadinski (CL):** Obradjuje zahtev na osnovu `Content-Length` zaglavlja.
|
||||
- **Scenarijo Napada:**
|
||||
|
||||
- Napadač šalje deljeni zahtev gde veličina dela (`7b`) i stvarna dužina sadržaja (`Content-Length: 4`) ne odgovaraju.
|
||||
- Napadač šalje chunked 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,7 +104,7 @@ x=
|
||||
|
||||
#### TE.TE Ranjivost (Transfer-Encoding koriste oba, sa obfuscation)
|
||||
|
||||
- **Serveri:** Oboje podržavaju `Transfer-Encoding`, ali jedan može biti prevaren da ga ignoriše putem obfuscation.
|
||||
- **Serveri:** Obe 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` zaglavljima.
|
||||
@ -131,7 +131,7 @@ Transfer-Encoding
|
||||
|
||||
#### **CL.CL Scenarijo (Content-Length koriste i Frontalni i Pozadinski)**
|
||||
|
||||
- Oboje servera obrađuju zahtev isključivo na osnovu `Content-Length` zaglavlja.
|
||||
- Obe 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:**
|
||||
|
||||
@ -161,7 +161,7 @@ Non-Empty Body
|
||||
|
||||
#### TE.0 Scenarijo
|
||||
|
||||
- Kao prethodni, ali koristeći TE
|
||||
- Kao prethodni, ali koristeći 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**:
|
||||
```
|
||||
@ -185,7 +185,7 @@ 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 [**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**.
|
||||
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**.
|
||||
|
||||
#### Forcing via hop-by-hop headers
|
||||
|
||||
@ -207,7 +207,7 @@ Identifikacija ranjivosti HTTP request smuggling često se može postići koriš
|
||||
|
||||
- **Metod:**
|
||||
|
||||
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka na dodatne podatke.
|
||||
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka dodatne podatke.
|
||||
- **Primer:**
|
||||
|
||||
```
|
||||
@ -234,7 +234,7 @@ A
|
||||
|
||||
- **Metod:**
|
||||
|
||||
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka na dodatne podatke.
|
||||
- Pošaljite zahtev koji, ako je aplikacija ranjiva, će uzrokovati da back-end server čeka dodatne podatke.
|
||||
- **Primer:**
|
||||
|
||||
```
|
||||
@ -254,8 +254,8 @@ X
|
||||
|
||||
### Druge Metode za Pronalaženje Ranjivosti
|
||||
|
||||
- **Analiza Diferencijalnog Odgovora:**
|
||||
- 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.
|
||||
- **Analiza Odgovora sa Diferencijalima:**
|
||||
- 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.
|
||||
- **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:**
|
||||
@ -265,7 +265,7 @@ X
|
||||
|
||||
### 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š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.
|
||||
Nakon potvrđivanja efikasnosti tehnika merenja vremena, ključno je proveriti da li se klijentski zahtevi mogu manipulirati. Jednostavna metoda je pokušaj trovanja vaših zahteva, na primer, da zahtev za `/` dovede do 404 odgovora. Primeri `CL.TE` i `TE.CL` prethodno raspravljeni u [Osnovnim Primerima](#basic-examples) pokazuju kako otrovati klijentov zahtev da izazove 404 odgovor, uprkos tome što klijent pokušava da pristupi drugom resursu.
|
||||
|
||||
**Ključne Napomene**
|
||||
|
||||
@ -279,7 +279,7 @@ Kada testirate ranjivosti request smuggling-a ometajući druge zahteve, imajte n
|
||||
|
||||
## 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.
|
||||
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 klijentske strane od pravog desinkronizovanja sa servera.
|
||||
|
||||
### Zašto pipelining stvara klasične lažne pozitivne rezultate
|
||||
|
||||
@ -320,7 +320,7 @@ Content_Length: 47
|
||||
GET /robots.txt HTTP/1.1
|
||||
X: Y
|
||||
```
|
||||
Impact: nema. Samo ste desinhronizovali svog klijenta od servera.
|
||||
Impact: nema. Samo ste desinkronizovali 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".
|
||||
@ -330,12 +330,12 @@ Impact: nema. Samo ste desinhronizovali svog klijenta od servera.
|
||||
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.
|
||||
- Ako se ponašanje izgubi, verovatno je u pitanju klijentski pipelining, osim ako se ne bavite konekcijama zaključanim/stanje-vezanim 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 "Browser‑Powered Desync Attacks" za tehniku zaključane konekcije.
|
||||
- Neki FEs ponovo koriste konekciju upstream BE samo ako je klijent ponovo koristi. Koristite delimične zahteve da otkrijete FE ponašanje koje odražava ponovnu upotrebu klijenta.
|
||||
- Pogledajte PortSwigger "Napadi na desinkronizaciju pokretani pretraživačem" 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.
|
||||
@ -347,15 +347,15 @@ Impact: nema. Samo ste desinhronizovali svog klijenta od servera.
|
||||
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.
|
||||
- Koristite delimične zahteve da pokažete da FE ponovo koristi upstream samo kada klijent to radi.
|
||||
- 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.
|
||||
- Otkriće internih zaglavlja: reflektujte FE-ugrađena 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.
|
||||
- Zloupotreba zaglavlja hosta: kombinujte sa čudima usmeravanja 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.
|
||||
- Zatim povežite sa primitivima trovanja kešom/zaglavlja-otkrivanja/zaobilaženja 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:
|
||||
>
|
||||
@ -370,7 +370,7 @@ Ako ciljate na desinkronizaciju pokretanu pretraživačem/sa strane klijenta, zl
|
||||
Za pozadinu i end-to-end radne tokove:
|
||||
|
||||
{{#ref}}
|
||||
-browser-http-request-smuggling.md
|
||||
browser-http-request-smuggling.md
|
||||
{{#endref}}
|
||||
|
||||
### Alati za pomoć u odlučivanju
|
||||
@ -381,13 +381,13 @@ Za pozadinu i end-to-end radne tokove:
|
||||
- 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.).
|
||||
> Smatrajte 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 bezbednosti front-enda putem HTTP Request Smuggling
|
||||
|
||||
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.
|
||||
Ponekad, front-end proksi primenjuju mere bezbednosti, pažljivo ispitujuć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 ispitivanje 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 kontrola bezbednosti front-enda, posebno ciljajući putanju `/admin` koja je obično zaštićena front-end proksijem:
|
||||
|
||||
@ -408,7 +408,7 @@ Content-Length: 10
|
||||
|
||||
x=
|
||||
```
|
||||
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.
|
||||
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.
|
||||
|
||||
**TE.CL Primer**
|
||||
```
|
||||
@ -426,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` zaglavlja. Slično CL.TE napadu, front-end proxy zanemaruje ugnježdeni `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 prokrijumčareni `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 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 ponavlja u odgovoru. Zatim, kreirajte zahtev, koristeći ovaj parametar 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 kao poslednji, slično sledećem:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
@ -494,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 kroz User-Agent zaglavlje, sledeći payload prikazuje kako iskoristiti ovu ranjivost:
|
||||
U scenarijima gde je veb sajt podložan Reflektovanom XSS putem User-Agent zaglavlja, sledeći payload prikazuje kako iskoristiti ovu ranjivost:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
|
||||
@ -517,24 +517,24 @@ A=
|
||||
```
|
||||
Ovaj payload je strukturiran da iskoristi ranjivost na sledeći način:
|
||||
|
||||
1. Inicira `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 krijumčarenja.
|
||||
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.
|
||||
3. Zatim se uvodi krijumčaren `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 iskorišćava Reflected XSS ranjivost na nestandardan, ali efikasan način.
|
||||
Manipulacijom `User-Agent` kroz krijumčarenje, payload zaobilazi normalna ograničenja zahteva, čime iskorišćava Reflected XSS ranjivost na nestandardan, ali efikasan način.
|
||||
|
||||
#### HTTP/0.9
|
||||
|
||||
> [!CAUTION]
|
||||
> U slučaju da se korisnički sadržaj odražava u odgovoru sa **`Content-type`** kao što je **`text/plain`**, sprečavajući izvršenje XSS. Ako server podržava **HTTP/0.9, možda će biti moguće zaobići ovo**!
|
||||
> U slučaju da se korisnički sadržaj odražava u odgovoru sa **`Content-type`** kao što je **`text/plain`**, sprečavajući izvršavanje XSS. Ako server podržava **HTTP/0.9, možda će biti moguće zaobići ovo**!
|
||||
|
||||
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 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`.
|
||||
U [**ovoj analizi**](https://mizu.re/post/twisty-python), ovo je zloupotrebljeno sa krijumčarenjem zahteva i **ranjivim krajnjim tačkom koja će odgovoriti sa korisničkim unosom** da bi se krijumčario 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`.
|
||||
|
||||
### 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>
|
||||
### Iskorišćavanje preusmeravanja na lokaciji sa HTTP zahtevom za krijumčarenje <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 kosa crte rezultira preusmeravanjem da uključi kosu crtu:
|
||||
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 rezultira preusmeravanjem da uključi kosu:
|
||||
```
|
||||
GET /home HTTP/1.1
|
||||
Host: normal-website.com
|
||||
@ -570,17 +570,17 @@ 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 pružajući zlonameran JavaScript kao odgovor.
|
||||
U ovom scenariju, korisnički zahtev za JavaScript datotekom se otima. Napadač može potencijalno kompromitovati korisnika tako što će poslužiti 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>
|
||||
|
||||
Trovanje web kešom može se izvršiti ako bilo koja komponenta **infrastrukture front-enda kešira sadržaj**, obično radi poboljšanja performansi. Manipulacijom serverovog odgovora, moguće je **otrovati keš**.
|
||||
|
||||
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).
|
||||
Prethodno smo posmatrali kako se serverovi odgovori mogu izmeniti da vrate 404 grešku (pogledajte [Basic Examples](#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 **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`.
|
||||
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 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 služi 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 poslužuje JavaScript kod pod kontrolom napadača:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable.net
|
||||
@ -598,9 +598,9 @@ Content-Length: 10
|
||||
|
||||
x=1
|
||||
```
|
||||
Napomena o ugrađenom zahtevu koji cilja `/post/next?postId=3`. Ovaj zahtev će biti preusmeren na `/post?postId=4`, koristeći **Host header value** za određivanje domena. Menjanjem **Host header-a**, napadač može preusmeriti zahtev na svoj domen (**on-site redirect to open redirect**).
|
||||
Napomena o ugrađenom zahtevu koji cilja `/post/next?postId=3`. Ovaj zahtev će biti preusmeren na `/post?postId=4`, koristeći **vrednost Host header-a** za određivanje domena. Menjanjem **Host header-a**, napadač može preusmeriti zahtev na svoj domen (**on-site redirect to open redirect**).
|
||||
|
||||
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 uspešnog **socket poisoning-a**, treba inicirati **GET zahtev** 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 služiti keširani sadržaj napadačeve skripte, efikasno pokrećući širok XSS napad.
|
||||
|
||||
@ -626,7 +626,7 @@ Ako ovaj prokrijumčareni zahtev otrova keš unos namenjen za statički sadržaj
|
||||
|
||||
### Zloupotreba TRACE putem HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
|
||||
|
||||
[**U ovom postu**](https://portswigger.net/research/trace-desync-attack) se sugeriše da ako server ima omogućenu metodu TRACE, moglo bi biti moguće zloupotrebiti je putem HTTP Request Smuggling. To je zato što će ova metoda reflektovati bilo koji zaglavlje poslato serveru kao deo tela odgovora. Na primer:
|
||||
[**U ovom postu**](https://portswigger.net/research/trace-desync-attack) se sugeriše da, ako server ima omogućenu metodu TRACE, može biti moguće zloupotrebiti je putem HTTP Request Smuggling. To je zato što će ova metoda reflektovati bilo koji header poslat serveru kao deo tela odgovora. Na primer:
|
||||
```
|
||||
TRACE / HTTP/1.1
|
||||
Host: example.com
|
||||
@ -645,11 +645,11 @@ X-Forwarded-For: xxx.xxx.xxx.xxx
|
||||
```
|
||||
Primer kako iskoristiti ovo ponašanje bio bi da se **prokrijumčari prvo HEAD zahtev**. Ovaj zahtev će biti odgovoreno samo sa **zaglavljima** GET zahteva (**`Content-Type`** među njima). I prokrijumčariti **odmah nakon HEAD TRACE zahtev**, koji će **odražavati poslati podaci**.\
|
||||
Pošto će HEAD odgovor sadržati `Content-Length` zaglavlje, **odgovor TRACE zahteva će biti tretiran kao telo HEAD odgovora, čime se odražavaju proizvoljni podaci** u odgovoru.\
|
||||
Ovaj odgovor će biti poslat sledećem zahtevu preko veze, tako da bi to moglo biti **iskorišćeno u keširanom JS fajlu na primer za injektovanje proizvoljnog JS koda**.
|
||||
Ovaj odgovor će biti poslat sledećem zahtevu preko veze, tako da bi ovo moglo biti **iskorišćeno u keširanom JS fajlu na primer da se ubaci proizvoljan JS kod**.
|
||||
|
||||
### 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č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.
|
||||
Nastavite da pratite [**ovaj post**](https://portswigger.net/research/trace-desync-attack) koji sugeriše još jedan način da se iskoristi TRACE metoda. Kao što je komentarisano, prokrijumčariti HEAD zahtev i TRACE zahtev je moguće **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 za sledeći odgovor (što bi moglo biti iskorišćeno za izvođenje trovanja keša).
|
||||
|
||||
@ -672,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 i 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 da TRACE odgovor bude deo HEAD tela, a kada se završi HEAD Content-Length, validan HTTP odgovor se švercuje):
|
||||
```
|
||||
HTTP/1.1 200 OK
|
||||
Content-Type: text/html
|
||||
@ -693,7 +693,7 @@ Content-Length: 50
|
||||
|
||||
<script>alert(“arbitrary response”)</script>
|
||||
```
|
||||
### Weaponizing HTTP Request Smuggling with HTTP Response Desynchronisation
|
||||
### Naoružavanje HTTP Request Smuggling-a sa HTTP Response Desinkronizacijom
|
||||
|
||||
Da li ste pronašli neku HTTP Request Smuggling ranjivost i ne znate kako da je iskoristite. Pokušajte ove druge metode eksploatacije:
|
||||
|
||||
@ -701,25 +701,25 @@ Da li ste pronašli neku HTTP Request Smuggling ranjivost i ne znate kako da je
|
||||
../http-response-smuggling-desync.md
|
||||
{{#endref}}
|
||||
|
||||
### Other HTTP Request Smuggling Techniques
|
||||
### Druge HTTP Request Smuggling Tehnike
|
||||
|
||||
- Browser HTTP Request Smuggling (Client Side)
|
||||
- Browser HTTP Request Smuggling (Klijentska strana)
|
||||
|
||||
{{#ref}}
|
||||
browser-http-request-smuggling.md
|
||||
{{#endref}}
|
||||
|
||||
- Request Smuggling in HTTP/2 Downgrades
|
||||
- Request Smuggling u HTTP/2 Downgrade-ima
|
||||
|
||||
{{#ref}}
|
||||
request-smuggling-in-http-2-downgrades.md
|
||||
{{#endref}}
|
||||
|
||||
## Turbo intruder scripts
|
||||
## Turbo intruder skripte
|
||||
|
||||
### CL.TE
|
||||
|
||||
From [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
|
||||
Sa [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user