hacktricks/pentesting-web/http-response-smuggling-desync.md

143 lines
9.8 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# HTTP Yanıtı Smuggling / Desenkronizasyon
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2023-12-31 01:25:17 +00:00
2024-02-10 18:14:16 +00:00
* **Ş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**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
**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)**
2024-02-06 03:10:38 +00:00
2024-02-10 18:14:16 +00:00
## HTTP İstek Sırası Desenkronizasyonu
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Öncelikle, bu teknik bir HTTP İstek Smuggling zafiyetini istismar eder, bu yüzden bunun ne olduğunu bilmelisiniz:
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### HTTP Pipeline Desenkronizasyonu
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2022-03-09 12:12:51 +00:00
![](<../.gitbook/assets/image (635) (1) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2022-03-09 12:12:51 +00:00
![](<../.gitbook/assets/image (658) (1).png>)
2021-11-05 20:59:42 +00:00
2022-04-22 08:32:18 +00:00
![](<../.gitbook/assets/image (655) (1) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### Birden Fazla İç İçe Enjeksiyon
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### Saldırı Düzeni
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Ö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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
## HTTP Yanıt Kuyruğu Desenkronizasyonunu İstismar Etme
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### Diğer kullanıcıların isteklerini yakalama <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
İ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.
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (625).png>)
2024-02-10 18:14:16 +00:00
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**:
2021-11-05 20:59:42 +00:00
2022-03-09 12:12:51 +00:00
![](<../.gitbook/assets/image (634) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
## Yanıt Desenkronizasyonu
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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ığı
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Ö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:
2021-11-05 20:59:42 +00:00
2022-03-21 17:37:28 +00:00
![](<../.gitbook/assets/image (654) (1) (1) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### Önbellek Zehirlenmesi
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Ö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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
XSS yükünü içeren kötü niyetli istek:
2021-11-05 20:59:42 +00:00
2022-03-09 12:12:51 +00:00
![](<../.gitbook/assets/image (644) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Önbelleğe yanıtın saklanmasını belirten başlığı içeren kurbanı hedefleyen kötü niyetli yanıt:
2021-11-05 20:59:42 +00:00
2022-02-02 15:35:20 +00:00
![](<../.gitbook/assets/image (629) (1).png>)
2021-11-05 20:59:42 +00:00
{% hint style="warning" %}
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
### Web Önbellek Yanıltması
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Bu saldırı, öncekiyle benzerdir, ancak **önbelleğe bir yük enjekte etmek yerine, saldırgan kurban bilgisini önbelleğe alır**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (643) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
### Yanıt Bölünmesi
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
Aşağıdaki gibi bir **saldırı** gönderecektir:
2021-11-05 20:59:42 +00:00
2022-04-25 12:04:04 +00:00
![](<../.gitbook/assets/image (649) (1) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
İlk istek çözüldükten ve saldırgana geri gönderildikten sonra, **kurbanın isteği sıraya eklenir**:
2021-11-05 20:59:42 +00:00
2022-04-05 22:13:36 +00:00
![](<../.gitbook/assets/image (661) (1) (1) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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:
2021-11-05 20:59:42 +00:00
2022-02-19 19:42:58 +00:00
![](<../.gitbook/assets/image (633) (1).png>)
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2024-02-10 18:14:16 +00:00
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**.
2021-11-05 20:59:42 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2023-12-31 01:25:17 +00:00
2024-02-10 18:14:16 +00:00
* Ş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**.
2022-04-28 16:01:33 +00:00
</details>