一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

基于Chrome MCP和AI的红队自动化加解密工作流

时间:2026-07-26 10:13:57 编辑:袖梨 来源:一聚教程网

原文首发在:奇安信攻防社区

https://forum.butian.net/ai_security/188

基于Chrome MCP与AI的红队自动化加解密工作流

当目标登录接口被AES-CBC与SM2双重加密,传统爆破工具彻底失效。本文提出一种红队工作流:Chrome MCP自动化逆向提取密钥 AI生成加密Payload BurpSuite jsrpc实时加解密,将前端加密防线转化为进攻通道

# 基于Chrome MCP与AI的红队自动化加解密工作流

一、研究背景与攻击动机

随着前端加密技术的全面普及,红队测试正面临前所未有的挑战。目标系统的登录接口不再接收明文凭证,取而代之的是经过AES-CBC对称加密或SM2国密算法处理后的密文载荷。部分高安全等级系统甚至采用双重加密策略——先以SM2加密对称密钥,再以AES-CBC加密业务数据,形成多层防护体系。

这一趋势直接导致传统攻击工具体系的结构性失效:

|工具/方法|失效原因|表现|

|:-:|:-:|:-:|

|BurpSuite Intruder|无法生成合法密文|所有爆破请求返回400/403|

|Hydra/Medusa|不支持加密预处理|无法与目标协议握手|

|自定义字典攻击|明文载荷被服务端拒收|无有效响应|

|自动化扫描器|缺乏加密载荷生成能力|完全丧失探测功能|

红队迫切需要一套能够穿透前端加密黑箱、自动化完成密钥提取与请求伪造的技术方案。本文基于Chrome DevTools MCP、AI逆向分析与BurpSuite jsrpc,构建了一条端到端的自动化加解密攻击链路,将前端加密防线转化为进攻通道。

二、双重加密的技术剖析

### 2.1 常见的双重加密架构

高安全等级系统通常采用混合加密方案,兼顾安全性与性能:

```

┌─────────────────────────────────────────────────────────────┐

│ 客户端加密流程 │

├─────────────────────────────────────────────────────────────┤

│ │

│ 明文数据 ──→ AES-CBC加密 ──→ Base64编码 ──→ 请求体 │

│ ↑ │

│ │ │

│ AES密钥 ──→ SM2公钥加密 ──→ 密钥密文 ──→ 请求头 │

│ │

└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐

│ 服务端解密流程 │

├─────────────────────────────────────────────────────────────┤

│ │

│ 密钥密文 ──→ SM2私钥解密 ──→ AES密钥 │

│ ↓ │

│ 请求体 ──→ Base64解码 ──→ AES-CBC解密 ──→ 明文数据 │

│ │

└─────────────────────────────────────────────────────────────┘

```**第一层:非对称加密(SM2/RSA)** — 保护对称密钥的传输安全。前端使用服务端分发的公钥加密AES密钥,确保只有持有私钥的服务端能够解密。

**第二层:对称加密(AES-CBC)** — 保护业务数据的机密性与完整性。使用随机生成的AES密钥加密请求体,密钥本身被非对称加密保护。

这一架构的理论安全性在于:攻击者即使截获完整请求,在没有SM2私钥的情况下也无法解密AES密钥,进而无法还原明文数据。

### 2.2 攻击面的重新审视

然而,从红队视角看,这一架构存在一个根本性的脆弱点——**加密过程完全发生在客户端**。

这意味着:

- 加密算法实现、公钥、IV等所有密码学参数均存在于前端代码中

- 加密函数是JavaScript运行时中可被调用的公开接口

- 攻击者可以**直接调用前端加密函数**,而非自行实现算法

这一洞察构成了本文攻击方法论的核心:与其逆向算法,不如重用算法;与其提取密钥,不如调用函数。

三、自动化攻击架构

### 3.1 整体工作流

本文提出的自动化攻击链路由三个核心组件协同完成:

