Zaman Tabanlı Full-Blind SQL Injection

16-10-2007

Full Blind SQL Injection (çıktıda hiç değişiklik oluşturmayan SQL Injectionlar) popüler konularımızdan biri. Her ne kadar MySQL, ORACLE, SQL Server, PostgreSQL de rahatça takılabilsekte  MS Access gibi acayip ve genelde tırt veritabanlarına gelince takılıyoruz.

Çünkü genelde çoğu veritabanı, SLEEP ya da WAITFOR DELAY gibi fonksiyonlar ile zaman tabanlı ataklar yapmamızı sağlarken MS Access gibi veritabanlarında bu imkanımız yok.

Diğer bir örnek ise MySQL ve BENCHMARK. MySQL zaman tabanlı SQL Injection atakları yapmak için BENCHMARK' ı kullanabiliyoruz ve basitçe veritabanında uzun süren herhangi bir iş yapıyor ve çıktının kaç saniyede üretildiğine bakıp açığı exploit edebiliyoruz.

Chema Alonso BENCHMARK yerine çok uzun sürecek SQL queryleri çalıştırarak her veritabanında çalışabilecek bir zaman tabanlı SQL Injection yöntemi geliştirmiş.

http://www.informatica64.com/blind2/pista.aspx?id_pista=1 and (SELECT count(*) FROM sysusers AS sys1, sysusers as sys2, sysusers as sys3, sysusers AS sys4, sysusers AS sys5, sysusers AS sys6, sysusers AS sys7, sysusers AS sys8)>1 and 300>(select top 1 ascii(substring(name,1,1)) from sysusers)

BENCHMARK ya da bu yöntem şiddetle kaçınılmalı ve SQL Injectionlarda en son yöntem olarak başvurulmalı. Nedeni basit, serverın CPU' sunu aşırı derecede harcamış olacaksınız. Dolayısıyla server cevap vermeyebilir ya da ilginç hatalar almaya başlabilirsiniz.

İkinci bir hatırlatma bu tarz uzun süreli işlemler ile SQL Injection yaparken bariz nedenlerden dolayı multi-threading  mümkün değildir, yaparsanızda sonuçlarınız yanlış olabilir.

Recent Blog Posts

See all of the blog posts