mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 06:00:40 +00:00
159 lines
11 KiB
Markdown
159 lines
11 KiB
Markdown
# HTTP Yanıt Kaçırma / Desenkronizasyon
|
||
|
||
{% 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 %}
|
||
|
||
**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)
|
||
|
||
## HTTP İstek Kuyruğu Desenkronizasyonu
|
||
|
||
Ö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.
|
||
|
||
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.
|
||
|
||
### HTTP Pipeline Desenkronizasyonu
|
||
|
||
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**.
|
||
|
||
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**.
|
||
|
||
![](<../.gitbook/assets/image (633).png>)
|
||
|
||
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.
|
||
|
||
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**.
|
||
|
||
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).
|
||
|
||
![](<../.gitbook/assets/image (1020).png>)
|
||
|
||
![](<../.gitbook/assets/image (719).png>)
|
||
|
||
### Çoklu İç İçe Enjeksiyonlar
|
||
|
||
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**.
|
||
|
||
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.
|
||
|
||
### İstismar Organizasyonu
|
||
|
||
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.
|
||
|
||
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
|
||
|
||
### Diğer kullanıcıların isteklerini yakalama <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
|
||
|
||
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.
|
||
|
||
Ö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.
|
||
|
||
![](<../.gitbook/assets/image (1053).png>)
|
||
|
||
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**:
|
||
|
||
![](<../.gitbook/assets/image (794).png>)
|
||
|
||
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**.
|
||
|
||
## Yanıt Desenkronizasyonu
|
||
|
||
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**.
|
||
|
||
Ancak, yanıtları **daha da desenkronize etmek** mümkündür.
|
||
|
||
**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.
|
||
|
||
Bu nedenle, eğer bir saldırgan **HEAD** isteği enjekte ederse, bu görüntülerdeki gibi:
|
||
|
||
![](<../.gitbook/assets/image (1107).png>)
|
||
|
||
O zaman, **mavi yanıt saldırgana verildiğinde**, bir sonraki kurban isteği kuyruğa eklenecektir:
|
||
|
||
![](<../.gitbook/assets/image (999).png>)
|
||
|
||
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**:
|
||
|
||
![](<../.gitbook/assets/image (735).png>)
|
||
|
||
### İçerik Karışıklığı
|
||
|
||
Ö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:
|
||
|
||
![](<../.gitbook/assets/image (688).png>)
|
||
|
||
### Önbellek Zehirleme
|
||
|
||
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**.
|
||
|
||
XSS yükünü içeren kötü niyetli istek:
|
||
|
||
![](<../.gitbook/assets/image (614).png>)
|
||
|
||
Kurbana, yanıtı önbelleğe alması için başlık içeren kötü niyetli yanıt:
|
||
|
||
![](<../.gitbook/assets/image (566).png>)
|
||
|
||
{% 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 %}
|
||
|
||
### Web Önbellek Aldatmacası
|
||
|
||
Bu saldırı, öncekiyle benzer, ancak **yükü önbelleğe enjekte etmek yerine, saldırgan kurban bilgilerini önbelleğe alacaktır**:
|
||
|
||
![](<../.gitbook/assets/image (991).png>)
|
||
|
||
### Yanıt Bölme
|
||
|
||
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.
|
||
|
||
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**.
|
||
|
||
Bir **istismar** gönderecektir:
|
||
|
||
![](<../.gitbook/assets/image (911).png>)
|
||
|
||
İlk istek çözüldükten ve saldırgana geri gönderildikten sonra, **kurbanın isteği kuyruğa eklenir**:
|
||
|
||
![](<../.gitbook/assets/image (737).png>)
|
||
|
||
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:
|
||
|
||
![](<../.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 %}
|