HTTP Parameter Pollution Kullanarak WAF Atlatma

BGA Security Wiki sitesinden
Burcu (Mesaj | katkılar) tarafından oluşturulmuş 00:58, 11 Eylül 2017 tarihli sürüm
(fark) ← Önceki hâli | En güncel hâli (fark) | Sonraki hâli → (fark)
Şuraya atla: kullan, ara

Amaç:

Hedef web uygulamasında tespit edilen ya da bulunduğu varsayılan bir zafiyetin istismar edilmesini engelleyen WAF(Web Application Firewall) cihazını, HPP(HTTP parameter pollution) zafiyetini kullanarak atlatmak ve zafiyeti istismar edebilmek.

Lab Senaryosu:

HTTP parameter pollution açıklığı ile WAF tarafından korunan sistemin atlatılması.

Araçlar:

  • Iceweasel 18
  • PHP veya ASP.NET destekleyen bir web sunucusu


Adımlar:

  • İlk olarak, istismar edilmek istenilen zafiyetin payloadının, WAF tarafından engellendiğinin tespit edilmesi gerekmektedir. Örnek olarak “ index.php?pageID=15’ “ şeklinde çağrıldığında sql hatası döndüren bir web uygulaması “index.php?pageID=15 union select user() --” istismar koduna özel bir hata mesajı döndürür veya hiç tepki vermezse, arada yüksek ihtimalle WAF görevi gören bir sistem bulunuyor denilebilir.
  • Sunucu tarafındaki web teknolojisinin, HTTP parametrelerini yorumlama şekline göre, istismar kodunun payload bölümünü yeniden şekillendirerek WAF atlatılmaya çalışılır. Bu aşamada aşağıdaki tablo faydalı olabilir.

Pollution.jpg

tabloda da görüldüğü üzere, PHP sunucuları HTTP parametrelerini yorumlarken, aynı isimli parametreler varsa, sadece sonuncuyu değerlendirmeye almaktadır. Hedef sistemdeki WAF’ın aynı isimli parametrelerden ilkini değerlendirmeye aldığı bir durumda yeni istismar kodumuz şu şekilde olacaktır: “ index.php?pageID=15&pageID=15 union select user()-- “.

Benzer şekilde bir ASP.NET uygulaması için “list.aspx?id=10’ union select null,null,user,pass from users--” şeklindeki bir sqli istismarını “list.aspx?id=10’ union select null&id=null&id=user&id=pass from users--” olarak değiştirerek WAF’ı atlatmak mümkün olabilir. Çünkü tabloda da görüldüğü üzere, asp.net ikinci URL’deki aynı isimli parametreleri “,” (virgül) ile birleştirerek geçerli bir sql sorgusu oluşmasını sağlayacaktır.