通过 WebSockets 与复古浏览器绕过 AI Web Sandbox
Source: Dev.to
设置概览
我使用 Tampermonkey 用户脚本(MCP_v6_FULL_UNBLOCK.js 和 Gemini MCP v0.6)构建了一个环境,这些脚本会向 Claude、Gemini 和 ChatGPT 的网页界面注入 JavaScript。脚本拦截特定命令(例如 /[mcp] dir C:\ 或 /[mcp] Get-Process),并通过 WebSocket 将它们转发到本地 Node.js 服务器。
Tampermonkey 用户脚本
- MCP_v6_FULL_UNBLOCK.js
- Gemini MCP v0.6
这些脚本:
- 挂钩聊天 UI。
- 检测以
/[mcp]为前缀的命令。 - 将解析后的命令负载通过 WebSocket 连接发送到后端服务器。
Node.js 服务器(server.js)
服务器监听 9999 端口(可选通过 ngrok 对外暴露以实现远程访问),并实现 JSON‑RPC 协议,提供多个系统工具:
| 方法 | 描述 |
|---|---|
shell/exec | 执行任意 Shell/PowerShell 命令。 |
filesystem/read | 读取本地文件系统中的文件。 |
filesystem/write | 向本地文件系统写入文件。 |
vscode/open | 在 VS Code 中打开文件。 |
示例服务器代码片段
// server.js
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 9999 });
wss.on('connection', ws => {
ws.on('message', async msg => {
const request = JSON.parse(msg);
// Dispatch based on request.method …
});
});
这些操作的结果会通过 WebSocket 流回用户脚本,脚本随后将输出注入到 AI 聊天界面中。
复古浏览器(Zeno)
我还使用 Zeno Bro Web Core 创建了一个 iframe 复古浏览器。该浏览器的沙箱限制极少,使得 AI 更难检测到它运行在普通浏览器环境中,从而更接近原生系统访问。
测试结果
在对 Claude 的一次测试中,AI 在我的机器上盲目执行了数分钟的 PowerShell 命令,直至我介入并告知其正在进行的活动。随后 Claude 停止执行并报告“无法继续”。系统仍然有不少粗糙之处,需要进一步打磨,但实验表明仍有空间进一步突破限制。
截图
- ngrok 隧道状态(已激活)
- Zeno 浏览器窗口运行中
- Gemini 界面已连接 MCP
- 浏览器中加载的 Tampermonkey 脚本
(此 markdown 版本中省略了截图。)