hacktricks/pentesting-web/http-response-smuggling-desync.md
2024-02-10 18:14:16 +00:00

142 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HTTP Yanıtı Smuggling / Desenkronizasyon
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam vermek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
</details>
**Bu yazının tekniği, şu videodan alınmıştır: [https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s)**
## HTTP İstek Sırası Desenkronizasyonu
Öncelikle, bu teknik bir HTTP İstek Smuggling zafiyetini istismar eder, bu yüzden bunun ne olduğunu bilmelisiniz:
Bu teknik ve yaygın bir HTTP İstek smuggling arasındaki **ana fark**, **kurbanın isteğine bir önek ekleyerek saldırmak yerine, kurbanın aldığı yanıtı sızdırmak veya değiştirmek**. Bunun için, HTTP İstek smuggling'i istismar etmek için 1 istek ve yarım göndermek yerine, **proxy'lerin yanıtlarının sırasını desenkronize etmek için 2 tam istek gönderiyoruz**.
Bu, **yanıt kuyruğunu desenkronize edebileceğimiz anlamına gelir**, böylece kurbanın **meşru isteğinin yanıtı saldırgan tarafından gönderilir** veya saldırganın kontrol ettiği içeriği kurbanın yanıtına enjekte ederiz.
### HTTP Pipeline Desenkronizasyonu
HTTP/1.1, **önceki istekleri beklemeye gerek duymadan** **farklı kaynakları istemek** için izin verir. Bu nedenle, **bir proxy** varsa, proxy'nin, **arka uçtaki gönderilen isteklerin ve gelen yanıtların senkronize bir eşleşmesini koruması** gerekir.
Ancak, yanıtların kuyruğunu desenkronize etme sorunu vardır. Eğer bir saldırgan bir HTTP Yanıtı smuggling saldırısı gönderirse ve **ilk istek ve smuggling yapılan isteklere yanıtlar hemen yanıtlanırsa**, smuggling yanıtı kurbanın yanıt kuyruğuna **eklenmez, sadece bir hata olarak atılır**.
![](<../.gitbook/assets/image (635) (1) (1) (1).png>)
Bu nedenle, smuggling yapılan isteğin işlenmesi daha uzun sürmesi gerekmektedir. Bu şekilde, smuggling yapılan istek işlendiğinde, saldırganla iletişim sona ermiş olacaktır.
Eğer bu özel durumda bir **kurban bir istek göndermişse** ve **smuggling yapılan isteğe yanıt önce** gelirse, **smuggling yanıtı kurbanın yanıtına gönderilecektir**. Bu durumda saldırgan, kurban tarafından "gerçekleştirilen" isteği **kontrol edecektir**.
Dahası, eğer saldırgan bir istek yaparsa ve kurbanın isteğine **meşru yanıt**, saldırganın isteğinden **önce yanıtlanırsa**, **kurbanın yanıtı saldırana gönderilecektir**, bu da kurbanın yanıtını (örneğin **Set-Cookie** başlığını içerebilir) çalacaktır.
![](<../.gitbook/assets/image (658) (1).png>)
![](<../.gitbook/assets/image (655) (1) (1) (1).png>)
### Birden Fazla İç İçe Enjeksiyon
Yaygın bir HTTP İstek Smuggling'den **ilginç bir fark**, yaygın bir smuggling saldırısında, **hedefin isteğinin başını değiştirerek beklenmedik bir eylem gerçekleştirmektir**. Bir **HTTP Yanıtı smuggling saldırısında**, tam istekler gönderdiğiniz için **bir payload içine onlarca yanıt enjekte edebilirsiniz**, bu da onlarca kullanıcının **enjekte edilen yanıtları desenkronize edeceği** anlamına gelir.
Meşru kullanıcılara daha kolay bir şekilde onlarca saldırı dağıtabilme yeteneği dışında, bu aynı zamanda sunucuda bir **DoS** (Hizmet Reddi) oluşturmak için de kullanılabilir.
### Saldırı Düzeni
Daha önce açıklandığı gibi, bu tekniği istismar etmek için, **sunucuya ilk smuggling mesajının işlenmesi için uzun bir süre gereklidir**.
Bu zaman alıcı istek, sadece kurbanın yanıtını çalmak istiyorsanız yeterlidir. Ancak daha karmaşık bir saldırı gerçekleştirmek istiyorsanız, bu saldırı için yaygın bir yapıdır.
Öncelikle, HTTP İstek Smuggling'i istismar eden **ilk** istek, ardından **zaman alıcı istek** ve ardından yanıtları kurbanlara gönderilecek **1 veya daha fazla payload isteği**.
## HTTP Yanıt Kuyruğu Desenkronizasyonunu İstismar Etme
### Diğer kullanıcıların isteklerini yakalama <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
Bilinen HTTP İstek Smuggling payloadları gibi, kurbanın isteğini **çalabilirsiniz**, ancak önemli bir farkla: Bu durumda, **yanıtta yansıtılan içeriği göndermek** için **kalıcı depolama gerekmez**.
İlk olarak, saldırgan, sonunda yansıtılan parametreli bir **son POST isteği içeren bir payload** gönderir ve büyük bir Content-Length içerir.
![](<../.gitbook/assets/image (625).png>)
Daha sonra, **ilk istek** (mavi) **işlendi** ve **uykulu** olan işlenirken (sarı), **bir kurbandan gelen sonraki istek, yansıtılan parametrenin hemen ardından kuyruğa eklenecektir**:
![](<../.gitbook/assets/image (634) (1).png>)
Daha sonra, **kurban**, **uykulu** isteğin yanıtını **alacak** ve bu sırada **saldırgan** **başka bir istek gönderirse**, **yansıtılan içerik isteğinin yanıtı ona gönderilecektir**.
## Yanıt Desenkronizasyonu
Bu noktaya kadar, HTTP İstek Smuggling saldırılarını istismar ederek bir **istemcinin alacağı yanıtı kontrol etmeyi** ve ardından kurban için amaç
### İçerik Karışıklığı
Önceki örneği takip ederek, **yanıtı alacak olan kurbanın isteğin gövdesini kontrol edebileceğinizi** ve bir **HEAD yanıtının genellikle başlıklarında Content-Type ve Content-Length'in** bulunduğunu bilerek, XSS saldırısına neden olmadan kurbanda XSS olmayan bir sayfada XSS oluşturmak için aşağıdaki gibi bir istek gönderebilirsiniz:
![](<../.gitbook/assets/image (654) (1) (1) (1) (1).png>)
### Önbellek Zehirlenmesi
Önceden belirtilen yanıt desenkronizasyonu İçerik Karışıklığı saldırısını kötüye kullanarak, **önbellek, kurban tarafından gerçekleştirilen isteğin yanıtını saklarsa ve bu yanıt XSS'e neden olan bir enjekte edilmiş yanıt ise, önbellek zehirlenir**.
XSS yükünü içeren kötü niyetli istek:
![](<../.gitbook/assets/image (644) (1).png>)
Önbelleğe yanıtın saklanmasını belirten başlığı içeren kurbanı hedefleyen kötü niyetli yanıt:
![](<../.gitbook/assets/image (629) (1).png>)
{% hint style="warning" %}
Bu durumda **"kurban" saldırgan ise**, artık **kötü niyetli yanıtla önbelleğe zehirleme yapabilir**, çünkü **kötü niyetli yanıtla önbelleğe alınacak URL'yi kontrol edebilir**.
{% endhint %}
### Web Önbellek Yanıltması
Bu saldırı, öncekiyle benzerdir, ancak **önbelleğe bir yük enjekte etmek yerine, saldırgan kurban bilgisini önbelleğe alır**:
![](<../.gitbook/assets/image (643) (1) (1).png>)
### Yanıt Bölünmesi
Bu saldırının amacı, tekrar **yanıt desenkronizasyonunu kötüye kullanarak proxy'nin %100 saldırgan tarafından oluşturulan bir yanıt göndermesini sağlamaktır**.
Bunu başarmak için saldırganın, yanıtın içinde bazı değerleri yansıtan web uygulamasının bir uç noktasını bulması ve HEAD yanıtının içerik uzunluğunu bilmesi gerekmektedir.
Aşağıdaki gibi bir **saldırı** gönderecektir:
![](<../.gitbook/assets/image (649) (1) (1) (1).png>)
İlk istek çözüldükten ve saldırgana geri gönderildikten sonra, **kurbanın isteği sıraya eklenir**:
![](<../.gitbook/assets/image (661) (1) (1) (1).png>)
Kurban, yanıt olarak **HEAD yanıtını + ikinci isteğin yanıtının içeriğini (yansıtılan verinin bir kısmını içeren)** alacaktır:
![](<../.gitbook/assets/image (633) (1).png>)
Ancak, **yansıtılan verinin HEAD yanıtının Content-Length'ine göre bir boyuta sahip olduğuna** dikkat edin, bu da **yanıt sırasında geçerli bir HTTP yanıtı oluşturdu**.
Bu nedenle, **ikinci kurbanın bir sonraki isteği**, **saldırgan tarafından tamamen oluşturulan bir yanıtı alacaktır**. Yanıt tamamen saldırgan tarafından oluşturulduğu için **proxy'nin yanıtı önbelleğe almasını da sağlayabilir**.
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> öğrenin!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **tanıtmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live).
* Hacking hilelerinizi göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek **hacking hilelerinizi paylaşın**.
</details>