用户名密码加密的页面爆破学习

本文探讨了在网站登录接口加密日益复杂的背景下,如何通过分析加密算法、动态导入js、模拟浏览器操作、破解加密逻辑等方式对加密的登录参数进行暴力破解。重点介绍了AES和RSA加密的处理方法,以及使用BurpCrypto插件提高破解效率的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

目前越来越多的网站系统在登录接口、数据请求接口中加入各式各样的加密算法,甚至有些网站在每次请求前都动态请求加密密钥等措施,对接口渗透工作造成较大障碍,本文简单对登录接口暴力破解时字段被加密,如何处理加密内容进行暴破来进行一个简单的分享。

常见方法和思路

1、分析找出是哪个js文件进行了password参数值的加密,将该js导入本地动态执行,建一个小型的web服务器,利用浏览器页面将js运行起来,把账号密码发给本地这个服务器,然后本地js执行加密之后把加密的值再给登录的请求,实现普通的发包爆破。

2、利用selenium webdriver,本地驱动一个浏览器,完全模拟浏览器的操作,实现浏览器自动登录爆破.

3、通过对js里的加密算法进行破解,或者是理清加密流程,然后利用自己熟知的编程语言实现同样的加密方式,写一个效果一样的加密方式,然后把代码嵌入到发包爆破代码里,这种方式字典里账号密码传入的时候,先进行加密再传给登录请求。

4、利用前面的方法,把密码字典全部加密之后生成对应加密字典,然后普通发包爆破的时候传入加密的字典。

实例1

工作中遇到的一个登录页面,发现登录账号密码都是经过js加密之后再请求发送(通过抓包可以看到加密信息)

用户名密码加密的页面爆破学习

burp抓到的包,request的GET的登录包,很明显可以看到param1,param2参数的值是经过前端加密之后再进行传输的,遇到这种情况,普通发包的爆破脚本就很难爆破成功,本次页面中存在滑动验证码,通过burp重放尝试发现该验证码无效。

用户名密码加密的页面爆破学习

存在验证码重用的问题,但是请求加密了不能直接进行爆破。所以我们需要分析前端加密代码逻辑。

根据关键字快速定位加密字段

打开浏览器调试模式,根据请求包的关键字在js脚本中进行搜索进帮助我们快速定位,定位到一个ajax请求

用户名密码加密的页面爆破学习

该请求中使用了suser 字段和spwd参数,在js中继续寻找参数出现的位置,找到如下代码

用户名密码加密的页面爆破学习

可以看到调用了entryt.encrypt()函数对输入的用户密码进行了加密处理,继续寻找函数定义位置,发现在另一个js中进行的定义

用户名密码加密的页面爆破学习

一眼看过去,采用AES加密,key 和iv 都有了,使用在线的加密工具验证一下,登录页面中用户名密码均填写tide,传输中的加密字段为4942b13dc0e541615f52f0a3cb4b321f,用户名密码采用相同的加密算法,

用户名密码加密的页面爆破学习

AES加密验证:4942b13dc0e541615f52f0a3cb4b321f,在实际测试过程中因为输出编码没有修改这里绕了一个大圈,以为是不对的见下图,实验过程中是从页面中继续提取JS进行的测试,

用户名密码加密的页面爆破学习

正确输出方式

用户名密码加密的页面爆破学习

此时可通过Python脚本对字典通过该加密方式进行加密后破解,如果验证不正确的话可以继续在前台页面中寻找加密的js代码通过加载js进行加密,本次实验我们继续在页面查找具体加密的js文件,找到包含CryptoJS的js文件如下

用户名密码加密的页面爆破学习

aes算法的js

用户名密码加密的页面爆破学习

编写脚本加密字典

编写一个html页面使用站点前台的js文件对字典文件进行加密,html代码如下:

``
<!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