```

┌─────────────────────────────────────────────────────────────┐

│ 阶段一:密钥与逻辑提取 │

├─────────────────────────────────────────────────────────────┤

│ │

│ Chrome MCP ──→ 自动导航登录页 │

│ ↓ │

│ AI自动分析 ──→ 定位加密函数、提取公钥/AES密钥/IV │

│ ↓ │

│ jsrpc注入 ──→ 将加密函数暴露为全局可调用接口 │

│ │

└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐

│ 阶段二:载荷自动生成 │

├─────────────────────────────────────────────────────────────┤

│ │

│ AI生成Payload ──→ SQL注入/XSS/越权测试载荷 │

│ ↓ │

│ 调用原生加密函数 ──→ 通过jsrpc调用浏览器内加密 │

│ ↓ │

│ 生成合法密文 ──→ 可直接提交的有效请求 │

│ │

└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐

│ 阶段三:BurpSuite集成 │

├─────────────────────────────────────────────────────────────┤

│ │

│ BurpSuite插件 ──→ 拦截请求,识别待加密字段 │

│ ↓ │

│ jsrpc调用 ──→ 将明文载荷发送至浏览器加密 │

│ ↓ │

│ 替换密文 ──→ 自动完成请求加密并转发 │

│ │

└─────────────────────────────────────────────────────────────┘

```### 3.2 Chrome MCP:自动化逆向的抓手

Chrome DevTools MCP作为MCP协议的浏览器控制实现,使AI能够程序化地操作Chrome浏览器。在攻击流程中,MCP承担以下任务:

**任务一:自动导航与状态准备**

```

// AI通过MCP执行的自动化操作序列

1.navigate_to("https://target.com/login")

2.wait_for_element("#username", timeout=5000)

3.fill_input("#username","test_user")

4.fill_input("#password","任意测试密码")

5.click_button("登录")

6.capture_network_request("/api/login")

```**任务二:加密函数定位**

```

// AI在控制台执行的代码

// 搜索加密相关全局对象

constcryptoKeys =Object.keys(window).filter(k=>

k.toLowerCase().includes('encrypt') ||

k.toLowerCase().includes('sm2') ||

k.toLowerCase().includes('aes')

);

console.log('候选加密对象:', cryptoKeys);

// 遍历Vue/React组件树查找加密服务

constapp =document.querySelector('#app').__vue_app__;

constcryptoService = app.config.globalProperties.$crypto;

```**任务三:参数提取**

```

// 断点提取密钥与IV

debugger;

// 在加密函数入口处执行

console.log('AES Key:', key);

console.log('IV:', iv);

console.log('SM2 Public Key:', publicKey);

```### 3.3 AI驱动的加密逻辑分析

AI模型在接收到MCP捕获的请求和源码后,执行以下分析流程:

**第一步:加密类型识别**

|特征|判定|后续动作|

|:-:|:-:|:-:|

|密文以`04`开头,长度130 字符|SM2|提取公钥,准备SM2加密调用|

|密文为Base64,解码后长度16倍数|AES-CBC|提取Key和IV,确认填充模式|

|同时存在两种密文|双重加密|定位密钥封装与数据加密的两层逻辑|

**第二步:调用链追踪**

AI通过MCP的`evaluate_script`能力,在浏览器中执行JavaScript以追踪加密调用栈:

```

// 注入Hook,拦截所有加密相关调用

constoriginalEncrypt =window.encryptFunction;

window.encryptFunction =function(...args){

console.trace('Encrypt called with:', args);

debugger;// 触发断点,供AI分析上下文

returnoriginalEncrypt.apply(this, args);

};

```**第三步:自动化脚本生成**

AI根据分析结果,自动生成jsrpc注入脚本,将加密函数暴露给外部BurpSuite调用。

### 3.4 jsrpc:浏览器与BurpSuite的加密桥梁

jsrpc技术的核心是在浏览器内维持一个常驻的加密服务,通过WebSocket或HTTP与BurpSuite插件通信。

**浏览器端注入脚本**:

