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

步骤

  1. 安装插件
  2. 右键请求 → Extensions → chunked-coding-converter → Encode Request body
  3. 配置分块参数(默认即可)

四、云锁绕过技术

1. 超大数据包绕过

方法

  • POST模式下,添加脏数据使Content-Length > 7300
  • 正常参数放在脏数据后面

2. 畸形boundary绕过

原理
PHP解析multipart data时只识别boundary逗号前的内容,而WAF可能识别整个字符串

实战步骤

  1. 修改请求为multipart/form-data
  2. 右键 → Change body encoding
  3. 修改boundary值为畸形值(如添加逗号和后缀)

五、防御建议

  1. 对输入进行严格过滤和参数化查询
  2. 设置合理的WAF检测长度限制
  3. 更新WAF规则以识别新型绕过技术
  4. 限制数据库用户权限
  5. 定期进行安全审计和渗透测试

六、参考资料

  1. 安全狗在phpstudy环境下的安装与配置
  2. 详解mysql的information_schema数据库
  3. SQL注入Bypass总结
  4. Mysql绕过WAF的一些基础方式
  5. mysql8注入新特性—无select注入
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(不换行空格) 示例: 方法2:注释符号绕过 MySQL注释类型: -- :单行注释 # :单行注释 /**/ :多行注释 示例: 方法3:括号绕过 示例: 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 语句: VALUES 语句(8.0.19+): 5. 内联注释执行 内联注释格式: /*! MySQL语句 */ 示例: 注意:不能拆分关键词,如 se/*!lect*/ 不可执行 三、安全狗绕过技术 1. 超大数据包绕过 原理 : WAF通常只检测前2M或4M内容,在POST BODY前添加大量无用数据,payload放在最后 实战方法 : POST模式下,添加脏数据使Content-Length > 8200 正常参数必须放在脏数据后面 示例payload : 2. 函数分隔符绕过 原理 : 函数名与括号之间可插入特殊字符,如空白符或多行注释 示例payload : 3. 空格替换绕过 可用替换符 : 多行注释: /**/ , /*--*/ , /*//*/ 空白符:%09, %0a, %0c, %0d, %a0 示例payload : 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注入