如何在 Strix 扫描中连接 Caido Desktop 接管代理流量并回放请求
【免费下载链接】strixOpen-source AI penetration testing tool to find and fix your app’s vulnerabilities.项目地址: https://gitcode.com/GitHub_Trending/strix/strix
Strix 扫描时,所有浏览器流量都经过沙箱内的 Caido 代理,agent 会对请求自动抓包、过滤和回放。但如果你想人工介入——在扫描进行中查看 agent 发出的每一条 HTTP/HTTPS 请求、手动修改并回放、或对 agent 报告的结果做验证——可以把宿主机上的 Caido Desktop 连接到沙箱里的 Caido 实例。本文基于 proxy 文档 和 Quick Start,给出从启动扫描、在 Caido Desktop 接入到回放请求的完整路径。
前提条件
- Docker 处于运行状态(Strix 的沙箱是 Kali Linux 基础的 Docker 容器);
- 已配置任一受支持的 LLM provider 的 API key;
- 已安装 Strix,两种官方方式任选其一:
curl -sSL https://strix.ai/install | bash或:
pipx install strix-agent- 宿主机上已安装 Caido Desktop(Strix 只负责把沙箱内的 Caido 代理暴露到宿主机,Desktop 客户端需要你自己安装);
- 只对你拥有或已获书面授权的系统执行扫描。
启动扫描并找到 Caido 接入地址
先设置 LLM,再像平时一样启动扫描。Caido 地址是在交互模式(TUI)下才展示的,所以不要用--non-interactive跑:
export STRIX_LLM="openrouter/z-ai/glm-5.3" export LLM_API_KEY="your-api-key" strix --target ./your-appyour-app替换为你要测的目标(本地目录、URL 或仓库地址均可)。首次运行会自动拉取 Docker 沙箱镜像。
沙箱启动后,在 TUI 侧边栏的 stats 面板里找到Caido这一项,点击即可复制地址(文档示例为localhost:52341,实际端口以你这次运行显示的值为准)。
在 Caido Desktop 中连接实例
按 proxy 文档给出的顺序操作:
- 像往常一样启动一次 Strix 扫描;
- 在侧边栏 stats 面板找到 Caido URL(形如
localhost:52341); - 在 Caido Desktop 中打开该 URL;
- 点击Continue as guest接入这个实例。
接入成功的标志:你能在 Caido Desktop 里实时浏览 agent 正在发出的全部 HTTP/HTTPS 请求。连接建立后,你可以做这些事(均来自 proxy 文档的说明):
- Inspect traffic— 实时浏览 agent 发出的所有 HTTP/HTTPS 请求;
- Replay requests— 取任意一条已捕获请求,加自己的修改后重发;
- Intercept and modify— 请求在途时暂停、编辑再转发;
- Explore the sitemap— 查看 agent 已发现的攻击面树;
- Manual testing— 对 agent 报告的结果做人工复测,或探索 agent 没到达的区域。
回放请求:在 Caido Desktop 中手动改包重发
Caido 捕获的每一条请求都可以带修改回放。Strix 文档列出的典型改法:
- 改路径参数(测 IDOR);
- 改请求体(测注入);
- 增删请求头(测认证绕过);
- 改 Cookie(测会话问题)。
操作即“浏览 → 捕获 → 修改 → 测试”:在流量列表里选中目标请求,编辑 URL/headers/body/cookies,然后 resend,观察响应状态码和内容的变化。
让 shell 流量也进入代理
如果想在沙箱里用curl发起一次性请求并让它同样被捕获、可回放,直接用 shell 工具即可——沙箱的HTTP_PROXY环境变量已把流量路由到 Caido,所以curl的请求会出现在list_requests里,之后就能用repeat_request回放。
脚本化回放:沙箱内的 caido_api
除手动操作外,agent(或你让 agent 写的 Python 脚本)可以调用镜像内置的caido_api模块做脚本化测试。proxy 文档给出的示例脚本(文档示例,req_123是占位请求 ID,实际应替换为list_requests返回的 ID):
import asyncio from caido_api import list_requests, repeat_request, view_request async def main(): # List recent POST requests post_requests = await list_requests( httpql_filter='req.method.eq:"POST"', first=20, ) # View a specific request request_details = await view_request("req_123", part="request") # Replay with modified payload response = await repeat_request( "req_123", modifications={"body": '{"user_id": "admin"}'}, ) print(response["status"], request_details is not None, len(post_requests.edges)) asyncio.run(main())文档列出的可用函数:
| 函数 | 用途 |
|---|---|
list_requests() | 用 HTTPQL 过滤查询已捕获流量 |
view_request() | 获取完整请求/响应详情 |
repeat_request() | 带修改回放一条请求 |
list_sitemap() | 浏览发现面的请求树视图 |
view_sitemap_entry() | 查看单个 sitemap 条目及其相关请求 |
scope_rules() | 管理代理 scope(allowlist/denylist) |
repeat_request回放的请求继承原始请求的全部内容(headers、cookies、认证、method、URL),只覆盖modifications里指定的字段。modifications支持的键及其含义见 tools.py 的参数说明:url(替换 URL)、params(新增/更新查询参数)、headers(新增/更新请求头)、body(整体替换请求体)、cookies(新增/更新 Cookie)。
HTTPQL 过滤语法有两条容易踩的坑(来自 tools.py 中的说明):HTTPQL 没有NOT操作符,要用否定形式如ncont、nregex(例如req.path.ncont:"/static");字符串值必须加引号,整数值不能加引号,resp.code.eq:200正确,resp.code.eq:"200"会解析报错。
用 Scope 过滤流量
扫描目标较多时,用 scope 把流量限制到相关域名。proxy 文档给出的示例:
Allowlist: ["api.example.com", "*.example.com"] Denylist: ["*.gif", "*.jpg", "*.png", "*.css", "*.js"]规则语义(见 tools.py):空 allowlist 表示放行所有域名;denylist 始终优先于 allowlist。scope 有唯一 id,可作为list_requests的scope_id参数使用。
边界与限制
- Caido URL 是每次运行动态暴露到宿主机的地址,示例值
localhost:52341只作格式参考,以 TUI 侧边栏实际显示为准; - 接入依赖交互模式(TUI 侧边栏展示 URL),
-nheadless 模式下没有这个入口; - 回放结果取决于目标环境:
repeat_request返回的status为"DONE"才表示请求发出完成(文档 IDOR 示例脚本中以此判断回放完成),状态码本身要看目标响应; - 沙箱会真实执行请求,务必遵守授权范围。
完成接入与回放后,你可以在 Caido Desktop 里继续用 sitemap 探索 agent 尚未覆盖的攻击面,或按 Scan Modes 调整下一次扫描的深度。
【免费下载链接】strixOpen-source AI penetration testing tool to find and fix your app’s vulnerabilities.项目地址: https://gitcode.com/GitHub_Trending/strix/strix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考