```

// 通过Chrome MCP注入

(function(){

// 定位原始加密函数

constaesKey ="7f3a8b2c5d1e9f4a";

constiv ="3c5f7a9b1d3e5f7a";

constsm2PublicKey ="04b9364f5c8a3e2d...";

// 封装加密接口

window.encryptService = {

// AES-CBC加密

aesEncrypt:function(plaintext){

constencrypted = CryptoJS.AES.encrypt(plaintext,

CryptoJS.enc.Utf8.parse(aesKey), {

iv: CryptoJS.enc.Utf8.parse(iv),

mode: CryptoJS.mode.CBC,

padding: CryptoJS.pad.Pkcs7

});

returnencrypted.ciphertext.toString(CryptoJS.enc.Base64);

},

// SM2加密

sm2Encrypt:function(plaintext){

returnSM2Utils.encrypt(sm2PublicKey, plaintext);

},

// 双重加密:SM2封装密钥 AES加密数据

doubleEncrypt:function(plaintext){

constsessionKey =this.generateSessionKey();

constencryptedKey =this.sm2Encrypt(sessionKey);

constencryptedData =this.aesEncryptWithKey(plaintext, sessionKey);

return{

key: encryptedKey,

data: encryptedData

};

}

};

// 启动RPC服务

constws =newWebSocket("ws://localhost:8080/encrypt");

ws.onmessage =function(msg){

constrequest =JSON.parse(msg.data);

constresult =window.encryptService[request.method](request.payload);

ws.send(JSON.stringify({id: request.id,result: result }));

};

})();

```**BurpSuite插件端**:

插件拦截请求后,识别需要加密的字段,将明文通过WebSocket发送至浏览器加密,接收密文后替换原请求内容。

## 四、实战案例:突破双重加密登录接口

### 4.1 目标分析

某企业后台系统的登录接口采用双重加密架构:

**请求格式**:

```

POST /api/auth/login HTTP/1.1

Host: admin.target.com

Content-Type: application/json

{

"key":"04a3b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4",

"data":"xK8rP4sL2mN9qR5tY7uW1iE3aG6bH8jK0lZ2xC4vB6nM8pQ0rS2tU4vW6xY8zA0bC2dE4fG6hI8jK0lL2mN4oP6qR8sT0uV2wX4yZ6",

"timestamp":1704067200

}

```其中:

- `key`字段:SM2加密的AES会话密钥

- `data`字段:AES-CBC加密的业务数据(包含username/password)

- `timestamp`:时间戳(明文)

### 4.2 红队工作流执行

**步骤一:Chrome MCP自动化逆向**

使用以下提示词驱动AI完成自动化分析:

```

使用 Chrome DevTools MCP js-reverse-automation Skill 对目标站点进行深度登录逆向分析。

目标:

完整分析登录接口的双重加密逻辑,包括SM2公钥提取、AES密钥生成方式、参数构造流程。

目标站点:

https://admin.target.com/login

任务:

1. 自动打开登录页,填写测试账号 admin / 123456

2. 抓取登录请求,识别 key 和 data 字段的生成逻辑

3. 在 Sources 中定位加密函数,判断是否使用 SM2 AES-CBC 双重加密

4. 提取 SM2 公钥、AES 密钥生成算法、IV 固定值或生成方式

5. 自动生成 jsrpc 注入脚本,将加密函数暴露为外部可调用接口

```**步骤二:AI自动定位加密逻辑**

AI通过MCP执行以下定位代码:

```

// 搜索SM2相关对象

window.sm2;// 输出: {encrypt: ƒ, decrypt: ƒ, utils: {…}}

// 搜索AES加密调用

// 在network面板的initiator中追踪到 encryptRequest 函数

functionencryptRequest(params){

constsessionKey = generateRandomKey(16);// 随机AES密钥

constencryptedKey = sm2.encrypt(publicKey, sessionKey);

constencryptedData = aesCbcEncrypt(JSON.stringify(params), sessionKey, iv);

return{key: encryptedKey,data: encryptedData };

}

```**关键发现**:

- AES密钥**每次请求随机生成**,无法通过静态提取获得

- 但加密函数**完全暴露在客户端**,可被直接调用

- IV为**固定值** `3c5f7a9b1d3e5f7a`

**步骤三:jsrpc注入与BurpSuite集成**

AI自动生成注入脚本,将`encryptRequest`函数暴露为RPC服务:

```

// 注入脚本

window.rpc = {

encryptLogin:function(username, password, timestamp){

constparams = {

username: username,

password: password,

timestamp: timestamp

};

returnwindow.encryptRequest(params);

}

};

```BurpSuite插件配置为:拦截登录请求 → 提取明文字段 → 通过WebSocket调用`rpc.encryptLogin` → 替换`key`和`data`字段。

**步骤四:自动化攻击测试**

