记一次前端加解密到sql注入过waf的实战
字数 1196 2025-08-10 08:28:27
前端加解密到SQL注入绕过WAF实战教学文档
1. 背景概述
本文记录了一次从前端加密参数分析到最终实现SQL注入绕过WAF的完整实战过程。攻击者通过分析前端JavaScript加密逻辑,构造特殊加密参数,成功绕过了网站的安全防护机制。
2. 关键知识点
2.1 前端加密分析
-
加密参数定位:
- 通过浏览器开发者工具(F12)的Network面板观察请求参数
- 发现关键参数
data被加密处理
-
加密逻辑逆向:
- 在Sources面板查找加密相关JavaScript代码
- 定位到加密函数
encryptData,使用AES加密算法 - 加密前会对参数对象进行属性排序(关键点)
2.2 Node.js执行环境搭建
-
为什么需要Node.js:
- 直接复制JS代码可能缺失依赖函数
- 需要完整执行环境还原加密逻辑
- 特别是当存在对象属性排序等复杂操作时
-
操作步骤:
// 1. 从浏览器复制完整加密函数及相关依赖 // 2. 创建Node.js脚本文件 // 3. 补全缺失函数或模块 // 4. 导出加密函数供外部调用
2.3 加密参数构造
-
参数排序逻辑:
- JavaScript对象属性按特定顺序排列
- 必须确保Python与JS排序结果一致
- 示例排序函数:
function sortObject(obj) { return Object.keys(obj).sort().reduce((acc, key) => { acc[key] = obj[key]; return acc; }, {}); }
-
加密流程:
- 构造原始参数对象
- 按规则排序属性
- 进行AES加密
- Base64编码输出
2.4 SQL注入构造
-
WAF绕过技巧:
- 利用前端加密使WAF无法识别明文SQL语句
- 通过加密参数传递恶意负载
- 后端解密后直接拼接SQL导致注入
-
典型Payload:
{ "id": "1' UNION SELECT username, password FROM users-- " }
3. 完整攻击流程
3.1 信息收集阶段
- 使用浏览器开发者工具分析请求
- 识别加密参数和加密逻辑
- 收集必要的JavaScript函数
3.2 加密环境搭建
- 安装Node.js环境
- 创建加密脚本文件
- 测试加密函数能否正确执行
3.3 注入测试
- 构造明文SQL注入语句
- 通过加密函数生成加密参数
- 发送恶意请求测试效果
- 根据响应调整Payload
4. 防御建议
-
前端加密:
- 不要依赖前端加密作为安全措施
- 前端加密应仅用于传输保护
-
后端处理:
- 对解密后的参数进行严格验证
- 使用参数化查询而非字符串拼接
- 实施最小权限原则
-
WAF配置:
- 在解密后对参数进行检测
- 部署RASP进行运行时防护
5. 工具与资源
-
HaE插件自定义规则:
- 可配置常见漏洞关键字如:
- SQL注入:
union select,sleep(,information_schema - XSS:
alert(,<script>,onerror= - 文件包含:
../,file://,php://
- SQL注入:
- 可配置常见漏洞关键字如:
-
其他工具:
- Burp Suite用于请求拦截和重放
- Node.js用于执行前端加密逻辑
- Python requests库构造恶意请求
6. 总结
本案例展示了从前端加密分析到最终绕过WAF实现SQL注入的完整链条。关键在于理解整个数据流和处理逻辑,特别是加密前后的数据处理过程。防御此类攻击需要前后端协同防护,不能仅依赖单一安全措施。