Time-based SQLi
Zaman tabanlı SQLi
Üçüncü tip SQL enjeksiyon zaafiyeti Zamana-Bağlı(Time-based) SQL enjeksiyonudur. Burada yine bir önceki BLIND SQLi mantığı var. Referans sayfa ile enjeksiyon yapılan sayfa arasında html olarak bir fark olmadığında kullanılır. HTML sayfa içindeki metin yerine enjekte edilen koddaki bekleme süresine (zamana) bakılır. Aşağıdaki örnek koda bakıldığında "pass" ile exception durumu pas geçiliyor:
Aşağıdaki SELECT IF cümleciği sonucunda 5 sn bekleme olacaktır:
Blind'daki mantık kullanılırsa yine,
Yukardaki Select If cümleciğinde substring(mehmet,1,1) = m ve ascii(m) = 109 > 79 olduğundan sonuç doğru olması ile sleep(5) çalışır. Yani dolaylı yoldan enjeksiyonun çalıştığı görülebilir. Aşağıdaki kod sonucu 5 saniye sonra 0 olarak gözükecektir:
Zaman tabanlı SQL enjeksiyonu olup olmadığını anlamak için kullanılabilecek algoritma aşağıdaki gibidir:
SQL enjeksiyonunu bulmada tespit için yukarıdaki gibi TIME BASED SQLi için SLEEP() MySQL fonksiyonu MySQL sunucu için kesin çalışır. SELECT'de 1=1 de kesin çalışır. Ama ya INSERT varsa?
Union ile blind/boolean arası bir yaklaşım kullanılabilir:
User registration (kullanıcı kaydı) yapılıyor diyelim. Insert saldırı kodu yaptık. Başka sayfada yorumlar varsa, bu sefer 1,2,3,... diye aramıyoruz. Diğer bir sayfada arıyoruz. 2 işlemde bulduk! Aşağıdaki örnek SQL cümleciğine bakalım:
TODO: aşağıdaki SQL tamamlanacak.
Last updated
Was this helpful?