Blind SQL injection with conditional responses | Web Security Academy
Merhaba. Bu yazımda PortSwigger üzerinde yer alan Web Security Academy lablarından “Blind SQL injection with conditional responses” çözümünü yapacağım.
İlgili laba erişmek için >> https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses linke tıklayabilirsiniz.
Sayfaya giriş yapmadan önce verilen bilgilere göz atıyorum.
Daha sonra sayfaya giriş yapıyorum. Sayfaya giriş yaptığımda ‘Welcome back‘ yazısını görüyorum.
Sayfaya giden isteği yakalamak için Burp Suite intercept on yapıyorum ve sayfayı yeniliyorum ardından isteği repeatera atıyorum.
İsteği Repeater’a attıktan sonra inceliyorum. TrackingId isimli tanımlama verisini değiştirerek açığın varlığını test edebileceğimi görüyorum. TrackingId parametresine aşağıda görüldüğü gibi
TrackingId=WcDC2nZXjAml8qP6' AND '1'='1
Sorgusunu göndererek tekrardan ‘Welcome back‘ yazmasını bekleyeceğim.
Görüldüğü gibi sorguyu gönderdiğimde Welcome back yazısını görüyorum. Şimdi aşağıdaki sorguyu çalıştıracağım ve Welcome back yazmamasını bekleyeceğim.
TrackingId=WcDC2nZXjAml8qP6' AND '1'='
2
Evet bu sorguyu gönderdiğimizde Welcome back yazısını göremedik. Şimdi aşağıda yer alan sorguyu çalıştırarak username bilgisinin ilk harfinin a olup olmadığına bakacağım. Eğer a ise Welcome back yazısını tekrar göreceğiz.
' AND (SELECT 'a' FROM users LIMIT 1)='a
Evet ilk harfinin a olduğunu öğrendik. Zaten bize lab girişinde username bilgisinin administrator olduğu verilmişti. Ancak aşağıdaki sorgu ile administrator isimli bir kullanıcı olup olmadığını doğrulayacağım.
' AND (SELECT 'a' FROM users WHERE username='administrator')='a
Bu sorguyu çalıştırdığımda Welcome back yazısını tekrar görürsek doğrulamış olacağım.
Evet görüldüğü üzere administrator kullanıcısının olduğunu doğruladım. Daha sonra kullanıcının parolasını bulmamız gerekiyor. Bunun için öncelikle aşağıdaki sorgu ile parolanın uzunluğunu bulacağım.
' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a
Bu sorgu ile parolanın uzunluğunun 1 karakter uzun olup olamadığını sorguluyorum. Sorguyu yaptığımda Welcoma back yazısını görüyorum ve doğrulamış oluyorum. Toplam karakter uzunluğunu tespit etmek için isteği intrudera gönderiyorum ve parola uzunluğunu ekliyorum.
Daha sonra payloads kısmından numbers seçip 30’a kadar 1’er sayı atlayacak şekilde ayarlıyorum.
Ardından options kısmında grep match kısmına doğru sonuçta verilen mesajımız olan Welcome back cümlesini ekliyorum.
Atağı başlatıyorum ve aşağıda görüldüğü gibi Welcome back mesajının verildiği parola uzunluğu 19 yani parola 20 haneden oluşuyor. (Boşluk karakteri ile beraber 20)
Daha sonrasında ise 20 haneden oluşan parola içerisinden aşağı yer alan sorgu ile tek tek karakterleri çıkarmaya başlayacağım.
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a
Burada yer alan SUBSTRING() fonksiyonu ile parola içerisinden çıkaracağım her karakteri diğer bir karakterle eşitleyerek elde ettiğim karakterin doğru olup olmadığına bakacağım. Yukarıdaki sorguda ilk karakterin a ile eşit olup olmadığına bakıyorum ve aşağıda görselde görüldüğü gibi Welcome back yazısını alamadığım için karakterin a ile eşit olmadığını anlıyorum.
Bu işi kolaylaştırmak için isteği intruder’a atarak hızlı bir şekilde karakterleri tespit edeceğim. Aşağıda görüldüğü gibi parolanın birinci karakterini test ettiğimiz a harfini ekliyorum.
Payloads bölümünden simple list seçtikten sonra aşağıda yer alan a-z ve 0-9 kadar olan listeyi ekliyorum.
a b c d e f g h i j k l m n o p r s t u v y z x w q 0 1 2 3 4 5 6 7 8 9
Listeyi ekledikten sonra yine grep match kısmına Welcome back mesajını ekleyip atağı başlatacağım. Parolanın ilk hanesinde hangi karakterin olduğunu, doğru karakter ile eşleşince ekrana yansıyan mesaj olan Welcome back mesajı ile anlayacağız.
Atağı başlattıktan sonra aşağıda görüldüğü gibi ilk karakter b. Bundan sonra SUBSTRING(password,1,1)
kısmını 2,1 – 3,1 – 4,1 .. 20,1 diye artırarak bulacağım.
İkinci karakter için aşağıda görüldüğü gibi sorguyu değiştirerek devam ediyorum. İkinci karakter j.
Yaklaşık 5 dakikadan sonra 20 haneli parolayı (bjahvhi56e90ehcx8b1o) elde etmeyi başarıyorum. Son olarak ise kullanıcı adı ve parola ile oturum açmamız gerekiyor.
Başarılı bir şekilde oturum açıp labı sonlandırıyorum. Oldukça öğretici ve kaliteli olan PortSwigger Web Security Academy’e teşekkürler 🙂
Başka yazılarda görüşmek üzere.