Sqlmap Kullanarak Blind Sqli Veri Çekme

BGA Security Wiki sitesinden
Şuraya atla: kullan, ara

Amaç:

Hedef sistemde tespit edilen Blind SQL'i zafiyetini, sqlmap kullanarak istismar etmek.


Lab Senaryosu:

“Blind SQL'i” barındıran herhangi bir web uygulaması olabilir, örnekte PHP ile yazılmış örnek bir sayfa ve MySQL veritabanı kullanılmıştır. SQLol adlı eğitim/test amaçlı çeşitli “SQL'i” zafiyetlerini barındıran uygulama da kullanılabilir.

Araç:

  • Sqlmap

Adımlar:

BlindSqlivericekme1.png

Bu aşamada, “Blind SQL'i” test etmek için şu yöntem izlenebilir. URL’den id değerine 2-1 (bir) şeklinde, mantıken sonucu 1 edecek bir değer girip, id=1 ile aynı sonucu verip vermediğine bakılabilir. Benzer şekilde “id = 1 and 1=1” ile “id = 1 and 1=2” gibi mantıksal olarak sırasıyla, doğru ve yanlış olması beklenen payloadlar da denenebilir. Örnek uygulamada payloadlar ve çıktıları şu şekildedir.

  • Manuel olarak, “Blind SQL'i” zafiyetini istismar etmek, harfleri, “Binary Search” mantığıyla bulmak gerektiğinden, bir hayli zahmetli olmaktadır. Öte yandan “sqlmap” kullanarak bu işlem kolayca tamamlanabilir. Terminalden
“sqlmap -u "http://192.168.41.132/blindsqli.php?name=bg&id=1" -p id --technique=B --current-db -v 3” komutu çalıştırılır ve uygulamanın kullandığı veritaban adı öğrenilir. Parametrelerin açıklaması şu şekildedir.

-u URL -p Zafiyetin olduğu parametre --technique=B SQL'in türü, B blind anlamında --current-db Uygulamanın mevcut kullandığı veritabanı adı -v Ekranda gösterilecek detay seviyesi

BlindSqlivericekme2.png

Parametre olarak --current-db yerine sqlmap --help ile görülebilecek bir çok farklı parametre kullanılabilir. Örneğin --dump-all diyerek, veritabanı kullanıcısının erişim hakkı olan bütün veritabanları indirilebilir.

SQLol Blind SQL'i Zafiyetinin İstismar Edilmesi:

  • localhost/SQLol/challenges.html sayfasından “Blind Luck” görevi seçilir. Burada “Blind SQL'i” “Injection String” kutusuna ‘1 or 1=1# ve ‘1 or 1=2# payloadları girilerek denenebilir. Tabi farklı payloadlar da mümkündür.
  • Açıklığı istismar etmek için, “sqlmap” bir önceki örnekte gösterilen şekilde

(sqlmap -u "http://localhost/SQLol/select.php?inject_string=1&sanitization_level=none&sanitization_type=keyword&sanitization_params=&query_results=bool&error_level=none&show_query=on&location=where_string&submit=Inject" -p inject_string --technique=B --current-user -v 3) Çalıştırıldığında, “inject_string” parametresinin zafiyet içermediğini, yani manuel olarak doğruladığımız, Blind SQL'i zafiyetini bulamadığını söyleyecektir. Sqlmap’i aynı parametrelere --level=5 ve --risk=3 parametrelerini ekleyip daha çeşitli (tabi zararlı da olabilecek) payloadlar denemesi söylenir. Bu sayede “sqlmap” zafiyeti başarıyla istismar edilebilmiştir.

BlindSqlivericekme3.png