通过分析前端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/json、text/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:自动化扫描和手动测试结合