某后台管理系统加密参数逆向分析
字数 1560 2025-08-18 11:36:53

后台管理系统加密参数逆向分析教学文档

1. 前言

在渗透测试过程中,经常会遇到登录框对账号密码进行加密处理的情况。本文通过一个带验证码的后台实战案例,详细讲解如何分析前端加密逻辑并绕过加密进行暴力破解。

2. 发包逻辑分析

2.1 初始发现

  • 目标:一个带有验证码的后台登录系统
  • 测试方法:输入任意账号密码和验证码进行抓包
  • 发现:提交错误验证码时返回"验证码错误"提示,确认抓到的数据包是校验数据包

2.2 参数分析

  • 明文参数:账号(username)、验证码(captcha)
  • 加密参数:密码(password)

3. 加密定位

3.1 搜索加密关键词

  1. 在开发者工具中搜索"password"关键词
  2. 发现一个带有"login"的js文件
  3. 文件中找到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 加载器识别

  • 加载器通常使用callapply方法
  • 查找类似i("1ff3")的调用
  • 常见加载器特征:使用call方法调用模块

6. 扣取加密代码

6.1 获取加载器

  1. 找到使用call函数的代码段(如d函数)
  2. 复制整个WebPack代码段

6.2 环境准备

var window = {}; // 补全window对象
var 君主; // 定义全局变量

6.3 模块补全

  1. 初始调用"7d92"模块失败,提示模块缺失
  2. 解决方法:
    • 从原始js文件中找到缺失模块
    • 将模块代码复制到加载器的模块数组中
  3. 常见缺失模块:
    • "1ff3"模块
    • "f28c"模块(位于chunk-vendors.db1c4c0d.js)
    • "143d"、"93a9"、"ea6a"模块(位于donate~login.06871226.js)

6.4 最终调用

补全所有缺失模块后,可以成功调用加密函数生成密文。

7. 加密绕过与暴力破解

7.1 加密流程总结

  1. 明文密码通过s函数处理
  2. 处理过程依赖多个WebPack模块
  3. 最终输出加密后的密码

7.2 暴力破解方案

  1. 在本地复现加密过程
  2. 将字典中的密码逐一加密
  3. 使用加密后的密码进行暴力破解

8. 关键点总结

  1. 参数定位:通过抓包确认加密参数和明文参数
  2. 加密函数定位:通过关键词搜索和断点调试找到加密函数
  3. WebPack分析:识别打包技术,理解模块加载机制
  4. 代码扣取:补全缺失的模块和环境变量
  5. 加密复现:在本地复现加密过程用于暴力破解

9. 防御建议

  1. 不要仅依赖前端加密,后端必须进行二次验证
  2. 使用更复杂的加密方案,如非对称加密
  3. 增加请求频率限制和验证码机制
  4. 对异常登录尝试进行监控和报警

10. 工具与技巧

  1. 浏览器开发者工具(断点调试)
  2. 全局搜索功能定位关键代码
  3. WebPack模块分析技巧
  4. JavaScript环境补全方法

通过以上步骤,可以有效地分析前端加密逻辑并绕过加密限制进行安全测试。

后台管理系统加密参数逆向分析教学文档 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 环境准备 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环境补全方法 通过以上步骤,可以有效地分析前端加密逻辑并绕过加密限制进行安全测试。