nodriver-proxy-mcp
Give your AI agent a browser, a proxy, and a Python sandbox.
It navigates like a human, intercepts like Burp, and codes its own exploits on the fly.
______________________________________________________________________
为什么存在
现有的安全MCP服务器为AI提供了对流量的只读访问权限,或者只是包装CLI工具。这个给 完全自主控制:代理打开一个浏览器 绕过机器人检测,通过 MITM代理,当内置工具不够时,它 编写并运行自己的Python 把一切联系在一起。
"Scan target.com for IDOR vulnerabilities"
1. Agent starts proxy + browser
2. Navigates to login page, types credentials, clicks submit
3. Captures the auth flow, extracts the JWT
4. Replays API requests with different user IDs
5. Writes a Python script to automate the full IDOR check
6. Reports which endpoints are vulnerable没有人触摸键盘。代理通过39个MCP工具完成所有操作。
______________________________________________________________________
为什么戊酯应该注意
它能做什么是Burp/ZAP做不到的?
| Burp Suite/ZAP | nodrever代理mcp | |
|---|---|---|
| 谁开车? | 你手动点击 | 人工智能会自动完成所有事情 |
| 机器人检测 | 被Cloudflare、DataDome等屏蔽。 | 自动旁路(nodrever) |
| 脚本编写 | 自己编写扩展/宏 | AI可以动态编写Python脚本,并通过SDK访问所有38个工具 |
| 客户端数据 | 不可见 | 读取本地存储、会话存储、JS控制台、DOM隐藏输入 |
| 他们能一起工作吗? | -- | 是的--用链子穿过Burp upstream="localhost:8080" |
它能做什么是其他安全MCP服务器不能做的?
大多数安全MCP服务器只是包装 curl 或只读流量查看器。这个有:
- 真正的mitmproxy --完整的流量记录、回放、模糊测试、拦截规则、会话变量。不是简化的HTTP客户端。
- 修改流量的两种方法 --浏览器级别(即时,CDP Fetch)或代理级别(系统范围,所有HTTP客户端)。其他MCP都不提供。
- 使用SDK的代码模式 --人工智能编写了一个在沙盒中运行的Python脚本,在循环中调用29个工具
asyncio比赛条件、盲SQLi和需要数千次MCP往返的蛮力在几秒钟内完成。
它擅长什么
| 用例 | 代理如何处理它 |
|---|---|
| IDOR | 打开两个浏览器会话(受害者+攻击者),提取令牌,在循环中重放交换用户ID的请求 |
| XSS | 在输入中键入有效载荷,单击提交,检查是否 alert() 对话启动。检查DOM的注入点。 |
| 认证旁路 | 扫描流量以检测JWT/neneneba API密钥/会话cookie模式,提取令牌,修改后回放 |
| API测试 | 捕获所有API调用,按关键字/状态进行搜索,使用regex替换进行回放,使用异常检测进行模糊处理 |
| 竟态条件 | 代码模式通过以下方式发送50多个并发请求 asyncio.gather() 精确计时 |
| 盲SQLi | 代码模式运行二分查找提取——数百个条件请求,每个请求之间都有逻辑 |
| CSP旁路 | 在浏览器级别拦截响应,在Chrome强制执行之前删除或修改内容安全策略标头 |
______________________________________________________________________
建筑
整体系统
graph TB
Agent["🤖 AI Agent
(Claude, Cursor, etc.)"]
subgraph MCP["MCP Server Process"]
direction LR
PT["Proxy Tools
18 tools"]
BT["Browser Tools
20 tools"]
CT["Code-mode
1 tool"]
end
subgraph Proxy["mitmproxy :8082"]
Addon["Addon Script
record + intercept"]
DB[("SQLite
traffic.db")]
Addon -->|write| DB
end
subgraph BrowserSession["BrowserDaemon (per session)"]
Chrome["Chrome
nodriver (anti-bot)"]
Fetch["CDP Fetch
intercept hooks"]
Chrome --- Fetch
end
subgraph Sandbox["Code-mode Sandbox"]
Script["AI-generated
Python script"]
SDK["NdpSDK
29 methods"]
Script --> SDK
end
Target[("🎯 Target")]
Agent |"stdio JSON-RPC"| MCP
PT --> Proxy
BT -->|"TCP IPC
JSON-RPC"| BrowserSession
CT -->|"subprocess
fork+exec"| Sandbox
Chrome -->|"all traffic routed"| Proxy
Proxy |"HTTP/S"| Target
SDK -.->|"direct read/write"| DB
SDK -.->|"TCP IPC"| BrowserSession两个拦截层
graph LR
subgraph Layer1["Layer 1 — CDP Fetch (instant)"]
direction LR
C1["Chrome"] -->|"request"| F1["Fetch API
inject header / block"]
F1 -->|"modified"| P1["→ mitmproxy"]
P2["mitmproxy →"] -->|"response"| F2["Fetch API
replace body / block"]
F2 -->|"modified"| C2["→ Chrome"]
end
subgraph Layer2["Layer 2 — mitmproxy (system-wide)"]
direction LR
Any["Any HTTP client"] --> M1["mitmproxy
inject header / replace body / block"]
M1 --> T2["→ Target"]
end
style Layer1 fill:#1a1a2e,stroke:#3fb950,color:#e6edf3
style Layer2 fill:#1a1a2e,stroke:#58a6ff,color:#e6edf3CDP提取 =每次会话仅限浏览器,即时。 mitmproxy规则 =所有流量,~5s缓存延迟,系统范围。
流程生命周期
| 进程 | 父进程 | IPC方法 | 自动清理 |
|---|---|---|---|
| 中间人代理 | MCP服务器 | SQLite(共享文件) | 监视器线程在父线程死亡时终止;stderr排水管可防止管道悬挂 |
| 浏览器守护进程 | MCP服务器 | TCP JSON-RPC(动态端口) | 父PID监视→ IPC关闭→ 终止信号→ 西格尔 |
| 铬 | BrowserDaemon | CDP(Chrome DevTools协议) | browser.stop() 守护进程退出时 |
| 代码模式脚本 | MCP服务器 | 环境变量(端口、会话) | 作业对象/ killpg256MB RAM,60s CPU |
______________________________________________________________________
NdpSDK——代码模式Python SDK
NdpSDK 是一个Python包装器,它公开了与异步方法相同的38个工具(代理+浏览器),专为在内部使用而设计 execute_security_code当AI需要循环、并发或多步逻辑时,这些逻辑在单个MCP调用时是不切实际的,它会使用 NdpSDK 相反。
from nodriver_proxy_mcp.sdk import NdpSDK
import asyncio
async def main():
sdk = NdpSDK() # auto-discovers running proxy + browser sessions
flows = await sdk.get_traffic_summary(limit=20)
await sdk.browser_go("https://target.com/admin")
# Loops — this is why NdpSDK exists
for uid in range(1, 100):
resp = await sdk.replay_flow(
flow_id,
replacements=[{"regex": r"/users/\d+", "replacement": f"/users/{uid}"}]
)
if resp["status_code"] == 200:
print(f"IDOR: /users/{uid}")
asyncio.run(main())______________________________________________________________________
快速开始
1.安装
pip install nodriver-proxy-mcp或来源:
git clone https://github.com/BobongKu/nodriver-proxy-mcp.git
cd nodriver-proxy-mcp
pip install .2.添加到您的AI代理
MCP客户端 (mcp_config.json):
{
"mcpServers": {
"nodriver-proxy-mcp": {
"command": "nodriver-proxy-mcp"
}
}
}3.使用它
只需告诉你的AI代理该做什么。这些工具是自我描述的——代理会自动选择正确的工具。
______________________________________________________________________
全部39工具
代理(18)
| 工具 | 目的 |
|---|---|
manage_proxy | 启动/停止mitmproxy。通过链接到Burp upstream.GUI通过 ui=True. |
proxy_status | 检查运行状态、端口、PID |
set_scope | 将录制限制在特定域 |
get_traffic_summary | 带有ID、URL、方法、状态代码的分页流列表 |
inspect_flow | 完整的请求/响应详细信息——标头、正文、元数据 |
search_traffic | 按关键字、域、方法、状态代码筛选 |
extract_from_flow | 通过JSONPath、正则表达式或CSS选择器拉取值 |
extract_session_variable | 为保存一个值 {{placeholder}} 回放中的重用 |
list_session_variables | 显示所有提取的变量 |
generate_curl | 将流导出为复制粘贴curl命令 |
replay_flow | 使用正则表达式替换重新发送+ {{var}} 替代(如Burp Repeater) |
send_raw_request | 从原始文本制作任意HTTP请求(SSRF保护) |
add_interception_rule | 实时代理流量操作:注入标头、替换正文、阻止 |
list_interception_rules | 显示活动代理规则 |
remove_interception_rule | 按ID删除代理规则 |
detect_auth_pattern | 自动检测JWT、Bearer、API密钥、会话cookie、CSRF、OAuth2 |
fuzz_endpoint | 并行模糊检测与基线异常检测 |
clear_traffic | 清除流量数据库 |
浏览器(20)
| 工具 | 目的 |
|---|---|
browser_open / browser_close | 启动或终止Chrome会话(反机器人绕过,默认情况下无头) |
browser_list_sessions | 具有PID、端口和正常运行时间的活动会话 |
browser_list_tabs | 会话中的选项卡 |
browser_go / browser_back | 通过导航、等待页面加载、SPA支持 wait_for |
browser_click | 单击CSS选择器或可见文本。返回JS警报对话框(XSS检测)。 |
browser_type | 输入内容——登录表单、搜索框、有效载荷注入 |
browser_get_dom | 以安全为重点的DOM:表单、脚本、iframe、注释、事件处理程序、, data-* 属性 |
browser_get_text | 来自任何CSS选择器的文本内容 |
browser_get_storage | 转储本地存储+会话存储(代理不可见) |
browser_get_console | JS控制台输出——堆栈跟踪、调试URL、CSP违规 |
browser_screenshot | 将页面捕获为PNG格式——机器人挑战、证据、状态验证 |
browser_set_cookie | 通过CDP设置cookie(支持httpOnly,与document.cookie不同) |
browser_js | 在页面上下文中执行任意JavaScript |
browser_wait | 等待元素/文本出现(SPA/AAJAX支持) |
browser_intercept_request | CDP Fetch:注入标头,阻止传出请求(即时) |
browser_intercept_response | CDP Fetch:替换响应体,阻止响应(即时) |
browser_intercept_disable | 关闭所有CDP提取拦截 |
browser_list_intercept_rules | 显示活动的CDP提取规则 |
编码模式(1)
| 工具 | 目的 |
|---|---|
execute_security_code | 运行AI生成的Python NdpSDK --对所有38个其他工具的编程访问。沙盒。 |
______________________________________________________________________
Burp Suite集成
使用 upstream 通过Burp将mitmproxy链接起来,以便在人工智能自动化的同时进行手动分析:
manage_proxy(action="start", upstream="localhost:8080")交通流量: Chrome --> mitmproxy (:8082) --> Burp Suite (:8080) --> Target
两种工具看到的流量相同。人工智能自动化;需要时,您可以在Burp中进行分析。
______________________________________________________________________
工作流程——IDOR扫码模式
sequenceDiagram
participant Agent as AI Agent
participant MCP as MCP Server
participant Proxy as mitmproxy
participant Browser as Chrome (nodriver)
participant Code as Code-mode (NdpSDK)
participant Target as Target
Note over Agent,Target: Phase 1 - Setup
Agent->>MCP: manage_proxy(start)
MCP->>Proxy: launch :8082
Agent->>MCP: browser_open(proxy_port=8082)
MCP->>Browser: launch Chrome via proxy
Note over Agent,Target: Phase 2 - Recon
Agent->>MCP: browser_go(target.com)
Browser->>Proxy: all traffic captured
Proxy->>Target: GET /login, /api/*, /mypage...
Target-->>Browser: responses
Agent->>MCP: get_traffic_summary()
MCP-->>Agent: 47 flows captured
Agent->>MCP: detect_auth_pattern()
MCP-->>Agent: Bearer token detected
Note over Agent,Target: Phase 3 - Attack Surface Mapping
Agent->>MCP: search_traffic("/api/")
MCP-->>Agent: /api/users/me, /api/orders/1042, /api/profile/317
Agent->>MCP: extract_session_variable(token)
MCP-->>Agent: saved as my_token
Note right of Agent: Found 3 endpoints with ID params
Note over Agent,Target: Phase 4 - Code-mode IDOR Sweep
Agent->>MCP: execute_security_code(script)
MCP->>Code: fork + sandbox
loop every endpoint x ID 1~100
Code->>Target: GET /api/users/[id] + my_token
Target-->>Code: 200 with other user data / 403
Code->>Target: GET /api/orders/[id] + my_token
Target-->>Code: 200 with other order data / 403
Code->>Target: GET /api/profile/[id] + my_token
Target-->>Code: 200 with other profile / 403
end
Code-->>MCP: results summary
MCP-->>Agent: /api/users: 100/100 accessible, /api/orders: 38/100, /api/profile: 0/100______________________________________________________________________
故障排除
| 问题 | 修复 |
|---|---|
| 浏览器无法启动 | 安装Chrome/Chromium。 nodriver 需要一个真正的Chrome二进制文件。 |
| SSL证书错误 | 信任mitmproxy CA: ~/.mitmproxy/mitmproxy-ca-cert.pem |
| 端口已在使用中 | manage_proxy(port=XXXX) --或者重新启动,孤立进程将自动终止 |
| 工具未显示 | 重新启动Claude Code/Cursor会话以重新加载MCP服务器 |
uvx 不起作用 | 不要使用 uvx.克隆仓库并使用 uv run --directory 相反。 |
______________________________________________________________________
许可证
麻省理工学院
