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

This commit is contained in:
Translator 2025-08-20 19:28:41 +00:00
parent dbc083a321
commit aa1516320f

View File

@ -4,7 +4,7 @@
## Nedir
Bu zafiyet, **ön uç proxyleri** ile **arka uç** sunucusu arasında bir **senkronizasyon bozukluğu** olduğunda meydana gelir ve bu, bir **saldırganın** **göndermesine** olanak tanır. HTTP **isteği**, **ön uç** proxyleri (yük dengeleme/ters proxy) tarafından **tek bir istek** olarak ve **arka uç** sunucusu tarafından **2 istek** olarak **yorumlanır**.\
Bu zafiyet, **ön uç proxyleri** ile **arka uç** sunucusu arasında bir **senkronizasyon bozukluğu** olduğunda meydana gelir ve bu, bir **saldırganın** **ön uç** proxyleri (yük dengeleme/ters proxy) tarafından **tek bir istek** olarak ve **arka uç** sunucusu tarafından **2 istek** olarak **yorumlanacak** bir HTTP **isteği** **göndermesine** olanak tanır.\
Bu, bir kullanıcının **arka uç sunucusuna gelen bir sonraki isteği değiştirmesine** olanak tanır.
### Teori
@ -25,7 +25,7 @@ Bu, bir kullanıcının **arka uç sunucusuna gelen bir sonraki isteği değişt
### Gerçeklik
**Ön Uç** (bir yük dengeleme / Ters Proxy) _**content-length**_ veya _**transfer-encoding**_ başlığını **işler** ve **Arka Uç** sunucusu **diğerini** işleyerek iki sistem arasında bir **senkronizasyon bozukluğu** yaratır.\
Bu, **bir saldırganın ters proxyye bir istek göndermesine** olanak tanır ve bu istek **arka uç** sunucusu tarafından **2 farklı istek** olarak **yorumlanır**. Bu tekniğin **tehlikesi**, **arka uç** sunucusunun **2. isteği** enjekte edilmiş gibi **yorumlaması** ve o istemcinin **gerçek isteğinin** **enjekte edilen isteğin** bir parçası olmasıdır.
Bu, **bir saldırganın ters proxyye bir istek göndermesine** olanak tanır ve bu istek **arka uç** sunucusu tarafından **2 farklı istek** olarak **yorumlanır**. Bu tekniğin **tehlikesi**, **arka uç** sunucusunun **2. isteği** enjekte edilmiş gibi **yorumlaması** ve o istemcinin **gerçek isteğinin** **enjekte edilmiş isteğin** bir parçası olmasıdır.
### Özellikler
@ -40,7 +40,7 @@ HTTP'de **yeni bir satır karakteri 2 bayttan oluşur:**
> [!TIP]
> Bunu Burp Suite ile sömürmeye çalışırken **`Update Content-Length` ve `Normalize HTTP/1 line endings`** seçeneklerini tekrar edicide devre dışı bırakın çünkü bazı araçlar yeni satırları, taşıma dönüşlerini ve hatalı içerik uzunluklarını kötüye kullanır.
HTTP istek smuggling saldırıları, **Content-Length** (CL) ve **Transfer-Encoding** (TE) başlıklarının ön uç ve arka uç sunucuları tarafından nasıl yorumlandığındaki tutarsızlıklardan yararlanan belirsiz istekler göndererek oluşturulur. Bu saldırılar, esas olarak **CL.TE**, **TE.CL** ve **TE.TE** olarak farklı biçimlerde ortaya çıkabilir. Her tür, ön uç ve arka uç sunucularının bu başlıkları nasıl önceliklendirdiğinin benzersiz bir kombinasyonunu temsil eder. Zafiyetler, sunucuların aynı isteği farklı şekillerde işlemesinden kaynaklanır ve beklenmedik ve potansiyel olarak kötü niyetli sonuçlara yol açar.
HTTP istek smuggling saldırıları, ön uç ve arka uç sunucularının `Content-Length` (CL) ve `Transfer-Encoding` (TE) başlıklarını nasıl yorumladığındaki tutarsızlıklardan yararlanan belirsiz istekler göndererek oluşturulur. Bu saldırılar, esas olarak **CL.TE**, **TE.CL** ve **TE.TE** olarak farklı biçimlerde ortaya çıkabilir. Her tür, ön uç ve arka uç sunucularının bu başlıkları nasıl önceliklendirdiğinin benzersiz bir kombinasyonunu temsil eder. Zafiyetler, sunucuların aynı isteği farklı şekillerde işlemesinden kaynaklanır ve beklenmedik ve potansiyel olarak kötü niyetli sonuçlara yol açar.
### Zafiyet Türlerinin Temel Örnekleri
@ -57,7 +57,7 @@ HTTP istek smuggling saldırıları, **Content-Length** (CL) ve **Transfer-Encod
- Saldırgan, `Content-Length` başlığının değeri gerçek içerik uzunluğuyla eşleşmeyen bir istek gönderir.
- Ön uç sunucusu, `Content-Length` değerine dayanarak tüm isteği arka uca iletir.
- Arka uç sunucusu, `Transfer-Encoding: chunked` başlığı nedeniyle isteği parçalı olarak işler ve kalan veriyi ayrı, sonraki bir istek olarak yorumlar.
- Arka uç sunucusu, `Transfer-Encoding: chunked` başlığı nedeniyle isteği parça parça işler ve kalan veriyi ayrı, sonraki bir istek olarak yorumlar.
- **Örnek:**
```
@ -79,9 +79,9 @@ Foo: x
- **Arka Uç (CL):** İsteği `Content-Length` başlığına göre işler.
- **Saldırı Senaryosu:**
- Saldırgan, parça boyutunun (`7b`) ve gerçek içerik uzunluğunun (`Content-Length: 4`) uyum sağlamadığı bir parçalı istek gönderir.
- Ön uç sunucusu, `Transfer-Encoding`e saygı göstererek tüm isteği arka uca iletir.
- Arka uç sunucusu, `Content-Length`e saygı göstererek isteğin yalnızca ilk kısmını (`7b` bayt) işler ve geri kalanını istenmeyen bir sonraki isteğin parçası olarak bırakır.
- Saldırgan, parça boyutunun (`7b`) ve gerçek içerik uzunluğunun (`Content-Length: 4`) uyum sağlamadığı bir parça istek gönderir.
- Ön uç sunucusu, `Transfer-Encoding` başlığını dikkate alarak tüm isteği arka uca iletir.
- Arka uç sunucusu, `Content-Length` başlığını dikkate alarak isteğin yalnızca ilk kısmını (`7b` bayt) işler ve geri kalanını istenmeyen bir sonraki isteğin parçası olarak bırakır.
- **Örnek:**
```
@ -104,12 +104,12 @@ x=
#### TE.TE Zafiyeti (Her ikisinde de Transfer-Encoding, obfuscation ile)
- **Sunucular:** Her ikisi de `Transfer-Encoding`i destekler, ancak biri obfuscation yoluyla bunu göz ardı etmeye ikna edilebilir.
- **Sunucular:** Her ikisi de `Transfer-Encoding` destekler, ancak biri obfuscation yoluyla bunu göz ardı etmeye ikna edilebilir.
- **Saldırı Senaryosu:**
- Saldırgan, obfuscate edilmiş `Transfer-Encoding` başlıkları ile bir istek gönderir.
- Hangi sunucunun (ön uç veya arka uç) obfuscation'ı tanımadığına bağlı olarak, bir CL.TE veya TE.CL zafiyeti sömürülebilir.
- İsteğin işlenmemiş kısmı, sunuculardan birinin gördüğü gibi, sonraki bir isteğin parçası haline gelir ve smuggling'e yol açar.
- İsteğin işlenmemiş kısmı, sunuculardan biri tarafından görüldüğünde, sonraki bir isteğin parçası haline gelir ve smuggling'e yol açar.
- **Örnek:**
```
@ -131,8 +131,8 @@ Transfer-Encoding
#### **CL.CL Senaryosu (Her iki tarafta da Content-Length kullanılır)**
- Her iki sunucu, isteği yalnızca `Content-Length` başlığına dayanarak işler.
- Bu senaryo genellikle smuggling'e yol açmaz, çünkü her iki sunucu da isteğin uzunluğunu yorumlama konusunda uyumludur.
- Her iki sunucu da isteği yalnızca `Content-Length` başlığına dayanarak işler.
- Bu senaryo genellikle smuggling'e yol açmaz, çünkü her iki sunucu da isteğin uzunluğunu yorumlama konusunda uyum içindedir.
- **Örnek:**
```
@ -146,7 +146,7 @@ Normal Request
#### **CL.0 Senaryosu**
- `Content-Length` başlığının mevcut olduğu ve sıfırdan farklı bir değere sahip olduğu senaryoları ifade eder, bu da isteğin gövdesinin içerik taşıdığını gösterir. Arka uç, `Content-Length` başlığını göz ardı eder (bu 0 olarak kabul edilir), ancak ön uç bunu işler.
- `Content-Length` başlığının mevcut olduğu ve sıfırdan farklı bir değere sahip olduğu senaryoları ifade eder, bu da istek gövdesinin içerik taşıdığını gösterir. Arka uç, `Content-Length` başlığını göz ardı eder (bu 0 olarak kabul edilir), ancak ön uç bunu işler.
- Smuggling saldırılarını anlamak ve oluşturmak için kritik öneme sahiptir, çünkü sunucuların bir isteğin sonunu nasıl belirlediğini etkiler.
- **Örnek:**
@ -161,7 +161,7 @@ Non-Empty Body
#### TE.0 Senaryosu
- Öncekine benzer ancak TE kullanarak.
- Öncekine benzer ancak TE kullanır.
- Teknik [burada rapor edilmiştir](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- **Örnek**:
```
@ -228,7 +228,7 @@ A
- **Göstergeler:**
- Yanıt sürelerinde zaman aşımı veya uzun gecikmeler.
- Arka uç sunucudan 400 Bad Request hatası almak, bazen ayrıntılı sunucu bilgileri ile birlikte.
- Arka uç sunucudan 400 Bad Request hatası almak, bazen detaylı sunucu bilgileri ile birlikte.
### Zamanlama Teknikleri Kullanarak TE.CL Açıklarını Bulma
@ -330,11 +330,11 @@ Impact: yok. Sadece istemcinizi sunucu çerçevesinden senkronize ettiniz.
1. Yeniden kullanımı devre dışı bırakın ve yeniden test edin
- Burp Intruder/Repeater'da HTTP/1 yeniden kullanımını kapatın ve "Grubu sırayla gönder" seçeneğinden kaçının.
- Turbo Intruder'da `requestsPerConnection=1` ve `pipeline=False` ayarlayın.
- Davranış kaybolursa, muhtemelen istemci tarafı pipelining'dir, aksi takdirde bağlantı kilitli/ durumlu hedeflerle veya istemci tarafı desenkronizasyonu ile uğraşıyorsunuz.
- Davranış kaybolursa, muhtemelen istemci tarafı pipelining'dir, bağlantı kilitli/devletli hedeflerle veya istemci tarafı desenkronizasyonu ile uğraşmadığınız sürece.
2. HTTP/2 iç içe yanıt kontrolü
- Bir HTTP/2 isteği gönderin. Eğer yanıt gövdesi tam bir iç içe geçmiş HTTP/1 yanıtı içeriyorsa, bu bir arka uç ayrıştırma/desenkronizasyon hatası kanıtıdır, saf bir istemci artefaktı değil.
- Bir HTTP/2 isteği gönderin. Eğer yanıt gövdesi tam bir iç içe HTTP/1 yanıtı içeriyorsa, bu bir arka uç ayrıştırma/desenkronizasyon hatası kanıtıdır, saf bir istemci artefaktı değil.
3. Bağlantı kilitli ön uçlar için kısmi istekler
- Bazı ön uçlar, istemci kendi bağlantısını yeniden kullanmadıkça yukarı akış arka uç bağlantısını yalnızca yeniden kullanır. İstemci yeniden kullanımını yansıtan ön uç davranışını tespit etmek için kısmi istekler kullanın.
- Bazı ön uçlar, yalnızca istemci kendi bağlantısını yeniden kullandığında yukarı akış arka uç bağlantısını yeniden kullanır. İstemci yeniden kullanımını yansıtan ön uç davranışını tespit etmek için kısmi istekler kullanın.
- Bağlantı kilitli tekniği için PortSwigger "Tarayıcı Güçlü Desenkronizasyon Saldırıları"na bakın.
4. Durum probeleri
- Aynı TCP bağlantısındaki ilk ve sonraki istek farklılıklarını arayın (ilk istek yönlendirme/doğrulama).
@ -344,15 +344,15 @@ Impact: yok. Sadece istemcinizi sunucu çerçevesinden senkronize ettiniz.
### Bağlantı kilitli istek smuggling (yeniden kullanım gerektirir)
Bazı ön uçlar, istemci kendi bağlantısını yeniden kullanmadıkça yukarı akış bağlantısını yalnızca yeniden kullanır. Gerçek smuggling vardır ancak istemci tarafı yeniden kullanımına bağlıdır. Etkileri ayırt etmek ve kanıtlamak için:
Bazı ön uçlar, yalnızca istemci kendi bağlantısını yeniden kullandığında yukarı akış bağlantısını yeniden kullanır. Gerçek smuggling vardır ancak istemci tarafı yeniden kullanımına bağlıdır. Etkisini ayırt etmek ve kanıtlamak için:
- Sunucu tarafı hatasını kanıtlayın
- HTTP/2 iç içe yanıt kontrolünü kullanın veya
- Ön uç yalnızca istemci yeniden kullandığında yukarı akışı yeniden kullandığını göstermek için kısmi istekler kullanın.
- Doğrudan kullanıcılar arası soket istismarı engellense bile gerçek etki gösterin:
- Doğrudan kullanıcılar arası soket kötüye kullanımının engellendiği durumlarda bile gerçek etki gösterin:
- Önbellek zehirlenmesi: desenkronizasyon aracılığıyla paylaşılan önbellekleri zehirleyin, böylece yanıtlar diğer kullanıcıları etkiler.
- Dahili başlık ifşası: ön uç tarafından enjekte edilen başlıkları (örneğin, kimlik doğrulama/güven başlıkları) yansıtın ve kimlik doğrulama atlamasına geçin.
- Ön uç kontrollerini atlayın: kısıtlı yolları/yöntemleri ön uçtan geçirin.
- Host-header istismarı: dahili sanal ana bilgisayarlara geçmek için host yönlendirme tuhaflıkları ile birleştirin.
- Ön uç kontrollerini atlayın: kısıtlı yollar/yöntemleri ön uçtan geçirin.
- Host-header kötüye kullanımı: dahili sanal ana bilgisayarlara geçmek için host yönlendirme tuhaflıkları ile birleştirin.
- Operatör iş akışı
- Kontrol edilen yeniden kullanım ile yeniden üretin (Turbo Intruder `requestsPerConnection=2` veya Burp Repeater sekme grubu → "Grubu sırayla gönder (tek bağlantı)").
- Ardından önbellek/başlık sızıntısı/kontrol atlama ilkelere zincirleyin ve kullanıcılar arası veya yetkilendirme etkisini gösterin.
@ -370,7 +370,7 @@ Eğer tarayıcı destekli/istemci tarafı desenkronizasyon hedefliyorsanız, kö
Arka plan ve uçtan uca iş akışları için:
{{#ref}}
-browser-http-request-smuggling.md
browser-http-request-smuggling.md
{{#endref}}
### Karar vermeye yardımcı olacak araçlar
@ -381,15 +381,15 @@ Arka plan ve uçtan uca iş akışları için:
- Burp HTTP Request Smuggler: ilk istek yönlendirme/doğrulamasını tespit etmek için bir bağlantı durumu probu içerir.
> [!NOTE]
> Yeniden kullanım etkilerini, sunucu tarafı desenkronizasyonunu kanıtlayamadıkça ve somut etki (zehirlenmiş önbellek artefaktı, ayrıcalık atlamasını sağlayan sızdırılmış dahili başlık, atlanmış ön uç kontrolü vb.) ekleyemedikçe sorun olarak görmeyin.
> Yeniden kullanım etkilerini, sunucu tarafı desenkronizasyonunu kanıtlayamadığınız ve somut etki (zehirlenmiş önbellek artefaktı, ayrıcalık atlamasını sağlayan sızdırılmış dahili başlık, atlanmış ön uç kontrolü vb.) ekleyemedikçe sorun olarak görmeyin.
## HTTP Request Smuggling İstismarı
## HTTP Request Smuggling Kötüye Kullanımı
### HTTP Request Smuggling ile Ön Uç Güvenliğini Aşmak
Bazen, ön uç proxy'leri güvenlik önlemleri uygular ve gelen istekleri inceler. Ancak, bu önlemler HTTP Request Smuggling istismar edilerek aşılabilir ve yetkisiz erişim sağlanabilir. Örneğin, `/admin` yoluna erişim dışarıdan yasaklanmış olabilir ve ön uç proxy bu tür girişimleri aktif olarak engelleyebilir. Ancak, bu proxy, smuggling edilmiş bir HTTP isteği içindeki gömülü istekleri incelemeyi ihmal edebilir ve bu da bu kısıtlamaları aşmak için bir boşluk bırakır.
Bazen, ön uç proxy'leri güvenlik önlemleri uygular ve gelen istekleri inceler. Ancak, bu önlemler HTTP Request Smuggling'i kullanarak aşılabilir ve yetkisiz erişim sağlanabilir. Örneğin, `/admin`'e erişim dışarıdan yasaklanmış olabilir ve ön uç proxy'si bu tür girişimleri aktif olarak engelleyebilir. Ancak, bu proxy, smuggling edilmiş bir HTTP isteği içindeki gömülü istekleri incelemeyi ihmal edebilir ve bu kısıtlamaları aşmak için bir boşluk bırakabilir.
HTTP Request Smuggling'in ön uç güvenlik kontrollerini aşmak için nasıl kullanılabileceğini gösteren aşağıdaki örneklere bakın; özellikle genellikle ön uç proxy tarafından korunan `/admin` yolunu hedef alıyor:
HTTP Request Smuggling'in ön uç güvenlik kontrollerini aşmak için nasıl kullanılabileceğini gösteren aşağıdaki örneklere bakın; özellikle genellikle ön uç proxy'si tarafından korunan `/admin` yolunu hedef alıyor:
**CL.TE Örneği**
```
@ -430,9 +430,9 @@ Tersine olarak, TE.CL saldırısında, başlangıçtaki `POST` isteği `Transfer
### Ön uç istek yeniden yazımınıığa çıkarma <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
Uygulamalar genellikle gelen istekleri arka uç sunucusuna iletmeden önce değiştirmek için bir **ön uç sunucu** kullanır. Tipik bir değişiklik, arka uca istemcinin IP'sini iletmek için `X-Forwarded-For: <IP of the client>` gibi başlıklar eklemeyi içerir. Bu değişiklikleri anlamak kritik olabilir, çünkü **korumaları aşmanın** veya **gizli bilgileri veya uç noktalarıığa çıkarmanın** yollarını ortaya çıkarabilir.
Uygulamalar genellikle gelen istekleri arka uç sunucusuna iletmeden önce değiştirmek için bir **ön uç sunucusu** kullanır. Tipik bir değişiklik, arka uca istemcinin IP'sini iletmek için `X-Forwarded-For: <IP of the client>` gibi başlıklar eklemeyi içerir. Bu değişiklikleri anlamak kritik olabilir, çünkü **korumaları aşmanın** veya **gizli bilgileri veya uç noktalarıığa çıkarmanın** yollarını ortaya çıkarabilir.
Bir proxy'nin isteği nasıl değiştirdiğini araştırmak için, arka uçta yanıt olarak yankılanan bir POST parametresi bulun. Ardından, bu parametreyi en sona koyarak aşağıdaki gibi bir istek oluşturun:
Bir proxy'nin isteği nasıl değiştirdiğini araştırmak için, arka uçta yanıt olarak yankılanan bir POST parametresi bulun. Ardından, bu parametreyi en sona koyarak aşağıdakine benzer bir istek oluşturun:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@ -481,7 +481,7 @@ Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=
```
Bu senaryoda, **yorum parametresi** kamuya açık bir sayfadaki bir gönderinin yorum bölümündeki içerikleri saklamak için tasarlanmıştır. Sonuç olarak, sonraki isteğin içeriği bir yorum olarak görünecektir.
Bu senaryoda, **yorum parametresi** bir gönderinin yorum bölümündeki içerikleri, herkese açık bir sayfada saklamak için tasarlanmıştır. Sonuç olarak, sonraki isteğin içeriği bir yorum olarak görünecektir.
Ancak, bu tekniğin sınırlamaları vardır. Genel olarak, yalnızca kaçak istekte kullanılan parametre ayırıcıya kadar veri yakalar. URL kodlu form gönderimleri için bu ayırıcı `&` karakteridir. Bu, mağdur kullanıcının isteğinden yakalanan içeriğin ilk `&` ile duracağı anlamına gelir; bu, sorgu dizesinin bir parçası bile olabilir.
@ -491,10 +491,10 @@ Ayrıca, bu yaklaşımın bir TE.CL zafiyeti ile de geçerli olduğunu belirtmek
HTTP İstek Kaçakçılığı, **Yansıtılan XSS**'ye karşı savunmasız web sayfalarını istismar etmek için kullanılabilir ve önemli avantajlar sunar:
- Hedef kullanıcılarla etkileşim **gerekmez**.
- HTTP istek başlıkları gibi **normalde ulaşılamayan** istek bölümlerinde XSS'nin istismarına olanak tanır.
- Hedef kullanıcılarla **etkileşim gerektirmez**.
- HTTP istek başlıkları gibi **normalde ulaşılamayan** istek bölümlerinde XSS istismarına olanak tanır.
Bir web sitesinin User-Agent başlığı aracılığıyla Yansıtılan XSS'ye karşı savunmasız olduğu senaryolarda, aşağıdaki yük, bu zafiyeti nasıl istismar edeceğinizi göstermektedir:
Bir web sitesinin User-Agent başlığı aracılığıyla Yansıtılan XSS'ye karşı savunmasız olduğu senaryolarda, aşağıdaki yük, bu zafiyeti nasıl istismar edeceğini göstermektedir:
```
POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
@ -519,20 +519,20 @@ Bu payload, zafiyeti istismar etmek için şu şekilde yapılandırılmıştır:
1. Görünüşte tipik bir `POST` isteği başlatmak, smuggling'in başlangıcını belirtmek için `Transfer-Encoding: chunked` başlığı ile.
2. Ardından, chunked mesaj gövdesinin sonunu işaret eden bir `0` ile devam etmek.
3. Sonra, `User-Agent` başlığına bir script enjekte edilen smuggled bir `GET` isteği tanıtılır; `<script>alert(1)</script>`, sunucu bu sonraki isteği işlediğinde XSS'i tetikler.
3. Sonrasında, `User-Agent` başlığına bir script enjekte edilen smuggled bir `GET` isteği tanıtılır; `<script>alert(1)</script>`, sunucu bu sonraki isteği işlediğinde XSS'i tetikler.
`User-Agent`'ı smuggling ile manipüle ederek, payload normal istek kısıtlamalarını aşar ve böylece Yansıtılan XSS zafiyetini standart dışı ama etkili bir şekilde istismar eder.
#### HTTP/0.9
> [!CAUTION]
> Kullanıcı içeriği, **`Content-type`** gibi bir yanıtla yansıtıldığında **`text/plain`**, XSS'in çalışmasını engelleyebilir. Sunucu **HTTP/0.9**'u destekliyorsa, bunu aşmak mümkün olabilir!
> Kullanıcı içeriği, **`Content-type`** gibi bir yanıt içinde yansıtıldığında **`text/plain`**, XSS'in çalışmasını engelleyebilir. Sunucu **HTTP/0.9** destekliyorsa, bunu aşmak mümkün olabilir!
HTTP/0.9 sürümü, 1.0'dan önceydi ve yalnızca **GET** fiilleri kullanır ve **başlıklar** ile yanıt vermez, sadece gövdeyi kullanır.
[**bu yazıda**](https://mizu.re/post/twisty-python), bir istek smuggling ile ve **kullanıcının girişi ile yanıt verecek zayıf bir uç nokta** kullanılarak HTTP/0.9 ile bir istek smuggling yapıldı. Yanıtta yansıtılacak parametre, **geçerli başlıklar ve gövde ile sahte bir HTTP/1.1 yanıtı** içeriyordu, böylece yanıt geçerli çalıştırılabilir JS kodu içerecek ve `Content-Type` olarak `text/html` olacak.
[**bu yazıda**](https://mizu.re/post/twisty-python), bir istek smuggling ile ve **kullanıcının girişi ile yanıt verecek zayıf bir uç nokta** kullanılarak istismar edilmiştir. Yanıtta yansıtılacak parametre, **geçerli başlıklar ve gövde ile sahte bir HTTP/1.1 yanıtı** içeriyordu, böylece yanıt geçerli çalıştırılabilir JS kodu içerecek ve `Content-Type` olarak `text/html` olacaktır.
### HTTP İsteği Smuggling ile Yerinde Yönlendirmeleri İstismar Etme <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
### HTTP İstek Smuggling ile Yerinde Yönlendirmeleri İstismar Etme <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
Uygulamalar genellikle yönlendirme URL'sindeki `Host` başlığından hostname kullanarak bir URL'den diğerine yönlendirir. Bu, Apache ve IIS gibi web sunucularında yaygındır. Örneğin, bir klasörü sonuna eğik çizgi olmadan istemek, eğik çizgiyi dahil etmek için bir yönlendirme ile sonuçlanır:
```
@ -570,17 +570,17 @@ Sonuçlar:
HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/
```
Bu senaryoda, bir kullanıcının JavaScript dosyası talebi ele geçirilir. Saldırgan, kötü niyetli JavaScript sunarak kullanıcıyı tehlikeye atabilir.
Bu senaryoda, bir kullanıcının JavaScript dosyası için isteği ele geçirilir. Saldırgan, kötü niyetli JavaScript sunarak kullanıcıyı tehlikeye atabilir.
### HTTP Request Smuggling ile Web Cache Poisoning Sömürüsü <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
Web cache poisoning, **ön uç altyapısının içerik önbelleğe alması** durumunda gerçekleştirilebilir; bu genellikle performansı artırmak için yapılır. Sunucunun yanıtını manipüle ederek, **önbelleği zehirlemek** mümkündür.
Daha önce, sunucu yanıtlarının 404 hatası dönecek şekilde nasıl değiştirilebileceğini gözlemledik (bkz. [Temel Örnekler](#basic-examples)). Benzer şekilde, sunucuyu `/static/include.js` talebine yanıt olarak `/index.html` içeriği sunmaya kandırmak mümkündür. Sonuç olarak, `/static/include.js` içeriği önbellekte `/index.html` ile değiştirilir, bu da `/static/include.js`'nin kullanıcılara erişilemez hale gelmesine neden olur ve bu durum bir Hizmet Reddi (DoS) ile sonuçlanabilir.
Daha önce, sunucu yanıtlarının 404 hatası dönecek şekilde nasıl değiştirilebileceğini gözlemledik (bkz. [Temel Örnekler](#basic-examples)). Benzer şekilde, sunucuyu `/static/include.js` isteğine yanıt olarak `/index.html` içeriği sunmaya kandırmak mümkündür. Sonuç olarak, `/static/include.js` içeriği önbellekte `/index.html` ile değiştirilir, bu da `/static/include.js`'nin kullanıcılara erişilemez hale gelmesine neden olur ve bu durum bir Hizmet Reddi (DoS) ile sonuçlanabilir.
Bu teknik, bir **Açık Yönlendirme açığı** keşfedildiğinde veya **açık yönlendirmeye yerel bir yönlendirme** olduğunda özellikle güçlü hale gelir. Bu tür açıklar, `/static/include.js`'nin önbelleğe alınmış içeriğini saldırganın kontrolündeki bir betikle değiştirmek için sömürülebilir; bu da güncellenmiş `/static/include.js`'yi talep eden tüm istemcilere karşı yaygın bir Cross-Site Scripting (XSS) saldırısına olanak tanır.
Bu teknik, bir **Açık Yönlendirme açığı** keşfedildiğinde veya **açık yönlendirmeye yerel bir yönlendirme** olduğunda özellikle güçlü hale gelir. Bu tür açıklar, saldırganın kontrolündeki bir script ile `/static/include.js`'nin önbelleğe alınmış içeriğini değiştirmek için sömürülebilir ve bu da güncellenmiş `/static/include.js`'yi talep eden tüm istemcilere karşı yaygın bir Cross-Site Scripting (XSS) saldırısını mümkün kılar.
Aşağıda, **önbellek zehirlenmesi ile açık yönlendirmeye yerel bir yönlendirme** kombinasyonunun sömürülmesine dair bir illüstrasyon bulunmaktadır. Amaç, `/static/include.js`'nin önbellek içeriğini saldırganın kontrolündeki JavaScript kodunu sunacak şekilde değiştirmektir:
Aşağıda, **önbellek zehirlenmesi ile açık yönlendirmeye yerel bir yönlendirme** kombinasyonunun sömürülmesine dair bir illüstrasyon bulunmaktadır. Amaç, saldırgan tarafından kontrol edilen JavaScript kodunu sunmak için `/static/include.js`'nin önbellek içeriğini değiştirmektir:
```
POST / HTTP/1.1
Host: vulnerable.net
@ -608,8 +608,8 @@ Sonrasında, `/static/include.js` için yapılan herhangi bir istek, saldırgan
> **Web önbellek zehirlenmesi ile web önbellek aldatması arasındaki fark nedir?**
>
> - **Web önbellek zehirlenmesi**'nde, saldırgan uygulamanın önbellekte bazı kötü niyetli içerikleri saklamasını sağlar ve bu içerik diğer uygulama kullanıcılarına önbellekten sunulur.
> - **Web önbellek aldatması**'nda, saldırgan uygulamanın başka bir kullanıcıya ait bazı hassas içerikleri önbellekte saklamasını sağlar ve ardından bu içeriği önbellekten geri alır.
> - **Web önbellek zehirlenmesi**'nde, saldırgan uygulamanın önbelleğe bazı kötü niyetli içerikler depolamasını sağlar ve bu içerik önbellekten diğer uygulama kullanıcılarına sunulur.
> - **Web önbellek aldatması**'nda, saldırgan uygulamanın başka bir kullanıcıya ait bazı hassas içerikleri önbelleğe almasını sağlar ve ardından bu içeriği önbellekten geri alır.
Saldırgan, hassas kullanıcıya özel içeriği alacak şekilde kaçırılmış bir istek hazırlar. Aşağıdaki örneği düşünün:
```markdown
@ -643,15 +643,15 @@ Host: vulnerable.com
XSS: <script>alert("TRACE")</script>
X-Forwarded-For: xxx.xxx.xxx.xxx
```
Bir davranışı kötüye kullanma örneği, **önce bir HEAD isteği sızdırmak** olacaktır. Bu istek, yalnızca bir GET isteğinin **başlıklarıyla** yanıtlanacaktır (**`Content-Type`** bunlar arasında). Ve **HEAD'den hemen sonra bir TRACE isteği sızdırmak**, bu da **gönderilen verileri yansıtacaktır**.\
Bir davranışı kötüye kullanma örneği, **önce bir HEAD isteği sızdırmak** olacaktır. Bu istek, yalnızca bir GET isteğinin **başlıklarıyla** yanıtlanacaktır (**`Content-Type`** bunlar arasında). Ve **HEAD'den hemen sonra bir TRACE isteği sızdırmak**, gönderilen verileri **yansıtacaktır**.\
HEAD yanıtı bir `Content-Length` başlığı içereceğinden, **TRACE isteğinin yanıtı HEAD yanıtının gövdesi olarak işlenecek, dolayısıyla yanıt içinde rastgele verileri yansıtacaktır**.\
Bu yanıt, bağlantı üzerinden bir sonraki isteğe gönderilecektir, bu nedenle bu, **örneğin rastgele JS kodu enjekte etmek için önbelleğe alınmış bir JS dosyasında kullanılabilir**.
### HTTP Yanıt Bölme ile TRACE Kötüye Kullanımı <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
[**bu gönderiyi**](https://portswigger.net/research/trace-desync-attack) takip etmeye devam etmek, TRACE yöntemini kötüye kullanmanın başka bir yolunu önermektedir. Belirtilenlere göre, bir HEAD isteği ve bir TRACE isteği sızdırarak, HEAD isteğine yanıt olarak **yansıtılan bazı verileri kontrol etmek** mümkündür. HEAD isteğinin gövdesinin uzunluğu esasen Content-Length başlığıyla belirtilir ve TRACE isteğine verilen yanıtla oluşur.
[**bu gönderiyi**](https://portswigger.net/research/trace-desync-attack) takip etmeye devam etmek, TRACE yöntemini kötüye kullanmanın başka bir yolunu önermektedir. Yorumlandığı gibi, bir HEAD isteği ve bir TRACE isteği sızdırarak, HEAD isteğine yanıt olarak **yansıtılan bazı verileri kontrol etmek** mümkündür. HEAD isteğinin gövdesinin uzunluğu esasen Content-Length başlığında belirtilmiştir ve TRACE isteğine verilen yanıtla oluşmaktadır.
Bu nedenle, yeni fikir, bu Content-Length ve TRACE yanıtındaki verileri bilerek, TRACE yanıtının Content-Length'in son baytından sonra geçerli bir HTTP yanıtı içermesini sağlamak, bir saldırganın bir sonraki yanıt için isteği tamamen kontrol etmesine olanak tanımaktır (bu, bir önbellek zehirlemesi gerçekleştirmek için kullanılabilir).
Bu nedenle, yeni fikir, bu Content-Length ve TRACE yanıtındaki verileri bilerek, TRACE yanıtının Content-Length'in son baytından sonra geçerli bir HTTP yanıtı içermesini sağlamaktır; bu, bir saldırganın bir sonraki yanıta yapılan isteği tamamen kontrol etmesine olanak tanır (bu, bir önbellek zehirlemesi gerçekleştirmek için kullanılabilir).
Örnek:
```
@ -693,23 +693,23 @@ Content-Length: 50
<script>alert(arbitrary response)</script>
```
### HTTP İstek Kaçırmayı HTTP Yanıt Senkronizasyonu ile Silahlandırma
### HTTP İstek Sızdırma ve HTTP Yanıtı Senkronizasyonunun Silahlandırılması
Bir HTTP İstek Kaçırma açığı buldunuz ve bunu nasıl istismar edeceğinizi bilmiyorsunuz. Bu diğer istismar yöntemlerini deneyin:
Bir HTTP İstek Sızdırma açığı buldunuz ve bunu nasıl istismar edeceğinizi bilmiyorsunuz. Bu diğer istismar yöntemlerini deneyin:
{{#ref}}
../http-response-smuggling-desync.md
{{#endref}}
### Diğer HTTP İstek Kaçırma Teknikleri
### Diğer HTTP İstek Sızdırma Teknikleri
- Tarayıcı HTTP İstek Kaçırma (İstemci Tarafı)
- Tarayıcı HTTP İstek Sızdırma (İstemci Tarafı)
{{#ref}}
browser-http-request-smuggling.md
{{#endref}}
- HTTP/2 Düşürmelerinde İstek Kaçırma
- HTTP/2 Düşürmelerinde İstek Sızdırma
{{#ref}}
request-smuggling-in-http-2-downgrades.md
@ -805,13 +805,13 @@ table.add(req)
## Araçlar
- HTTP Hacker (Burp BApp Store) birleştirme/çerçeveleme ve düşük seviyeli HTTP davranışını görselleştirir
- https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda Burp Repeater Özel Eylemi "Smuggling or pipelining?"
- https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda Burp Repeater Özel Eylemi "Kaçakçılık mı yoksa borulama mı?"
- [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): Bu araç, garip istek smuggling tutarsızlıklarını bulmak için yararlı olan dil bilgisi tabanlı bir HTTP Fuzzer'dır.
- [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Bu araç, garip istek kaçakçılığı tutarsızlıklarını bulmak için yararlı olan dil bilgisi tabanlı bir HTTP Fuzzer'dır.
## Referanslar
@ -824,10 +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/)
- Yanlış pozitiflere dikkat: HTTP pipelining'i istek smuggling'den nasıl ayırt edersiniz [https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling](https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling)
- Yanlış pozitiflere dikkat edin: HTTP borulamasını istek kaçakçılığından nasıl ayırt edersiniz [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/)
- Tarayıcı Destekli Desync Saldırıları [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)
- PortSwigger Academy istemci tarafı desync [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync)
- PortSwigger Akademisi istemci tarafı 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}}