iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Security

嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞系列 第 7

DVWA 實作:SQL Injection(SQL 注入)原理、探測與攻防

  • 分享至 

  • xImage
  •  

在體驗完Command Injection後,今天我們要深入Web資安最經典、危害也極大的漏洞:SQL Injection。SQL注入漏洞常年佔據OWASP Top 10前列,一旦被攻擊者利用,可能導致整座資料庫的敏感資料(如帳號密碼、個資、交易紀錄)遭到竊取或篡改。

  • 什麼是SQL Injection?
    當Web應用程式需要向資料庫查詢資料時,若直接將使用者輸入的內容拼接到SQL語法中,且未進行嚴格的過濾或轉義,攻擊者就可以輸入精心設計的SQL語法,改變原本SQL語法的邏輯結構,進而執行任意資料庫指令。

  • DVWA 實作步驟(Low 安全等級)
    進入DVWA左側選單SQL Injection,畫面提供了一個輸入User ID查詢使用者名稱的功能。

1.第一步:基礎邏輯破壞

輸入經典的邏輯繞過語法:
1' OR '1'='1

結果:成功列出資料庫內的所有使用者(admin, Gordon, Hack 等)。
https://ithelp.ithome.com.tw/upload/images/20260921/201793126L5PppsatN.png

  1. 第二步:欄位數量探測
    在進行跨資料表撈取前,必須先知道原始查詢回傳了幾個欄位。使用 ORDER BY 指令進行探測:

輸入:1' ORDER BY 1 #
https://ithelp.ithome.com.tw/upload/images/20260921/20179312CKXCqWL6Lo.png
結果:測試 1 個欄位,正常

輸入:1' ORDER BY 2 #
https://ithelp.ithome.com.tw/upload/images/20260921/20179312OF2wFbfJvP.png
結果:測試 2 個欄位,正常

輸入:1' ORDER BY 3 #
https://ithelp.ithome.com.tw/upload/images/20260921/20179312l2NGamXjY4.png
結果:畫面跳出錯誤訊息(Unknown column '3'),代表原始查詢只有 2 個欄位。

3.第三步:敏感資訊撈取
得知欄位數為 2 後,即可利用 UNION SELECT 結合自訂查詢,印出系統敏感資訊:

輸入:1' UNION SELECT database(), user() #
https://ithelp.ithome.com.tw/upload/images/20260921/20179312vFqD5QYjfN.png
結果:頁面成功顯示出目前資料庫名稱為 dvwa,以及相關運行權限。

  • 漏洞成因分析
    程式碼直接將變數 $id 用字串拼接的方式放入 SQL 查詢中,完全沒有經過任何過濾與參數化處理,導致使用者輸入的單引號 ' 能夠直接閉合原始字串並插入新語法。

  • 如何正確防禦 SQL Injection?
    1.使用預編譯查詢:
    這是防禦sQL注入最有效且最標準的方式。將SQL語法結構與傳入的參數資料分開處理,資料庫只會把參數當成純字串,絕不會將其當成指令執行。

2.使用ORM框架:使用現代Web框架內建的資料庫存取層,預設皆會進行參數化防護。

3.最小權限原則:資料庫連線帳號僅賦予必要的讀寫權限,避免使用高權限連線。


上一篇
DVWA 實作:Command Injection(指令注入)原理與攻防
下一篇
DVWA 實作:Reflected XSS原理與攻防
系列文
嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言