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

137 lines
9.6 KiB
Markdown
Raw Normal View History

# HTTP Yanıt Kaçırma / Desenkronizasyon
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS hackleme konusunu 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> ile!</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
* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek.
2022-04-28 16:01:33 +00:00
</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)
2024-02-06 03:10:38 +00:00
## HTTP İstek Kuyruğu Desenkronizasyonu
2024-02-06 03:10:38 +00:00
Bu tekniğin **bir HTTP İstek Kaçırma açığından yararlandığını** unutmayın, bu yüzden bunun ne olduğunu bilmelisiniz:
2021-11-05 20:59:42 +00:00
Bu tekniğin bir standart HTTP İstek kaçırma saldırısından farkı, **kurbanın isteğine bir önek ekleyerek saldırmak yerine**, **kurbanın aldığı yanıtı sızdırmak veya değiştirmek** olacaktır. Bu, HTTP İstek kaçırma saldırısını kötüye kullanmak için 1 istek ve yarım göndermek yerine, **proxy yanıtlarını desenkronize etmek için 2 tam istek göndermek** anlamına gelir.
2021-11-05 20:59:42 +00:00
Bu, **yanıt kuyruğunu desenkronize edebileceğimiz için**, **kurbanın meşru isteğinden gelen yanıtın saldırgan tarafından gönderilmesine** veya **kurbanın yanıtına saldırgan tarafından kontrol edilen içerik enjekte edilmesine** olanak tanır.
2021-11-05 20:59:42 +00:00
### HTTP Boru Hattı Desenkronizasyonu
2021-11-05 20:59:42 +00:00
HTTP/1.1, **önceki istekleri beklemeye gerek olmadan farklı kaynaklar istemeyi** sağlar. Bu nedenle, bir **proxy** varsa, **arka uca gönderilen isteklerin ve oradan gelen yanıtların senkronize eşleşmesini sağlamak** proxy'nin görevidir.
2021-11-05 20:59:42 +00:00
Ancak, yanıtların kuyruğunu desenkronize etme sorunu vardır. Bir saldırgan bir HTTP Yanıt kaçırma saldırısı gönderirse ve **ilk istek ve kaçırılan yanıtlar hemen yanıtlanırsa**, kaçırılan yanıt, kurbanın yanıt kuyruğuna **eklenmeyecek, sadece bir hata olarak atılacaktır**.
2021-11-05 20:59:42 +00:00
Bu nedenle, **kaçırılan isteğin işlenmesi için daha fazla zaman alması gerekmektedir**. Bu nedenle, kaçırılan istek işlendiğinde, saldırganla iletişim kurulmuş olacaktır.
2021-11-05 20:59:42 +00:00
Eğer bu belirli durumda bir **kurban bir istek göndermişse** ve **kaçırılan istek önce yanıtlanırsa**, **kaçırılan yanıt kurbanın alacağı** şekilde gönderilecektir. Bu nedenle, saldırgan, kurban tarafından "gerçekleştirilen" isteği **kontrol edecektir**.
2021-11-05 20:59:42 +00:00
Dahası, **saldırgan daha sonra bir istek yaparsa** ve **kurbanın meşru yanıtı**, **saldırganın isteğinden önce yanıtlanırsa**, **kurbanın yanıtı saldırgana gönderilecektir**, kurbanın yanıtını (örneğin **Set-Cookie** başlığını içerebilir) **çalacaktır**.
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
Ortak **HTTP İstek Kaçırma** saldırısından farklı olarak, bir ortak kaçırma saldırısında, **hedefin isteğinin başlangıcını değiştirmenin** amaçlandığıdır. **HTTP Yanıt kaçırma saldırısında**, tam istekler gönderdiğinizden, bir yükte onlarca yanıtı **enjekte edebilirsiniz** ve bu, **enjekte edilen yanıtları alan onlarca kullanıcıyı desenkronize edecektir**.
2021-11-05 20:59:42 +00:00
Meşru kullanıcılara daha kolay bir şekilde onlarca saldırıyı **dağıtabilme** yeteneğinin yanı sıra, bu, sunucuda bir **Hizmet Dışı Bırakma**'ya neden olmak için de kullanılabilir.
2021-11-05 20:59:42 +00:00
### Saldırı Organizasyonu
2021-11-05 20:59:42 +00:00
Bu tekniği kötüye kullanmak için, **sunucuya ilk kaçırılan mesajın işlenmesinin uzun zaman alması gerekmektedir**.
2021-11-05 20:59:42 +00:00
Bu **zaman alıcı istek, kurbanın yanıtını çalmayı denemek** istiyorsanız yeterlidir. Ancak daha karmaşık bir saldırı gerçekleştirmek istiyorsanız, bu saldırı için yaygın bir yapı olacaktır.
2021-11-05 20:59:42 +00:00
Öncelikle, **HTTP İstek Kaçırma**'yı kötüye kullanarak **ilk** istek, ardından **zaman alan istek** ve ardından **kurbanlara gönderilecek yanıtların** gönderileceği **1 veya daha fazla yük isteği**.
2021-11-05 20:59:42 +00:00
## HTTP Yanıt Kuyruğu Desenkronizasyonunu Kötüye Kullanma
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
Bilinen HTTP İstek Kaçırma payloadları gibi, bu durumda **kurbanın isteğini çalabilirsiniz** ancak önemli bir farkla: Bu durumda, **yanıtta yansıtılacak içeriğe ihtiyacınız vardır**, **kalıcı depolama gerekmez**.
2021-11-05 20:59:42 +00:00
Öncelikle, saldırgan, sonunda yansıtılan parametreye sahip bir **son POST isteği içeren bir yük** ve büyük bir Content-Length içeren bir yük gönderir.
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1053).png>)
2021-11-05 20:59:42 +00:00
Sonra, **ilk istek** (mavi) **işlendikten sonra** ve **uyuyan** istek işlenirken (sarı) **kurban tarafından gelen bir sonraki istek**, **yansıtılan parametrenin hemen ardından kuyruğa eklenecektir**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (794).png>)
2021-11-05 20:59:42 +00:00
Sonra, **kurban**, **uyuyan** isteğin yanıtını alacak ve bu arada **saldırgan başka bir istek gönderirse**, **yansıtılan içerik isteğinden gelen 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
Bu noktaya kadar, HTTP İstek Kaçırma saldırılarını kötüye kullanarak bir **istemcinin alacağı yanıtı kontrol etmeyi** ve ardından **kurban için amaçlanan yanıtı çalmayı** öğrendik.
2021-11-05 20:59:42 +00:00
Ancak yanıtları **daha da fazla desenkronize etmek mümkündür**.
2021-11-05 20:59:42 +00:00
**HEAD** isteği gibi ilginç istekler vardır ki, bu isteklerin **yanıt gövdesinde hiçbir içerik olmaması gerektiği** belirtilmiştir ve (zorunlu olarak) **GET isteği gibi Content-Length** içermesi gerekmektedir.
2021-11-05 20:59:42 +00:00
Bu nedenle, bir saldırgan, bu görüntülerde olduğu gibi bir **HEAD** isteği enjekte ederse:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1107).png>)
2021-11-05 20:59:42 +00:00
Sonra, **mavi olan saldırgana yanıtlandıktan sonra**, bir sonraki kurbanın isteği kuyruğa eklenecektir:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (999).png>)
2021-11-05 20:59:42 +00:00
Sonra, **kurban**, **HEAD** isteğinden gelen yanıtı alacak, bu yanıt **hiçbir içerik içermesine rağmen Content-Length içerecektir**. Bu nedenle, proxy, bu yanıtı kurbanın yanıtına göndermeyecek, ancak bir **içerik bekleyecek**, bu içerik aslında **saldırgan tarafından da enjekte edilen sarı isteğin yanıtı olacaktır**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (735).png>)
### İçerik Karışıklığı
2021-11-05 20:59:42 +00:00
Önceki örneği takip ederek, **yanıtı alacak kurbanın vücudunu 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'ye neden olmak için aşağıdaki gibi bir istek gönderebilirsiniz:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (688).png>)
2021-11-05 20:59:42 +00:00
### Önbellek Zehirlenmesi
2021-11-05 20:59:42 +00:00
Önceki yorumlanmış yanıt desenkronizasyonu İçerik Karışıklığı saldırısını istismar ederek, **önbelleğin, kurban tarafından gerçekleştirilen isteğin yanıtını sakladığını ve bu yanıtın XSS'e neden olan bir enjekte edilmiş yanıt olduğunu** varsayarsak, önbellek zehirlenir.
2021-11-05 20:59:42 +00:00
XSS yükü içeren kötü niyetli istek:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (614).png>)
2021-11-05 20:59:42 +00:00
Önbelleğe yanıtı saklaması için başlığı içeren kurbanı hedefleyen kötü niyetli yanıt:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (566).png>)
2021-11-05 20:59:42 +00:00
{% hint style="warning" %}
Bu durumda **"kurban" saldırgan ise** artık **rastgele URL'lerde önbellek zehirlenmesi yapabilir** çünkü kötü niyetli yanıtla **önbelleğe alınacak URL'yi kontrol edebilir**.
{% endhint %}
2021-11-05 20:59:42 +00:00
### Web Önbellek Aldatmacası
2021-11-05 20:59:42 +00:00
Bu saldırı öncekine benzer, ancak **önbelleğe bir yük enjekte etmek yerine, saldırgan kurban bilgilerini önbelleğe alacak:**
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (991).png>)
2021-11-05 20:59:42 +00:00
### Yanıt Bölünmesi
2021-11-05 20:59:42 +00:00
Bu saldırının **amacı**, **yanıt desenkronizasyonunu** tekrar 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
Bunu başarmak için, saldırganın, **yanıtın içinde bazı değerleri yansıtan bir web uygulamasının bir uç noktasını bulması** ve **HEAD yanıtının içeriğinin uzunluğunu bilmesi** gerekir.
2021-11-05 20:59:42 +00:00
Şu şekilde bir **saldırı** gönderecektir:
2022-04-28 16:01:33 +00:00
![](<../.gitbook/assets/image (911).png>)
2022-04-28 16:01:33 +00:00
İlk istek çözüldükten ve saldırgana geri gönderildikten sonra, **kurbanın isteği sıraya eklenir**:
2022-04-28 16:01:33 +00:00
![](<../.gitbook/assets/image (737).png>)
2023-12-31 01:25:17 +00:00
Kurban, yanıt olarak **HEAD yanıtını + ikinci isteğin yanıtının içeriğini (yansıtılan verilerin bir kısmını içeren)** alacaktır:
2022-04-28 16:01:33 +00:00
![](<../.gitbook/assets/image (356).png>)
Ancak, **yansıtılan verilerin, 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 sonraki isteği**, **tamamen saldırgan tarafından oluşturulan bir yanıt alacak**. Yanıt tamamen saldırgan tarafından oluşturulduğundan, aynı zamanda **proxy'nin yanıtı önbelleğe almasını sağlayabilir**.