Sızma Testlerinde İleri Seviye Sqlmap Kullanımı – I

Sqlmap açık kaynak kodlu sql injection açıklığı tespit ve istismar
etme aracıdır. Kendisine sağlanan hedef web uygulamasının kullandığı veritabanı  sistemine gönderdiği çeşitli sorgular/komutlar ile sistem üzerindeki
sql injection tipini tespit eder yine kendisine sağlanan parametrelere
göre çeşitli  bilgileri  hedef veritabanından alır.

Sqlmap ile hedef hakkında elde edilebilen bazı veriler;

  • Veritabanı türü ve versiyonu (–banner,–all)
  • Mevcut kullanılan veritabanı ve erişilebilen tüm veritabanı isimleri (–current-db, –dbs)
  • Veritabanı tabloları(tables) ve bu tablolara ait kolonları(columns) (–tables, –columns)
  • Veritabanı datası(–dump, –dump-all)
  • Veritabanı mevcut kullanıcısı ve tüm kullanıcılar(–current-user,–users)
  • Veritabanı kullanıcı parolası (–passwords)
  • Veritabanı kullanıcısının DB admin olup olmadığı bilgisi(–is-dba)
  • Hedef sunucu hakkında bilgi(İşletim sistemi, Uygulamanın kullanıldığı teknoloji vs. , -f)

Sqlmape farklı tiplerde hedef belirtilebilmektedir;

  • URL (–url, -r )
  • Burp suite ve WebScarp proxy logu (–log , -l)
  • HTTP talepleri bir dosyadan okutulabilmektedir. (–r)
  • Google üzerinden URL toplayıp input olarak alabilmektidir.(-g)
  • /sqlmap/sqlmap.conf dosyası -c parametresi ile verilerek tüm konfigrasyon input olarak verilebilir. (-c)

Sqlmap.conf
dosyası oldukça ileri düzey parameterlere sahiptir. Yukarıda verilen
girdiler bu conf dosyasına girilerek buradan okunması sağlanılabileceği
gibi, çeşitli farklı işlemlerde (WAF/IPS/IDS keşfi yapıp/yapmama,uzak
sunucuda okunacak dosya, uzak sunucuda yürütülecek komut v.b )
yaptırılabilmektedir.

Not: Sqlmap ile
çalışmaya başlamadan önce ilgili dizine girip sqlmap update edilmelidir.
Bunun için aşağıdaki komut backtrack üzerinde kullanılabilir.

root@bt:~# cd /pentest/database/sqlmap/;svn update;python2 sqlmap.py –update

Sqlmap, 
-g parametresi ile belirli ifadeler (sqli açıklığı barındırdığı bilinen
URL’ler) google üzerinden bulup, üzerindeki sql injection açıklığını
istismar edebilmektedir.

Sqlmap bulduğu URL’leri sıra ile exploit etmek
isteyip istemediğimizi sormaktadır.

root@bt:/pentest/database/sqlmap# ./sqlmap.py -g “inurl:index.php?id=” –dbs
[14:35:17] [INFO] first request to Google to get the session cookie
[14:35:18] [INFO] using Google result page #1
[14:35:25] [INFO] heuristics detected web page charset ‘ISO-8859-2’
[14:35:25] [INFO] sqlmap got 105 results for your Google dork expression, 100 of them are testable targets
[14:35:25] [INFO] sqlmap got a total of 100 targets
url 1:
GET http://www.du.ac.in/index.php?id=165
do you want to test this url? [Y/n/q]
> n

url 2:
GET http://www.uni-corvinus.hu/index.php?id=7745
do you want to test this url? [Y/n/q]
> n

url 3:
GET http://www.harkavagrant.com/index.php?id=341
do you want to test this url? [Y/n/q]
>

–data parametresi ile hedef URL’e ait post verisi manuel olarak da verilebilmektedir.
–cookie
parametresi ile hedef sisteme bağlanmak için cookie bilgisi
verilebilmektedir. Parola korumalı hedeflerdeki sql injection açıkları
bu şekilde kolaylıkla istismar edilebilmektedir.

Sqlmap
http kimlik doğrulama yöntemlerinden bacic,ntlm ve digest yöntemlerini
desteklemektedir. Bu tür http kimlik doğrulama türleri ile korunan hedef
sistemlere yönelik açıklıklarda istismar edilebilir. –auth-type Basic
–auth-cred “user:pass”

Taramalar http, https ve tor
proxy üzerinden gerçekleştirilebilmektedir. Proxy kullanımı için –proxy
parameteresi, proxy serverlar üzerinde kimlik dogrulama için
–proxy-cred parametreleri kullanılmaktadır.

–proxy Http –proxy-cred “user:pass”

