谈高效漏洞挖掘之Fuzzing的艺术
字数 1616 2025-08-18 11:39:11

Fuzzing技术在漏洞挖掘中的艺术与实践

一、Fuzzing技术概述

Fuzzing(模糊测试)是一种自动化或半自动化的漏洞挖掘技术,通过向目标系统输入大量非预期的、畸形的或随机的数据,观察系统反应来发现潜在漏洞。本文将从实战角度详细解析Fuzzing技术在各类漏洞挖掘中的应用。

二、登录系统的Fuzzing测试

1. 验证码相关漏洞

图片验证码漏洞

  • 拒绝服务攻击:当验证码生成参数(height、width、length)可控时,可构造超大尺寸验证码请求导致资源耗尽
  • 参数删除绕过:尝试删除验证码参数,观察是否能绕过验证

手机验证码漏洞

  • 爆破攻击:对验证码进行暴力破解尝试
  • 短信轰炸:利用接口无限制发送短信验证码

2. 用户名枚举

  • 观察不同用户名输入时的回显差异:
    • 错误提示内容不同
    • 返回状态码不同
    • 响应时间差异

3. 弱口令测试

  • 使用常见弱口令字典进行尝试
  • 结合用户名枚举结果进行定向爆破

三、逻辑漏洞的Fuzzing技术

1. 敏感信息泄露

  • 接口参数Fuzzing:对已知接口进行参数爆破
  • 驼峰命名法:尝试常见驼峰式参数名(如userName、orderId等)
  • 示例方法:
    POST /sale/appOrder/+paramFuzzing HTTP/1.1
    Host: xxx.com
    Origin: http://xxx.com
    Cookie: ...
    

2. 越权漏洞

参数值替换

  • 替换用户标识参数(login、userid等)为其他用户信息

参数值枚举

  • 使用Intruder等工具对ID类参数进行暴力枚举

IDOR(不安全的直接对象引用)

  • 参数数值删除:删除关键认证参数(token/user_hash)
  • HTTP参数污染(HPP):发送多个同名不同值的参数混淆后端解析
    • 示例:userid=123&userid=456
  • 字段替换:替换与个人信息相关的其他字段

3. 回显伪造(本地验证绕过)

  1. 获取验证码后输入错误验证码
  2. 拦截返回包,修改错误响应为正确响应
  3. 放行修改后的包完成绕过

4. 未授权访问

  • 对管理接口参数进行Fuzzing:
    https://xxx/?m=index → 尝试修改m参数值为admin、manage等
    
  • 使用参数字典进行系统化测试

5. JS信息接口Fuzzing

  • 分析前端JS代码寻找隐藏接口和域名
  • 常见发现:
    • 敏感接口(可能存在越权)
    • 隐藏测试域名(可能包含未加固的后台)

四、XXE注入Fuzzing

测试场景

  • 任何XML解析场景:
    • 数据提交包含XML结构
    • 文件上传指定Excel/Word类型

