Neler yeni
Bughane Academy

Bughane Academy, bug bounty, web güvenliği ve sızma testi alanında kendini geliştirmek isteyenler için kurulmuş Türkçe odaklı bir topluluktur.

Burada; gerçek güvenlik açıkları, recon ve exploit teknikleri, payload & bypass yöntemleri, araçlar, scriptler ve write-up’lar topluluk tarafından paylaşılır ve tartışılır.

Birlikte öğren, birlikte üret, birlikte güçlen.

PortSwigger Blind SQL injection with conditional errors Lab Çözümü

  • Konuyu Başlatan Konuyu Başlatan eduran
  • Başlangıç tarihi Başlangıç tarihi

eduran

Moderator
Gözlemci
Katılım
2 Ocak 2026
Mesajlar
1
Tepkime puanı
3
Puan
3
Bugün PortSwigger içerisindeki Blind SQL injection with conditional errors labının çözümünü sizlere aktaracağım. Konu biraz uzun, o yüzden fazla vakit kaybetmeden anlatmaya başlıyorum.

Öncelikle burp suite içerisinden browser'ı açıp proxy kısmına girdim ve sitenin ana sayfasına girdiğimde gelen isteği Repeater ’a attım.

Ana sayfa şu şekilde görünüyor:

1_nxRqx1lGTPurYe2srUjWNw.webp

Repeater görünümü ise şu şekilde:
2_mQsQmpNBaBZu5U-B2EK1aA.webp

Bu kısımda teste başlıyoruz ve Request içerisindeki TrackingId ’nin sonuna bir adet tek tırnak (‘) ekliyoruz.

3_RFLRf0qwo0j-dCSVj6UnNA.webp

Send dediğimizde göründüğü üzere HTTP/2 500 Internal Server Error alıyoruz. Sonrasında bu hatadan kurtulmak için bir tırnak daha koyup tekrar deniyoruz.

4_n5jD81eOP0NoNoRXO-qaiw.webp

Göründüğü üzere bu şekilde hatasız çalışıyor. Şimdi ise örnek bir payload girerek bu parametrenin çalışıp çalışmadığını kontrol ediyoruz.


5_M1VWHSLLOzEa-spX6fgj8g.webp

Hatasız çalıştığını görüyoruz. Bize lab açıklamasında users adlı bir tablo olduğu ve bu tablo içerisinde username ve password adlı columnların bulunduğu söylenmişti. Bu yüzden buradaki payloadda SELECT users kısmında users tablosu içerisine erişmeye çalışıyoruz. İçi boş iki tek tırnak(‘’) ile boş bir string döndürüyoruz ve ROWNUM = 1 ile yalnızca ilk satırı çekerek sorgunun çıktısını sınırlandırıyoruz.

Sonrasında bize verilen açıklamalardan yola çıkarak kullanıcı adını administrator olarak payloada giriyoruz ve şu şekilde bir düzenleme yapıyoruz:

6_QCITmwhYpVCg6XSXCWUHYQ.webp

Bu kısımda users tablosundan administrator kullanıcısını seçmeye çalışıyoruz. CASE WHEN (1=1):1=1 her zaman doğru (TRUE) olduğu için THEN bloğu çalışacak.

THEN TO_CHAR(1/0):1/0 ifadesi sıfıra bölme hatası üretecektir. TO_CHAR(1/0) ise sıfıra bölme hatasını karakter verisine çevirmeye çalıştığı için bir hata döndürülecektir.

ELSE '': Eğer 1=1 yerine yanlış bir koşul konursa (1=0 gibi), sorgu boş string ('') döndürecek anlamına gelir.


7_Vrjer33UBmu5Z0xavk74nw.webp

Buradaki payload içerisinde amaçlanan şey password 1 veya daha küçükse hata vermeden boş string döndürülecek. Bu kısımda hata alıyoruz, çünkü şifre 1'den daha büyük. Şimdi bu kısmı Intruder 'a atıyoruz ve saldırıya hazırlanıyoruz.

8_qRkWu_JDqhZtj30HupqbAQ.webp

Intruder içerisinde payloadın password kısmını şu şekilde değiştiriyoruz:

9_bfAQeYhAl8O5UuOcxhhS_Q.webp
10_F-DV38CEBeiskZZA7ecOLw.webp
Buradan sonra Intruder içerisinde payloadı şifrenin uzunluğunu öğrenmek için saldırıya göre ayarlıyoruz. 1'den 25'e kadar olan değerleri tek tek denemesi için ayarları şu şekilde düzenliyoruz:

11_ljGA1elKNmsiJkLYmAlA1Q.webp


Sonrasında ise saldırıyı başlatıyoruz.

12_0DlIh0jViFSMeoFuPWNWJA.webp

Göründüğü üzere şifre 20 karakterden oluşmakta.
Sonrasında şifrenin ilk hafini öğrenme kısmına geçiyoruz.
13_PxHp9kXTsq-UfBDDMD_P3Q.webp
Bu şekilde şifrenin ilk karakterini öğrenmeye çalışıyoruz.

SUBSTR(password,1,1):

password alanındaki ilk karakteri alır.= '$a$':

Eğer şifrenin ilk karakteri $a$ ise, THEN bloğu çalışır.

THEN TO_CHAR(1/0)

1/0 sıfıra bölme hatası üretir.

Eğer şifrenin ilk karakteri $a$ ise, hata alırız.

ELSE ' '

Eğer şifrenin ilk karakteri $a$ değilse, hata vermeden boş string ('') döner.

Şimdi Payloads kısmından payloadı düzenliyoruz.

14_UbGDZ56RON_h-quGlI7bKg.webp

İçerisine a’dan z’ye tüm küçük karakterleri ve 1'den 9'a kadar tüm rakamları ekliyoruz.

Sonrasında Start Attack butonuna basıyoruz ve atak başlatılıyor.

15_D5YiM6bWv5JF66KBCtHn1g.webp
Burada uzunluğu (Length) en kısa olan ve 500 Internal Server Error hatası alınan değer bize o karakterin doğru olduğunu belirtiyor. Göründüğü üzere şifrenin ilk karakteri ‘r’.

İkinci karakteri öğrenmek için ise payload üzerinde şu güncellemeyi yapıyoruz:

16_5o8pMA2UOfyO8ygbhNd8Kw.webp

Sonrasında aynı şekilde saldırıyı başlatıyoruz.
17_TCZWDkyglaK-FYiqrgTS3g.webp
İkinci karakter ‘k’.

Bu şekilde password kısmındaki ilk değeri 20'ye kadar artırarak tüm değerleri tek tek kontrol ediyoruz ve şifrenin rk4a2vjsc1iu3c7chtkt olduğunu öğreniyoruz. Son olarak ana sayfadaki MyAccount kısmından giriş sekmesine geliyoruz ve administrator kullanıcı adı ile rk4a2vjsc1iu3c7chtkt şifresini giriyoruz.

18_lSrQXGxNNUAbuQ_np12_Cw.webp
Log in butonuna tıklıyoruz.
19_AEeVOzw9xsRRxp1oCDNtpw.webp
Göründüğü üzere bu şekilde lab çözülmüş oluyor.

Vakit ayırdığınız için teşekkürler.
 
Geri
Üst