用户名密码加密的页面爆破学习
字数 1361 2025-08-10 19:49:14
用户名密码加密页面爆破技术详解
前言
随着网络安全意识的提高,越来越多的网站系统在登录接口和数据请求接口中加入各种加密算法,甚至有些网站在每次请求前都动态请求加密密钥。这些措施对传统的接口渗透工作造成了较大障碍。本文将详细介绍在登录接口暴力破解时,如何处理加密字段进行有效爆破。
常见方法和思路
1. JS加密本地执行
- 原理:找出进行密码参数加密的JS文件,将其导入本地动态执行
- 步骤:
- 建立小型web服务器
- 利用浏览器页面将JS运行起来
- 将账号密码发送给本地服务器
- 本地JS执行加密后将加密值返回给登录请求
2. Selenium WebDriver模拟
- 原理:利用Selenium WebDriver驱动浏览器,完全模拟用户操作
- 特点:
- 可以绕过前端加密
- 能处理复杂验证码
- 执行效率较低
3. 逆向加密算法
- 原理:分析JS中的加密算法,用熟悉语言实现相同加密
- 步骤:
- 逆向分析加密流程
- 编写等效加密代码
- 将加密代码嵌入爆破工具
4. 预加密字典
- 原理:提前将密码字典全部加密,生成加密字典
- 优点:
- 爆破时直接使用加密字典
- 减少实时加密开销
实例分析
实例1:AES加密登录页面
1. 发现加密
- 通过Burp抓包发现param1和param2参数值是加密后的
- 请求示例:
GET /login?param1=加密值¶m2=加密值
2. 分析加密过程
-
定位加密代码:
- 使用浏览器调试工具搜索关键字
- 找到ajax请求中的suser和spwd参数
- 发现调用
entryt.encrypt()函数
-
查找加密函数:
- 在另一个JS文件中找到函数定义
- 确认使用AES加密
- 获取key和iv:
- key:
1234567890abcdefghijklmnopqrstuv - iv:
1234567890abcdef
- key:
-
验证加密:
- 使用在线工具验证加密结果
- 注意输出编码问题(常见陷阱)
3. 编写加密工具
<!DOCTYPE html>
<script src="core-min.js"></script>
<script src="aes.js"></script>
<script src="jquery-2.0.2.min.js"></script>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>EncryptionStr</title>
</head>
<body>
<div>
<input type="file" name="file" multiple="multiple" id="files" onchange="choosefile()" />
<div id="name"></div>
<textarea id="text" cols="100" rows="50"></textarea>
</div>
<script type="text/javascript">
var entryt = {
encrypt: function (str, key, iv) {
if (!key || !iv) {
key = "1234567890abcdefghijklmnopqrstuv";
iv = "1234567890abcdef";
}
var _key = CryptoJS.enc.Utf8.parse(key);
var _iv = CryptoJS.enc.Utf8.parse(iv);
var srcs = CryptoJS.enc.Utf8.parse(str);
var encrypted = CryptoJS.AES.encrypt(srcs, _key, {
iv: _iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
}
}
function choosefile () {
var fileList = document.getElementById('files').files;
var nameStr = '';
for (var i = 0; i < fileList.length; i++) {
nameStr += `${i === 0 ? '' : ','}${fileList[i].name}`;
var reader = new FileReader();
reader.readAsText(fileList[i], "UTF-8");
reader.onload = function (e) {
var content = e.target.result;
const arr = content.split("\n");
for (var i=0;i<arr.length;i++) {
document.getElementById('text').value=document.getElementById('text').value+entryt.encrypt(arr[i])+"\n";
}
}
}
document.getElementById('name').append(nameStr);
}
</script>
</body>
</html>
4. 实施爆破
- 使用加密后的字典对用户名进行猜解
- 注意验证码重用问题(本例中验证码无效)
实例2:RSA加密登录页面
1. 发现加密
- 登录页面有滑块验证码(可重放)
- 查看源码发现登录按钮事件
2. 分析加密过程
-
跟踪调用链:
- 滑块验证后调用
this.onSuccess() - 其中调用
rsaEncrypt函数加密密码
- 滑块验证后调用
-
查找加密函数:
- 在
./secret.js文件中定义 - 获取RSA公钥和私钥
- 在
3. 实施爆破
- 编写脚本使用公钥加密密码字典
- 使用加密后的字典进行爆破
工具推荐:BurpCrypto插件
功能特点
- 默认集成AES加密模块
- 可自定义添加加密处理器
- 支持多种加密算法
配置步骤
- 添加Processor
- 选择加密算法(AES/RSA等)
- 配置密钥参数
- 应用到爆破模块
关键注意事项
- 编码问题:加密前后注意字符编码(常见UTF-8)
- 密钥获取:仔细分析JS获取完整密钥
- 验证码处理:确认验证码是否可重用
- 性能考量:实时加密vs预加密字典
- 法律合规:仅在授权范围内测试
总结
处理加密登录页面的爆破需要系统性地分析前端加密逻辑,选择合适的破解方法。通过JS逆向、算法重现或工具辅助,可以有效应对各种加密场景。实际测试中应根据具体情况选择最合适的方法,并注意测试的合法合规性。