403 kısıtlamalarını atlamak için IP’leri X-Forwarded-Headers’da numaralandırma


16 Temmuz 2015 · websec güvenlik aracı

Son zamanlarda, istemci IP adreslerine dayalı dizinlere yetkisiz erişimi önlemek için bir tür mekanizma kullanan giderek daha fazla uygulamaya sızma testi yapıyorum. Çoğu durumda, yanlış uygulandığında bunun zayıf bir koruma yöntemi olduğu kanıtlanmıştır.

Web uygulaması sunucularına IP adreslerinin sahteciliğinin, başka herhangi bir kimlik doğrulama biçimi olmadan tam yönetim erişimine izin verdiği durumlar olmuştur.

Örneğin StackOverflow’a ne olduğuna bir göz atın: http://blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html

WordPress yönetim panellerini korumada yaygın olarak kullanıldığını gördüğüm bu tür uygulamalardan biri, Apache sunucularındaki HTAccess dosyalarındaki IP adreslerini beyaz listeye almaktır. Örneğin aşağıdakileri ele alalım .htaccess içinde bulunan dosya /wp-admin/ dizin:

#Hosting Environment IPs
SetEnvIF X-FORWARDED-FOR "68.180.194.242" AllowIP
SetEnvIF X-FORWARDED-FOR "10.0.2.11" AllowIP

#Personal Computer
SetEnvIF X-FORWARDED-FOR "98.139.134.96" AllowIP

Şimdi, web sunucunuzun yapılandırmasına bağlı olarak yukarıdaki yapılandırma tamamen işe yaramaz olabilir. Neden? Yoldan dolayı X-Forwarded-For başlıklar işlenir.

İsteğiniz ile içeriği barındıran gerçek web sunucusu arasında bulunabilecek proxy’ler nedeniyle, X-Forwarded-For Bağlantı kurulacak son ana bilgisayara iletilen başlık genellikle sıralı bir IP adresleri listesi içerir. Bu blog yazısında açıklandığı gibi, X-Forwarded-For başlık şuna benzer:

X-Forwarded-For: A, B, C

A’nın müşterinin IP adresini temsil edeceği yerde, B bir ara proxy’yi temsil edecek ve C başka bir ara proxy’yi temsil edecektir.

Not: Sunucu ile istek arasındaki proxy sayısında herhangi bir sınırlama yoktur; X-Forwarded-For virgülle ayrılmış biçimde sınırsız bir IP listesine sahip olabilir.

Yukarıda bağlantılı blog yazısında belirtildiği gibi: en soldaki IP adresi taklit edilmesi en kolay olanıdır. Uygulama sunucusunun en güvenilir IP adresini belirlemesi için vekil zincirini tersten geç. Her çerçeve veya uygulama bunu yapmaz ve deneyimlerden yola çıkarak IP adreslerini taklit edebilme şansı X-Forwarded-For başlık yüksek.

Aslında, IP adreslerinin aynı olduğu ancak virgülle ayrılmış olduğu geniş bir IP listesi ekleyerek X-Forwarded-For başlık, yönetim panellerindeki IP kısıtlamalarını atlarken benim için daha iyi sonuçlar verdi.

Bu blog yazısında daha önce bahsettiğim HTAccess dosyasına dönersek, bu GET isteği aracılığıyla IP kısıtlamalarının atlanmasına izin veren basit bir geçiş gösterilmiştir:

GET /wp-admin/ HTTP/1.1
Host: vulnsite.com
X-Forwarded-For: 68.180.194.242, 68.180.194.242, 68.180.194.242, 68.180.194.242
Cookie: ilikecookies=yes

Bu başlığın eklenmesiyle wp-admin dizinine tam erişim sağlandı.

Ancak bu beni başka bir sorunla karşı karşıya getirdi. Bu bir beyaz kutu testi olmasaydı muhtemelen erişim sağlamaya çalışmazdım. /wp-admin/ içeren dizin X-Forwarded-For başlık böyle belirli bir IP adresine ayarlanmış.

403 yasaklı kaynağa erişimi IP adreslerini numaralandırarak numaralandıran böyle bir araç bulunmadığından X-Forwarded-For Bunu yazarken başlık oluşturdum.

Bu aracı burada bulabilirsiniz: http://github.com/infosec-au/enumXFF

Tek yapmanız gereken, aşağıdaki girişi vererek aracı terminalden çalıştırmaktır:

  • Denenecek sayfa (http/https://website.com/page)
  • Reddedildiğinde aldığınız yanıtın içerik uzunluğu
  • Aracın denemesini istediğiniz IP aralığı X-Forwarded-For

Araç daha sonra verilen sayfayı bir dizi IP adresiyle isteyecek ve ardından söz konusu sayfaya erişimin hala yasak olup olmadığını belirleyecektir.

python3 enumXFF.py -t http://sketchysite.com/admin -badcl 234 -r 192.168.0.0-192.168.255.255

Yukarıdaki komut istekte bulunmaya çalışacaktır http://sketchysite.com/admin aralıktaki tüm IP adresleriyle 192.168.0.0-192.168.255.255. Python betiği, eşzamansız HTTP isteklerinden yararlanır. requests-futures modül olduğundan oldukça hızlı olmalıdır. Bu aracın yalnızca Python3’te çalıştığını unutmayın.

Buna ek olarak Github’daki enumXFF projesi aynı zamanda adlı bir betiği de içeriyor. generateIPs.py. Bu, doğrudan Burp’s Intruder’a girilebilecek, virgülle ayrılmış IP adreslerinin bir listesini oluşturacaktır. Araç sizin için en iyi yol değilse Burp’s Intruder, başvurabileceğiniz güvenilir bir seçenektir.

192.168.0.0-192.168.255.255 aralığına ait IP’leri oluşturmak için aşağıdaki komutu kullanmanız gerekir:

python3 generateIPs.py -r 192.168.0.0-192.168.255.255 -o burp_xff_ips.txt

Belki gelecekte zaman izin verirse senaryomu basit bir Burp uzantısına aktarabilirim.

Bu blog gönderisini yararlı bulursanız, projeye Github’da yıldız vermekten veya tweet atmaktan/beni takip etmekten çekinmeyin @infosec_au 🙂





Source link