Time Based Blind Sqli Zafiyeti Belirleme Yöntemi

BGA Security Wiki sitesinden
Şuraya atla: kullan, ara

Amaç:

Hedef uygulamadaki Time-Based sqli zafiyetini tespit etmek.

Lab Senaryosu:

SQLol kurulu bir web sunucusu.

Araç:

  • Iceweasel 22
  • curl 7.26
  • time (linux command)


Adımlar:

  • Hedef uygulamanın girdi noktaları tespit ediltikten sonra (örnekte SQLol challenge 5 kullanılmıştır.) ilk olarak ‘,%,--,# gibi özel karakterlerle sorgu bozulup hata mesajı alınmaya çalışılır. Örnekteki gibi, “blind sqli” durumlarında, hata mesajı alınamasa da mantıksal hesaplar yapan sorgular oluşturularak, sayfanın davranışından, sorguların çalışıp çalışmadığı gözlenebilir. Bazı durumlarda, bu mantıksal sorguların sonucunu da tespit etmek mümkün olmayabilir. Bu gibi durumlarda, zaman tabanlı “sqli” zafiyeti bir seçenek olabilir. “Time based sqli” zafiyetinde, mantık aynı olsa da kullanılan fonksiyonlar, veritabanı yönetim sistemine göre değişmektedir. Örnekte MySQL veritabanı kullanıldığı bilindiği için şu sorgular denenir.
11' union select sleep(5)--
11' union select sleep(5)/*
11' union select sleep(5)#

Burada, sorgunun kalanını iptal etmek için kullanılan yorum satırı, işaretlerinden sadece # başarılı olmuştur ancak üçü de başarılı olabilirdi. Başarılı olan sorguda, sunucu 5 sn bekledikten sonra cevap verecektir. Pratik bir yöntem olarak, linux de time ve curl uygulamaları kullanılabilir.

Örneğin:

time curl "http://localhost/SQLol/select.php?inject_string=11%27+union+select+sleep%285%29%23&sanitization_level=none&sanitization_type=keyword&sanitization_params=&query_results=bool&error_level=none&show_query=on&location=where_string&submit=Inject"

şeklinde SQLol görev 4 için time ve curl uygulamalarını beraber kullanarak dönen cevabın süresi görülebilir.

Time Based Blind.png


Ayrıca MySQL için

union select benchmark(100000000,rand())#

Payloadı da kullanılabilir. MsSQL için ‘waitfor delay '00:00:05' fonksiyonu kullanılır ancak bu fonksiyon, subquery olarak çalışamadığı için stacked sorgu göndermenin mümkün olduğu durumlarda , ‘;waitfor delay '00:00:05' ya da ;waitfor delay '00:00:05' şeklinde kullanılır.

Oracle için direk sql sorgusu içinden çağırılabilen bir sleep fonksiyonu bulunmamaktadır. Stacked sorgular da desteklenmediği için geri kalan en uygulanabilir yöntem, yoğun işlem yapan sorgular göndermektir. Sql injection istismarlarında faydalı olabilecek çok çeşitli payloadlara http://pentestmonkey.net/cheat-sheet adresindeki sql cheat-sheet sayfalarından erişebilirsiniz.