> 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-time-delays-cozumu.md).

# Blind SQL injection with time delays Çö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. 10 saniyelik bir gecikmeye neden olup labı tamamla diyor.

Sayfa aşağıdaki gibi:

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

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

<figure><img src="/files/5HnP3xXgY33Gp1sRj9aD" alt=""><figcaption></figcaption></figure>

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

```bash
GET / HTTP/1.1
Host: 0ac000e104b8960880d79e5f00fb002f.web-security-academy.net
Cookie: TrackingId=RakSGBrfrHGRjMMN; session=oVjzGfLXa62kjhz0KhAOwgKLxfdPkgyJ
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.

Şimdi cheatsheeti açalım, **Time delays** altındakileri deneyelim, Oracle’la başlayalım. Oracle da sorguya yedirmek için string concatenation kullanabiliriz:

(Kendi TrackingId'nizi buraya yazın veya silip sadece tek tırnakla başlayın.) `RakSGBrfrHGRjMMN' || (dbms_pipe.receive_message(('a'),10))--`

Cevap hemen geldi, beklemedi demek ki DBMS Oracle değil. Diğerlerini sırayla deneyelim. Tabi sleep komutunu verme stratejimizi değiştirmeliyiz; MSSQL, PostgreSQL ve MySQL'de **stacked queries (yığın sorgu)** kullanmamız lazım. MSSQL'de `WAITFOR DELAY` zaten ayrı çalışması gereken bağımsız bir komuttur. PostgreSQL ve MySQL'de ise fonksiyonları araya sıkıştırmaya çalışıp veri tipi hatalarıyla uğraşmak yerine, sorguyu noktalı virgülle (`;`) bitirip uyuma emrini yepyeni bir sorgu olarak vermek en temizi olur.

Şimdi Microsoft(MSSQL) ile devam edelim:

(Önemli Detay: Burp Suite'te payload'umuzu doğrudan `TrackingId=id'; WAITFOR...` şeklinde yazarsak, HTTP protokolü noktalı virgülü (`;`) bir 'çerez ayırıcı' olarak görecek ve payload'umuzu veritabanına ulaşmadan paramparça edecektir. Bunu çözmek için noktalı virgülü URL Encode ederek **`%3B`** şeklinde yazıyoruz. )

`RakSGBrfrHGRjMMN'%3b WAITFOR DELAY '0:0:10'--`

Yine cevap hemen geldi MSSQL de değilmiş.

PostgreSQL’i deneyelim:

`RakSGBrfrHGRjMMN'%3b SELECT pg_sleep(10)--`

Cevap gecikmeli geldi, demek ki bu lab PostgreSQL kullanıyormuş.

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