Blind/Booelan-based SQLi
Kör SQLi
Blind/Boolean SQL enjeksiyonu adından anlaşılabileceği gibi yapılan etkinin sonucunun mantıksal bir iterasyon sonucu anlaşılabildiği bir zaafiyet türüdür diyebiliriz.
Aşağıdaki SQL cümleciğine bakalım:
Yukardaki kodun çalıştığını gördükten sonra, olayı anlamak adına, SQL cümleciğini biraz daha geliştiriyoruz:
Yukardaki SQL cümleciklerinde AND'den sonra gelen ifadeler Boolean True (Doğru) sonucu vereceğinde sonucu değiştirmiyor. Yani referans sayfanın verdiğimiz bu girdi ile değişmesini istemedik. Referans/orijinal sayfa ile bu sorgu sonucu çıkan sayfa aynıysa burda sömürülesi bir SQL açıklığı vardır diyebiliriz. Bundan sonra artık yine sonucu doğru olan farklı sorgular eklemeye çalışacağız.
Son sorgu sonucundaki tablo adımız users ise orjinal sayfa yine gelecek; çünkü AND'den sonrası kısım TRUE verecek. Bundan sonrası artık iteratif olarak ve verimli (efficient) algoritmalar kullanarak en az denemede tablo adını vb. diğer verileri bulmak olacaktır. Substring fonksiyonu metin değerin belli bir parçasını almaya yarıyor. Yukarda 'u' yerine ASCII fonksiyonu kullanılabilir. Yani ASCI('a') ile sayı kontrolü yapabiliriz. Bir sonraki karakter için de offset LIMIT 1, 1 yapıyoruz. ASCII tablosunda da 65'den 122'ye kadar olan karakterleri kör (blind) ama akıllıca arayabiliriz.
Yukardaki kod parçasında tablonun adındaki karakterin ASCII değeri 94'den büyük müdür kontrolü var. Sonucun doğru olup olmayacağını da referans/orijinal web sitesi içerisindeki bir kelimenin olup olmadığı kontrol edilebilir.
Daha verimli arama için ikili arama (binary-search) algoritması kullanılabilir. Python ile yazılan payload koduna github'dan ulaşılabilir. Tabii gerçek penetrasyon testinde SQLMAP gibi araçları kullanmakta yarar var; çünkü zaman sınırlı penetrasyon testlerinde en az çaba ile en hızlı bir şekilde açıklığı bulmak hedeftir. Blind/Boolean SQLi bu kadar...
Last updated
Was this helpful?