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

160 lines
11 KiB
Markdown
Raw Normal View History

# HTTP Yanıt Kaçırma / Desenkronizasyon
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2023-12-31 01:25:17 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
**Bu gönderinin tekniği 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
Öncelikle, bu teknik **bir HTTP İstek Kaçırma açığını istismar eder**, bu yüzden bunun ne olduğunu bilmelisiniz:
Bu tekniğin **ana** **farkı**, yaygın bir HTTP İstek kaçırmadan, **kurbanın isteğine bir ön ek ekleyerek saldırmak yerine**, **kurbanın aldığı yanıtı sızdırmak veya değiştirmek** için kullanmamızdır. Bu, HTTP İstek kaçırmayı istismar etmek için 1,5 istek göndermek yerine, **proxy yanıt kuyruklarını desenkronize etmek için 2 tam istek göndermemizle** yapılır.
2021-11-05 20:59:42 +00:00
Bunun nedeni, **yanıt kuyruğunu desenkronize edebilmemizdir**, böylece **kurbanın meşru isteğinden gelen yanıtın saldırgana gönderilmesi** veya **kurbanın yanıtına saldırganın kontrolündeki içeriğin enjekte edilmesi**dir.
2021-11-05 20:59:42 +00:00
### HTTP Pipeline Desenkronizasyonu
2021-11-05 20:59:42 +00:00
HTTP/1.1, **önceki isteklere beklemeden farklı kaynaklar istemeye** olanak tanır. Bu nedenle, eğer bir **proxy** varsa, proxy'nin görevi, **arka uca gönderilen isteklerin ve ondan gelen yanıtların senkronize bir eşleşmesini korumaktır**.
2021-11-05 20:59:42 +00:00
Ancak, yanıt kuyruklarını desenkronize etme konusunda bir sorun vardır. Eğer bir saldırgan bir HTTP Yanıt kaçırma saldırısı gönderirse ve **ilk isteğe ve kaçırılan isteğe yanıtlar hemen verilirse**, kaçırılan yanıt, kurban yanıtının kuyruğuna eklenmeyecek, **bir hata olarak atılacaktır**.
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (633).png>)
2021-11-05 20:59:42 +00:00
Bu nedenle, **kaçırılan isteğin** arka uç sunucusunda işlenmesi için daha fazla zamana ihtiyacı vardır. Böylece, kaçırılan istek işlenene kadar, saldırganla iletişim sona erecektir.
2021-11-05 20:59:42 +00:00
Eğer bu özel durumda bir **kurban bir istek göndermişse** ve **kaçırılan istek meşru isteğinden önce yanıtlanırsa**, **kaçırılan yanıt kurbana gönderilecektir**. Böylece, saldırgan **kurban tarafından "gerçekleştirilen" isteği kontrol edecektir**.
2021-11-05 20:59:42 +00:00
Ayrıca, eğer **saldırgan bir istek gerçekleştirirse** ve **kurbanın isteğine verilen 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ı çalarak** (örneğin, **Set-Cookie** başlığını içerebilir).
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1020).png>)
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (719).png>)
2021-11-05 20:59:42 +00:00
### Çoklu İç İçe Enjeksiyonlar
2021-11-05 20:59:42 +00:00
Yaygın **HTTP İstek Kaçırma** ile bir diğer **ilginç fark**, yaygın bir kaçırma saldırısında **hedefin kurbanın isteğinin başlangıcını değiştirmek** olmasıdır, böylece beklenmedik bir eylem gerçekleştirilir. **HTTP Yanıt kaçırma saldırısında**, tam istekler gönderdiğiniz için, **bir yük içinde onlarca yanıt enjekte edebilir** ve bu da **onlarca kullanıcının** **enjekte edilen yanıtları almasına neden olacaktır**.
2021-11-05 20:59:42 +00:00
Ayrıca, **meşru kullanıcılar arasında daha kolay onca istismar dağıtma** imkanı sağlamanın yanı sıra, bu aynı zamanda sunucuda bir **DoS** oluşturmak için de kullanılabilir.
2021-11-05 20:59:42 +00:00
### İstismar Organizasyonu
2021-11-05 20:59:42 +00:00
Daha önce açıklandığı gibi, bu tekniği istismar etmek için, **sunucuya gönderilen ilk kaçırılan mesajın** **işlenmesi için çok zaman alması** gerekmektedir.
2021-11-05 20:59:42 +00:00
Bu **zaman alan istek**, sadece **kurbanın yanıtını çalmaya çalışmak** istiyorsak yeterlidir. Ancak daha karmaşık bir istismar gerçekleştirmek istiyorsanız, bu istismar için yaygın bir yapı olacaktır.
Öncelikle **HTTP İstek Kaçırma** istismarını kullanarak **ilk** isteği, ardından **zaman alan isteği** ve sonra **kurbanlara gönderilecek 1 veya daha fazla yük isteği**.
## 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
HTTP İstek Kaçırma ile bilinen yükler gibi, **kurbanın isteğini çalabilirsiniz** ama bir önemli farkla: Bu durumda, **yanıtın içinde yansıtılan içeriği göndermeniz yeterlidir**, **kalıcı depolama** gerekmez.
2021-11-05 20:59:42 +00:00
Öncelikle, saldırgan, **yansıtılan parametre ile son bir POST isteği içeren** bir yük gönderir ve büyük bir Content-Length ayarlar.
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1053).png>)
2021-11-05 20:59:42 +00:00
Ardından, **ilk istek** (mavi) **işlendiğinde** ve **uyku halindeki** istek işlenirken (sarı), **bir kurbandan 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
Sonrasında, **kurban**, **uyku halindeki** isteğin yanıtını **alacak** ve eğer 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ı nasıl istismar edeceğimizi öğrendik, böylece **bir istemcinin alacağı yanıtı kontrol edebiliriz** ve ardından **kurban için tasarlanmış yanıtı çalabiliriz**.
2021-11-05 20:59:42 +00:00
Ancak, yanıtları **daha da desenkronize etmek** mümkündür.
2021-11-05 20:59:42 +00:00
**Yanıt gövdesinde** **hiçbir içerik olmaması gereken** ve **GET isteğiymiş gibi** **Content-Length** içermesi gereken **HEAD** istekleri gibi ilginç istekler vardır.
2021-11-05 20:59:42 +00:00
Bu nedenle, eğer bir saldırgan **HEAD** isteği enjekte ederse, bu görüntülerdeki gibi:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (1107).png>)
2021-11-05 20:59:42 +00:00
O zaman, **mavi yanıt saldırgana verildiğinde**, bir sonraki kurban 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
Sonrasında, **kurban**, **HEAD** isteğinden gelen **yanıtı alacak**, bu yanıt **bir Content-Length içerecek ama hiç içerik olmayacaktır**. Bu nedenle, proxy **bu yanıtı kurbana göndermeyecek**, ancak bazı **içerikler** bekleyecektir, bu da aslında **saldırgan tarafından 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, **kurbanın alacağı yanıtın gövdesini kontrol edebildiğinizi** ve **HEAD** **yanıtının genellikle başlıklarında **Content-Type ve Content-Length** içerdiğini bilerek, **kurbanın XSS** oluşturmasına neden olacak 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 Zehirleme
2021-11-05 20:59:42 +00:00
Daha önce bahsedilen yanıt desenkronizasyonu İçerik Karışıklığı saldırısını istismar ederek, **eğer önbellek, kurban tarafından gerçekleştirilen isteğe verilen yanıtı depoluyorsa ve bu yanıt, bir XSS oluşturan enjekte edilmiş bir yanıt ise, o zaman önbellek zehirlenmiştir**.
2021-11-05 20:59:42 +00:00
XSS yükünü 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
Kurbana, yanıtı önbelleğe alması için başlık içeren 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, eğer **"kurban" saldırgansa**, artık **keyfi URL'lerde önbellek zehirlemesi** gerçekleştirebilir, çü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ı, öncekiyle benzer, ancak **yükü önbelleğe enjekte etmek yerine, saldırgan kurban bilgilerini önbelleğe alacaktır**:
2021-11-05 20:59:42 +00:00
![](<../.gitbook/assets/image (991).png>)
2021-11-05 20:59:42 +00:00
### Yanıt Bölme
2021-11-05 20:59:42 +00:00
Bu saldırının **hedefi**, **yanıt** **desenkronizasyonunu** tekrar istismar ederek **proxy'nin %100 saldırgan tarafından üretilen bir yanıt göndermesini sağlamak**tır.
2021-11-05 20:59:42 +00:00
Bunu başarmak için, saldırgan, **yanıt içinde bazı değerleri yansıtan** bir web uygulaması uç noktası bulmalı ve **HEAD yanıtının içerik uzunluğunu bilmelidir**.
2021-11-05 20:59:42 +00:00
Bir **istismar** 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 kuyruğa 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ı + 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, yanıt kuyruğunda geçerli bir HTTP yanıtı üreten HEAD yanıtının Content-Length'ine göre bir boyuta sahip olduğunu** unutmayın.
Bu nedenle, **ikinci kurbanın bir sonraki isteği**, **saldırgan tarafından tamamen oluşturulmuş bir yanıt alacaktır**. Yanıt tamamen saldırgan tarafından oluşturulduğundan, **proxy'nin yanıtı önbelleğe almasını da sağlayabilir**.
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}