Hedef
sunucu veya sunucu önünde bulunan WAF/IPS benzeri güvenlik cihazları
bazı http header parametrelerini gelen istekte görmek isterler.

Bunlardan bir kaçı user agent ve referer gibi başlık bilgileridir.
Güvenlik cihazları üzerinde bulunan whitelistlerde tanımlı bazı user
agentlar ile gelen client istekleri cevaplanır bunun dışında gelenler
bloklanır. Sqlmap ile bu durum user agent için, –user-agent veya
–random-agent parametreleri ile atlatılabilmektedir.
–user agent ile istenilen bir user agent header bilgisi input olarak verilebilmektedir.
–random-agent
paremetresi kullanılması durumunda ise ./txt/user-agent.txt
dosyasındaki yaklaşık 2100 user agent içerisinden rast gele seçilerek
hedef üzerinde zaafiyet istismar denemeleri gerçekleştirir. Referrer
için ise –referer parametresi kullanılabilir.

Not:HTTP header bilgilerinin kullanılması için –level ile 3 ve üstü bir değer ifade edilmelidir.

–delay
parametresi ile gönderilen http(s) istekleri arasındaki gecikme miktarı
da saniye cinsinden ifade edilebilmektedir. –delay parametresi float
türde veri de kabul etmektedir. ( –delay=1.5 )

–timeout
parametresi ile normal http timeout süresi göz önünde bulundurulmadan
önceki bekleme süresi belirtilebilir. Buda fload türde bir değişken
olarak tanımlıdır (ondalıklı verilebilir) ve ön tanımlı olarak
sqlmap.conf dosyasında 30 sn olarak ayarlanmıştır.

root@bt:/pentest/database/sqlmap# cat sqlmap.conf | grep timeout
# Seconds to wait before timeout connection.
timeout = 30
# Maximum number of retries when the HTTP connection timeouts.

–retries
parametresi ile timeouta uğrayan http(s) isteklerinin tekrarlanma
sayısı verilebilir. Bu değer sqlmap.conf dosyasında ön tanımlı olarak 3
olarak belirtilmiştir.

root@bt:/pentest/database/sqlmap# cat sqlmap.conf | grep retries
# Maximum number of retries when the HTTP connection timeouts.
retries = 3

Konunun daha iyi anlaşılması için bir kaç somut örnek üzerinden devam edelim.Hedef
sisteme ait veritabanı kullanıcısını belirleme(–current-user) ve bu
kullanıcının veritabanı admin haklarına sahip olup olmadığını(–is-dba)
belirleyelim. Ayrıca uzak sistem üzerindeki işletim sistemi/versiyonu,
kullanılan web teknolojisi adı/versiyonu, veritabanı uygulaması
türü/versiyonu (-f) gibi bilgileri alalım.


root@bt:~# cd /pentest/database/sqlmap/;python2 sqlmap.py -u ‘http://testasp.vulnweb.com/showforum.asp?id=0’ –current-user –is-dba -f

[16:59:19] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2003
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: active fingerprint: Microsoft SQL Server 2005

[16:59:19] [INFO] fetching current user
current user:    ‘acunetix’
[16:59:21] [INFO] testing if current user is DBA
current user is DBA:    False

Görüldüğü
gibi mevcut kullanıcımız acunetix kullanıcısıdır ve dba degildir. Hedef
sistem işletim sistemi ve kullanılan teknoloji bilgileride yukarıda
çıktıda görülmektedir.

Bazen sqlmap URL bağlantısını test etmeye çalıştıgında timeout alarak URL bağlantı kuramaz. Gerçekten bağlantı olup olmadığını kendi browserimizdan adres çağrılarak görülebilir. Şayet browser üzerinden ilgili adrese bağlantı gerçekleştiriliyor fakat sqlmap bağlantı kuramıyorsa, bu gibi durumlarda hedef web uygulaması tarafında bizim user agent bilgimiz kontrol ediliyor olabilir.

Bu tür sorunları aşmak için –random-agent parametresi ile çeşitli user agent bilgileri ile hedef test edilirse sonuç başarılı olacaktır. Aşağıda örnek bir kullanım verilmiştir. -v 3 parametresi ile gönderilen tüm payloadlar görülebilir. –retries ile timeout vs. gibi başarısız bağlantılarda tekrar denenmemesi için 0 değeri set edilmiştir.

root@bt:/pentest/database/sqlmap# ./sqlmap.py -u ‘http://www.example.com/test/index.asp?id= 1’ –random-agent -p word –dbs –dbms=mssql –keep-alive –time-sec=1 -v 3 –retries 0 –timeout=1 –threads=10

F. Celal Erdik <Celal.Erdik@bga.com.tr>