hacktricks/pentesting-web/http-response-smuggling-desync.md
2024-02-10 18:14:16 +00:00

9.8 KiB
Raw Blame History

HTTP Yanıtı Smuggling / Desenkronizasyon

AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Bu yazının tekniği, şu videodan alınmıştır: 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.

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.

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

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.

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:

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:

Ö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:

Önbelleğe yanıtın saklanmasını belirten başlığı içeren kurbanı hedefleyen kötü niyetli yanıt:

{% 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:

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:

İlk istek çözüldükten ve saldırgana geri gönderildikten sonra, kurbanın isteği sıraya eklenir:

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:

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.

AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Red Team Expert) öğrenin!

HackTricks'i desteklemenin diğer yolları: