某后台管理系统加密参数逆向分析
字数 1560 2025-08-18 11:36:53
后台管理系统加密参数逆向分析教学文档
1. 前言
在渗透测试过程中,经常会遇到登录框对账号密码进行加密处理的情况。本文通过一个带验证码的后台实战案例,详细讲解如何分析前端加密逻辑并绕过加密进行暴力破解。
2. 发包逻辑分析
2.1 初始发现
- 目标:一个带有验证码的后台登录系统
- 测试方法:输入任意账号密码和验证码进行抓包
- 发现:提交错误验证码时返回"验证码错误"提示,确认抓到的数据包是校验数据包
2.2 参数分析
- 明文参数:账号(username)、验证码(captcha)
- 加密参数:密码(password)
3. 加密定位
3.1 搜索加密关键词
- 在开发者工具中搜索"password"关键词
- 发现一个带有"login"的js文件
- 文件中找到10个"password"关键词,全部打上断点
3.2 断点调试
- 断点在196行触发:
t.param.password是明文 - 经过
Object(i["a"])函数处理后变为密文 - 结论:
Object(i["a"])就是加密函数
4. 加密函数分析
4.1 进入加密函数
- 函数内部有一个
s函数 - 在156行下断点观察:
- 输入:明文密码
- 输出:加密后的密文
4.2 关键发现
- 代码中出现"93a9"和"7d92"等模块标识
- 确认站点使用WebPack打包技术
5. WebPack打包技术解析
5.1 WebPack基本概念
- 基于模块化的打包(构建)工具,将所有资源视为模块
- 功能:通过loader和plugins处理资源,打包成生产环境部署的前端资源
5.2 WebPack打包特点
- 多个JS文件打包成一个
- 定义全局变量
window["webpackJsonp"]存储动态导入模块 - 重写
window["webpackJsonp"].push()方法为webpackJsonpCallback()
5.3 加载器识别
- 加载器通常使用
call或apply方法 - 查找类似
i("1ff3")的调用 - 常见加载器特征:使用
call方法调用模块
6. 扣取加密代码
6.1 获取加载器
- 找到使用
call函数的代码段(如d函数) - 复制整个WebPack代码段
6.2 环境准备
var window = {}; // 补全window对象
var 君主; // 定义全局变量
6.3 模块补全
- 初始调用"7d92"模块失败,提示模块缺失
- 解决方法:
- 从原始js文件中找到缺失模块
- 将模块代码复制到加载器的模块数组中
- 常见缺失模块:
- "1ff3"模块
- "f28c"模块(位于chunk-vendors.db1c4c0d.js)
- "143d"、"93a9"、"ea6a"模块(位于donate~login.06871226.js)
6.4 最终调用
补全所有缺失模块后,可以成功调用加密函数生成密文。
7. 加密绕过与暴力破解
7.1 加密流程总结
- 明文密码通过
s函数处理 - 处理过程依赖多个WebPack模块
- 最终输出加密后的密码
7.2 暴力破解方案
- 在本地复现加密过程
- 将字典中的密码逐一加密
- 使用加密后的密码进行暴力破解
8. 关键点总结
- 参数定位:通过抓包确认加密参数和明文参数
- 加密函数定位:通过关键词搜索和断点调试找到加密函数
- WebPack分析:识别打包技术,理解模块加载机制
- 代码扣取:补全缺失的模块和环境变量
- 加密复现:在本地复现加密过程用于暴力破解
9. 防御建议
- 不要仅依赖前端加密,后端必须进行二次验证
- 使用更复杂的加密方案,如非对称加密
- 增加请求频率限制和验证码机制
- 对异常登录尝试进行监控和报警
10. 工具与技巧
- 浏览器开发者工具(断点调试)
- 全局搜索功能定位关键代码
- WebPack模块分析技巧
- JavaScript环境补全方法
通过以上步骤,可以有效地分析前端加密逻辑并绕过加密限制进行安全测试。