完成集成后,红队可以在BurpSuite Intruder中直接使用明文词典:

|明文字典|自动加密后|攻击效果|

|:-:|:-:|:-:|

|`admin' OR '1'='1`|合法SM2 AES密文|SQL注入探测|

|`admin` 密码字典|每个请求独立加密|身份爆破|

|`../../etc/passwd`|合法密文|路径遍历测试|

## 五、攻击技术深度解析

### 5.1 为什么“调用加密函数”优于“复现加密算法”

|对比维度|传统逆向复现|jsrpc调用原生函数|

|:-:|:-:|:-:|

|算法复杂度|需完整逆向算法实现|无需理解算法细节|

|密钥提取|需从内存/源码提取|函数内部自动处理|

|动态密钥|无法处理随机生成场景|原生支持,每次调用自动生成|

|维护成本|目标更新需重新逆向|浏览器自动加载最新版本|

|准确率|可能存在实现偏差|100%与真实请求一致|

### 5.2 绕过加密边界的本质

这一方法论的本质在于:**将加密边界从“客户端-服务端之间”重新定义为“浏览器-攻击工具之间”**。

传统视角下,加密边界是客户端与服务端的协议边界,攻击者被隔离在密文空间之外。而通过jsrpc,攻击工具被“接入”浏览器内部,与加密函数处于同一信任域,从而获得明文操作能力。

```

传统攻击模型:

攻击工具 --(明文)--> [加密边界] --(密文)--> 服务端

攻击者无法穿透

本文攻击模型:

攻击工具 --(明文)--> jsrpc --(明文)--> 浏览器加密函数 --(密文)--> 服务端

攻击工具与加密函数同处信任域

```### 5.3 对抗前端混淆与代码加密

面对经过Obfuscator.io等工具混淆的前端代码,AI可通过以下策略突破:

1. **运行时追踪而非静态分析**:通过MCP触发实际加密调用,观察输入输出关系

2. **Hook关键API**:拦截`Function.prototype.call`、`eval`等动态执行函数

3. **内存快照分析**:在加密函数执行后读取闭包变量值

六、防御视角的思考

从蓝队角度,理解这一攻击手法有助于构建有效的防御措施:

### 6.1 服务端加固方案

|问题|攻击方式|防御方案|

|:-:|:-:|:-:|

|加密函数可被外部调用|jsrpc远程调用|增加环境指纹校验(检测WebSocket外连)|

|请求可被重放|拦截合法请求并替换载荷|绑定请求时间戳 一次性Nonce|

|加密算法完全暴露|攻击者直接调用|将核心加密逻辑迁移至服务端(如WebCrypto 签名)|

### 6.2 检测jsrpc攻击的特征

蓝队可通过以下指标检测自动化加密攻击:

- **WebSocket外连**:浏览器向localhost或非业务域名发起WebSocket连接

- **异常的函数调用模式**:加密函数在短时间内被高频调用(超出正常用户行为)

- **Headless浏览器特征**:检测`navigator.webdriver`、`--headless`等自动化标记

七、总结

本文提出并验证了一套突破前端双重加密防线的自动化红队工作流。核心结论如下:

|组件|作用|关键价值|

|:-:|:-:|:-:|

|Chrome MCP|自动化导航、代码定位、断点调试|将人工逆向转化为程序化操作|

|AI分析引擎|加密类型识别、函数定位、脚本生成|数分钟完成数小时的逆向工作|

|jsrpc BurpSuite|保持浏览器加密上下文,实时加解密|将明文攻击载荷自动转换为合法密文|

这一工作流的根本性突破在于:**不再试图“破解”加密,而是“接入”加密**。通过将攻击工具置于与加密函数相同的信任域,前端加密防线被转化为进攻通道。 对于红队而言,这意味着即使面对SM2 AES-CBC双重加密、随机密钥、代码混淆等高级防护,攻击链路依然可自动化完成。对于蓝队而言,这提醒我们:真正的安全边界不在于前端加密的强度,而在于服务端对请求合法性校验的完备性——包括环境指纹、行为模式、请求完整性的多维度验证。","createTime":1782116144,"ext":{"closeTextLink":0,"comment_ban":0,"description":"","focusRead":0},"favNum":0,"html":"","isOriginal":0,"likeNum":0,

热门栏目