```

加密用户名字典效果如下:

用户名密码加密的页面爆破学习

使用加密后的字典对用户名进行猜解

用户名密码加密的页面爆破学习

实例2

遇到如下登录页面,点击登录的时候也存在滑块验证码,但经过测试该数据包仍可重放。

用户名密码加密的页面爆破学习

同样,查看页面源码页面发现存在登录按钮事件

用户名密码加密的页面爆破学习

继续查找登录按钮事件找到滑块验证结束后会调用this.onSuccess()函数

用户名密码加密的页面爆破学习

this.onSuccess()函数如下,可以看到在对密码加密过程中调用了rsaEncrypt函数

用户名密码加密的页面爆破学习

通过引用文件找到rsaEncrypt在./secret.js 文件中定义

用户名密码加密的页面爆破学习

最终找到RES加密算法的公钥和私钥,可通过编写脚本使用该公钥对密码字典进行加密后爆破

用户名密码加密的页面爆破学习

工具提高生产力

「使用 BurpCrypto 插件」

通过上面的分析已经知道登录页面使用了AES加密,BurpCrypto 默认集成了AES加密模块,

先添加一个Processor

用户名密码加密的页面爆破学习

Processor选择我们刚才添加的

用户名密码加密的页面爆破学习

最总效果

用户名密码加密的页面爆破学习

RAS算法配置

用户名密码加密的页面爆破学习

### 关于 Burp Suite 弱口令爆破时抓包内容中密码字段缺失的解决方案 在使用 Burp Suite 进行弱口令爆破的过程中,如果发现抓包内容中未显示密码字段,可能是由于以下几个原因造成的: #### 1. **HTTP 请求头中的 Authorization 字段被编码** 当目标应用采用 HTTP Basic Authentication 机制时,用户名密码会被 Base64 编码并存储在请求头的 `Authorization` 字段中。因此,在抓包过程中看到的是经过编码后的字符串而非明文密码。 在这种情况下,可以通过解码 `Authorization` 字段来验证其内容是否正确[^1]。具体操作如下: - 截获包含 `Authorization` 的请求。 - 将该字段值(去掉前缀 `Basic ` 后的部分)通过工具或脚本进行 Base64 解码。 以下是 Python 实现 Base64 解码的一个简单示例: ```python import base64 encoded_str = "YWRtaW46cGFzc3dvcmQ=" # 示例编码串 decoded_bytes = base64.b64decode(encoded_str) print(decoded_bytes.decode('utf-8')) # 输出 admin:password ``` #### 2. **前端 JavaScript 加密处理** 某些应用程序会在客户端对密码进行额外的加密或哈希计算后再发送到服务器端。这种情况下,即使捕获到了数据包,也可能看不到原始密码字段[^3]。 针对这种情况可以采取以下措施之一: - 使用浏览器开发者工具分析页面上的 JavaScript 文件及其执行逻辑,找到具体的加密算法实现方式; - 修改 HTML/CSS/JavaScript 来禁用或者绕过这些安全控制流程;不过这种方法可能会违反法律条款,请谨慎行事! 另外还可以借助自动化测试框架如 Selenium 模拟真实用户的交互行为完成登录过程而无需关心内部细节。 #### 3. **后端 API 设计隐藏敏感信息** 有些开发人员为了保护隐私会设计成仅返回成功与否的状态码而不暴露任何有关失败原因的具体描述(比如错误账号还是错密码),这样也会造成我们在查看响应体的时候找不到对应的提示消息从而误以为缺少了必要的参数项。 此时应该仔细检查整个通信链路是否存在其他形式的数据交换模式,并确认所使用的 Payload 是否完全匹配预期格式以及位置关系等等[^2]。 --- ### 总结 综上所述,解决 Burp Suite 中弱口令爆破时遇到的密码字段丢失现象可以从多个角度入手:一是关注网络层面上是否有特殊协议转换导致的内容变化;二是深入挖掘前端层面可能存在的预处理动作影响最终提交给服务端的实际数值;最后还要考虑到程序架构本身的设计理念差异所带来的不同表现特征。 希望上述解答能帮助您更有效地定位问题所在并顺利开展渗透测试工作!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值