测试方法

  • 构造恶意XML实体:
    <?xml version='1.0' encoding='utf-8' ?>
    <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
    <data>&xxe;</data>
    
  • 尝试不同协议(file://, http://, gopher://等)

五、CSRF漏洞Fuzzing

1. JSONP劫持

<script>
function jsonp(data){alert(JSON.stringify(data));}
</script>
<script src="http://vul.com/user/center?callback=jsonp"></script>

2. CORS跨域问题

  • 检查响应头包含:
    Access-Control-Allow-Origin: *
    
  • 或允许任意来源:
    Access-Control-Allow-Origin: http://attacker.com
    

3. Flash跨域

  • 检查crossdomain.xml配置:
    <?xml version="1.0"?>
    <cross-domain-policy>
    <allow-access-from domain="*"/>
    </cross-domain-policy>
    

六、SSRF与URL跳转Fuzzing

1. SSRF测试

  • 基本测试:
    http://target.com/vul.php?url=http://127.0.0.1:8080
    
  • 协议利用:
    • dict://127.0.0.1:port/info
    • gopher://127.0.0.1:2333/_test
    • file:///etc/passwd

2. URL跳转测试

  • 直接修改跳转参数:
    http://target.com/redirect?url=http://evil.com
    

3. CRLF注入

  • 基本原理:注入回车(%0d)换行(%0a)控制响应头
  • 测试方法:
    http://target.com/api?url=http://evil.com%0d%0aSet-Cookie:malicious=payload
    
  • 进阶利用:
    • CRLF + XSS:
      http://target.com/redirect=http://evil.com%0d%0aContent-Type:text/html%0d%0a%0d%0a<script>alert(1)</script>
      

七、黑盒测试中的漏洞利用链

组合漏洞利用

  1. 文件上传+路径遍历:

    • 严格限制的文件上传功能可能返回上传路径
    • 结合其他功能的路径参数实现RCE
  2. 信息泄露+越权:

    • 通过信息泄露获取敏感接口
    • 对接口进行越权测试

Fuzzing策略

  • 保持对每个参数和漏洞点的深度挖掘
  • 注意功能组件间的关联性
  • 尝试非常规的测试思路和角度

八、总结

Fuzzing技术在漏洞挖掘中具有不可替代的作用,通过系统化的测试方法和创造性的测试思路,可以发现在常规测试中难以发现的深层漏洞。关键在于:

  1. 对每个输入点保持怀疑态度
  2. 系统化地尝试各种变异方法
  3. 深入理解业务逻辑和技术实现
  4. 善于组合不同的测试技术和漏洞点

通过持续的实践和经验积累,Fuzzing技术将成为安全测试人员手中最强大的武器之一。

Fuzzing技术在漏洞挖掘中的艺术与实践 一、Fuzzing技术概述 Fuzzing(模糊测试)是一种自动化或半自动化的漏洞挖掘技术,通过向目标系统输入大量非预期的、畸形的或随机的数据,观察系统反应来发现潜在漏洞。本文将从实战角度详细解析Fuzzing技术在各类漏洞挖掘中的应用。 二、登录系统的Fuzzing测试 1. 验证码相关漏洞 图片验证码漏洞 拒绝服务攻击 :当验证码生成参数(height、width、length)可控时,可构造超大尺寸验证码请求导致资源耗尽 参数删除绕过 :尝试删除验证码参数,观察是否能绕过验证 手机验证码漏洞 爆破攻击 :对验证码进行暴力破解尝试 短信轰炸 :利用接口无限制发送短信验证码 2. 用户名枚举 观察不同用户名输入时的回显差异: 错误提示内容不同 返回状态码不同 响应时间差异 3. 弱口令测试 使用常见弱口令字典进行尝试 结合用户名枚举结果进行定向爆破 三、逻辑漏洞的Fuzzing技术 1. 敏感信息泄露 接口参数Fuzzing :对已知接口进行参数爆破 驼峰命名法 :尝试常见驼峰式参数名(如userName、orderId等) 示例方法: 2. 越权漏洞 参数值替换 替换用户标识参数(login、userid等)为其他用户信息 参数值枚举 使用Intruder等工具对ID类参数进行暴力枚举 IDOR(不安全的直接对象引用) 参数数值删除 :删除关键认证参数(token/user_ hash) HTTP参数污染(HPP) :发送多个同名不同值的参数混淆后端解析 示例: userid=123&userid=456 字段替换 :替换与个人信息相关的其他字段 3. 回显伪造(本地验证绕过) 获取验证码后输入错误验证码 拦截返回包,修改错误响应为正确响应 放行修改后的包完成绕过 4. 未授权访问 对管理接口参数进行Fuzzing: 使用参数字典进行系统化测试 5. JS信息接口Fuzzing 分析前端JS代码寻找隐藏接口和域名 常见发现: 敏感接口(可能存在越权) 隐藏测试域名(可能包含未加固的后台) 四、XXE注入Fuzzing 测试场景 任何XML解析场景: 数据提交包含XML结构 文件上传指定Excel/Word类型 测试方法 构造恶意XML实体: 尝试不同协议(file://, http://, gopher://等) 五、CSRF漏洞Fuzzing 1. JSONP劫持 2. CORS跨域问题 检查响应头包含: 或允许任意来源: 3. Flash跨域 检查crossdomain.xml配置: 六、SSRF与URL跳转Fuzzing 1. SSRF测试 基本测试: 协议利用: dict://127.0.0.1:port/info gopher://127.0.0.1:2333/_test file:///etc/passwd 2. URL跳转测试 直接修改跳转参数: 3. CRLF注入 基本原理:注入回车(%0d)换行(%0a)控制响应头 测试方法: 进阶利用: CRLF + XSS: 七、黑盒测试中的漏洞利用链 组合漏洞利用 文件上传+路径遍历: 严格限制的文件上传功能可能返回上传路径 结合其他功能的路径参数实现RCE 信息泄露+越权: 通过信息泄露获取敏感接口 对接口进行越权测试 Fuzzing策略 保持对每个参数和漏洞点的深度挖掘 注意功能组件间的关联性 尝试非常规的测试思路和角度 八、总结 Fuzzing技术在漏洞挖掘中具有不可替代的作用,通过系统化的测试方法和创造性的测试思路,可以发现在常规测试中难以发现的深层漏洞。关键在于: 对每个输入点保持怀疑态度 系统化地尝试各种变异方法 深入理解业务逻辑和技术实现 善于组合不同的测试技术和漏洞点 通过持续的实践和经验积累,Fuzzing技术将成为安全测试人员手中最强大的武器之一。