mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-17 06:28:27 +00:00
142 lines
9.8 KiB
Markdown
142 lines
9.8 KiB
Markdown
# 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>
|