Geç saatlerde, istemci IP adreslerine dayalı dizinlere yetkisiz erişimi önlemek için bir çeşit mekanizma kullanan daha fazla uygulamayı bozuyorum. Birçok durumda, bunun yanlış uygulanırsa zayıf bir koruma yöntemi olduğu kanıtlanmıştır.
Web uygulama sunucularına sahtekarlık izlemesi, başka bir kimlik doğrulama şekli olmadan tam yönetim erişimine izin verdiği durumlar olmuştur.
StackOverflow’a ne olduğuna bir göz atın.
WordPress yönetim panellerinin korunmasında yaygın olarak kullandığım bu tür bir uygulama, Apache sunucularındaki HTAccess dosyalarındaki IP adreslerini beyaz listelemektir. Örneğin aşağıdakileri alın .htaccess
İç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 sunucuları yapılandırmanıza bağlı olarak, yukarıdaki yapılandırma tamamen işe yaramaz olabilir. Neden? Yoldan dolayı X-Forwarded-For
Başlıklar ele alınır.
İsteğiniz ile içeriği barındıran gerçek web sunucusu arasında olabilecek vekiller nedeniyle, X-Forwarded-For
Başlık, temasa geçilen son ana bilgisayara aktarılır, genellikle IP adreslerinin sıralı bir listesi içerir. Bu blog gönderisinde açıklandığı gibi, X-Forwarded-For
Başlık şöyle görünecek:
X-Forwarded-For: A, B, C
A, müşterinin IP adresini temsil edeceği durumlarda, B bir ara proxy’yi temsil edecektir ve C başka bir ara proxy’yi temsil edecektir.
Not: Sunucu ile istek arasında vekil sayısının bir sınırı yoktur, X-Forwarded-For
Sınırlı bir formatta sınırsız IP listesi olabilir.
Yukarıdaki bağlantılı blog gönderisinde belirtildiği gibi: En sol IP adresi, dövülmesi en kolay olanıdır. Uygulama sunucusunun en güvenilir IP adresini belirlemesi için Proxy zincirini tersine çevirin. Her çerçeve veya uygulama bunu yapmaz ve deneyimlerden, IP adreslerini artış olabilme şansı X-Forwarded-For
Başlık yüksek.
Aslında, IP adreslerinin aynı olduğu ancak virgülle sınırlandırılan büyük bir IPS 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 gönderisinde daha önce bahsettiğim HTAccess dosyasına geri dönersek, bu GET isteği ile IP kısıtlamalarının atlanmasına izin veren basit bir baypas gösterildi:
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ığı ekleyerek, WP-Admin dizinine tam erişim sağlandı.
Ancak bu beni başka bir soruna getirdi. Bu bir beyaz kutu testi olmasaydı, muhtemelen /wp-admin/
ile dizin X-Forwarded-For
Başlık böyle bir IP adresine ayarlayın.
Çünkü IP adreslerini numaralandırarak 403 yasak kaynağa erişimi numaralandıran böyle bir araç olmadığından X-Forwarded-For
Bunu yazarken başlık, bir tane oluşturdum.
Bu araç burada bulunabilir: http://github.com/infosec-au/enumxff
Tek yapmanız gereken aracı aşağıdaki girişi vererek terminalden çalıştırmaktır:
- Denemek için 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 sayfaya bir dizi IP adresi 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 talep etmeye çalışacaktır http://sketchysite.com/admin
Aralıktaki tüm IP adresleriyle 192.168.0.0-192.168.255.255
. Python komut dosyası, asenkron HTTP isteklerinden yararlanır. requests-futures
Modül ve dolayısıyla oldukça hızlı olmalıdır. Not, bu araç yalnızca Python3 üzerinde işlev görür.
Buna ek olarak, GitHub’daki Enumxff projesi, generateIPs.py
. Bu, doğrudan Burp’un davetsiz misafirine girilebilen virgülle sınırlandırılmış IP adreslerinin bir listesini oluşturacaktır. Araç sizin için en iyi yol değilse, Burp’un davetsiz misafiri geri dönmek için güvenilir bir seçenektir.
192.168.0.0-192.168.255.255 aralığı için IPS 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 de gelecekte zaman izin verirse, betiğimi basit bir geğirme uzantısına taşıyabilirim.
Bu blog gönderisini yararlı bulursanız, projeye GitHub veya Tweet/Tweet Me Me ile ilgili bir yıldız vermekten çekinmeyin @infosec_au 🙂