第 4 章 · 02 浏览器与代理 本节摘要:本节讲透 Strix 的前两个核心工具。Playwright 浏览器驱动 headless Chrome,像真实用户一样导航、点击、填表、执行 JS、截图、多标签操作,专攻客户端漏洞与认证流;Caido HTTP 代理自动捕获全部 HTTP/HTTPS 流量,提供 HTTPQL 过滤查询、请求重放改参、站点地图可视化。两者天然耦合——浏览器流量自动走代理,代理对浏览器操作有完整可见性。本节还讲清代理的 Python 集成(沙箱烤进的 模块,可脚本化批量测 IDOR)、人在回路(把 Caido 暴露给宿主机,你和代理协同测试)、以及作用域管理。 内容来源:原项目文档 与 ,汉化并合并。
本节摘要:本节讲透 Strix 的前两个核心工具。Playwright 浏览器驱动 headless Chrome,像真实用户一样导航、点击、填表、执行 JS、截图、多标签操作,专攻客户端漏洞与认证流;Caido HTTP 代理自动捕获全部 HTTP/HTTPS 流量,提供 HTTPQL 过滤查询、请求重放改参、站点地图可视化。两者天然耦合——浏览器流量自动走代理,代理对浏览器操作有完整可见性。本节还讲清代理的 Python 集成(沙箱烤进的
caido_api模块,可脚本化批量测 IDOR)、人在回路(把 Caido 暴露给宿主机,你和代理协同测试)、以及作用域管理。
内容来源:原项目文档
docs/tools/browser.mdx与docs/tools/proxy.mdx,汉化并合并。
⚠️ 仅限授权测试:浏览器与代理的所有操作仅用于测试你拥有或获书面授权的目标。
阅读完本节,你应当能够:
caido_api 模块写 Python 脚本做批量请求重放(如自动化 IDOR 测试)。浏览器与代理不是两个孤立工具,而是「前端操作 + 后端抓包」的一体两面:浏览器产生的全部流量进代理,代理里的请求可被 Python 脚本或命令行工具复用,终端里跑的工具结果又能反哺下一步的浏览器操作。上图给出本节要讲清的协作关系。
Strix 用 Playwright 驱动一个 headless Chrome 浏览器,像真实用户一样与 Web 应用交互。它不是简单地发 HTTP 请求,而是真的「打开页面、点按钮、填表单、跑 JavaScript」——这对测试现代 Web 应用至关重要,因为大量功能是 JS 驱动的,纯 HTTP 请求触达不到。
| 动作 | 说明 | 典型用途 |
|---|---|---|
| Navigate | 访问 URL、跟链接、处理重定向 | 走完登录流、OAuth、MFA |
| Click | 点击按钮、链接、表单元素 | 触发 JS 重功能、提交表单 |
| Type | 填表单、搜索框、输入框 | 自动填凭据、构造输入 |
| Execute JS | 在页面上下文里跑自定义 JavaScript | 触发动态请求、操纵 DOM |
| Screenshot | 截取页面可视状态 | 报告里附可视化证据 |
| Multi-tab | 跨多个浏览器标签测试 | 并行测多个流程、模拟多用户 |
浏览器是客户端漏洞与认证流测试的主力:
💡 浏览器 vs 纯 HTTP 工具:对静态站点,
curl/httpx就够;但对现代 SPA、需要登录的应用、JS 驱动的功能,浏览器不可替代。Strix 让代理自己判断何时该用浏览器、何时该用轻量 HTTP 工具。
Strix 内置 Caido——一个为安全测试设计的现代 HTTP 代理。所有浏览器流量都流经 Caido,这让代理对每一个请求和响应都有完整控制权。
| 能力 | 说明 |
|---|---|
| 请求捕获 | 自动记录全部 HTTP/HTTPS 流量 |
| 请求重放 | 任意请求带修改重发——改路径参数(测 IDOR)、改请求体(测注入)、增删头(测认证绕过)、改 cookie(测会话问题) |
| HTTPQL | 用 Caido 的 HTTPQL 语法对捕获的流量做强力过滤查询 |
| 作用域管理 | 聚焦特定域名或路径,过滤无关流量 |
| 站点地图 | 可视化已发现的攻击面 |
HTTPQL 是 Caido 的流量查询语法,能在海量捕获请求里精准捞出你要的那批。典型用法(配合下面的 Python 集成):
req.method.eq:"POST"/api/ 的请求:req.path.cont:"/api/"/users/ 的请求:req.path.cont:"/users/"req.method.eq:"POST" AND req.path.cont:"/api/"💡 HTTPQL 是代理的「搜索引擎」:一次扫描可能产生成千上万条请求,人工逐条看是不现实的。HTTPQL 让代理(和你)能按方法、路径、状态码、响应大小等维度精准过滤,快速锁定可疑请求。
代理能取任意一条捕获的请求,带修改重发——这是验证漏洞的核心手段:
/users/1 换成 /users/2、/users/admin);Authorization、加 X-Forwarded-For);caido_api 模块代理的辅助能力通过沙箱镜像里烤进的 caido_api 模块暴露给 Python 脚本。这让自定义 exploit 能直接复用代理抓到的真实请求,做脚本化的批量测试。
| 函数 | 说明 |
|---|---|
list_requests() |
用 HTTPQL 过滤查询捕获的流量 |
view_request() |
取某条请求/响应的完整详情 |
repeat_request() |
带修改重放一条请求 |
list_sitemap() |
浏览已发现攻击面的请求树视图 |
view_sitemap_entry() |
查看一个站点地图条目及其相关请求 |
scope_rules() |
管理代理作用域(allowlist/denylist) |
import asyncio from caido_api import list_requests, repeat_request, view_request async def main(): # 列出最近的 POST 请求 post_requests = await list_requests( httpql_filter='req.method.eq:"POST"', first=20, ) # 查看某条请求详情 request_details = await view_request("req_123", part="request") # 带修改重放——把 user_id 改成 admin 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())
这是 caido_api 最典型的用法——捞出所有打到 /users/ 的请求,逐一改 ID 重放,看哪个能越权访问:
import asyncio from caido_api import list_requests, repeat_request async def main(): # 取所有打到 /users/ 的请求 user_requests = await list_requests(httpql_filter='req.path.cont:"/users/"') for edge in user_requests.edges: req = edge.node.request scheme = "https" if req.is_tls else "http" for test_id in ["1", "2", "admin", "../admin"]: url = f"{scheme}://{req.host}{req.path.replace('/users/1', f'/users/{test_id}')}" response = await repeat_request( req.id, modifications={"url": url}, ) print(req.id, test_id, response["status"]) if response["status"] == "DONE": print(f"Replay completed for candidate {test_id}") asyncio.run(main())
💡 一次性请求用 curl:
caido_api适合复用已捕获的请求做批量测试;如果是临时探一个新端点,直接在终端用curl即可——沙箱的HTTP_PROXY环境变量会自动把流量经 Caido 路由,所以这些请求也会出现在list_requests里、能用repeat_request重放。
Strix 把 Caido 代理暴露给你的宿主机,让你能和自动化扫描同时操作同一个代理实例。这把 Strix 从「全自动扫描器」变成「协同工具」——代理干重活,你聚焦有趣的部分。
localhost:52341);💡 协同的价值:代理擅长广覆盖、快速跑完大量请求;人擅长判断「这个发现是不是真的有意思」「这块逻辑有没有猫腻」。人在回路模式让两者结合——代理铺开面,你盯关键点。
创建作用域能把流量过滤到相关域名,避免被无关请求淹没。allowlist 放行关心的域名/denylist 排除静态资源:
Allowlist: ["api.example.com", "*.example.com"] Denylist: ["*.gif", "*.jpg", "*.png", "*.css", "*.js"]
⚠️ 作用域是效率关键:没有作用域,代理会把所有流量(包括图片、CSS、JS 静态资源)都记下来,很快把代理实例和你的注意力都淹没。用 allowlist 聚焦目标域名,用 denylist 排除静态资源,让捕获的流量都是「值得分析」的。
req.method.eq:"POST" AND req.path.cont:"/api/")。caido_api Python 集成:沙箱烤进该模块,六个函数(list/view/repeat requests、sitemap、scope);典型用法是捞出某类请求批量改参重放,实现自动化 IDOR 测试;一次性请求用 curl(HTTP_PROXY 自动路由)。下一节,我们走进沙箱——持久 Bash 终端怎么管理会话,以及 11 个预装 CLI 安全工具(nmap/nuclei/sqlmap/ffuf/...)的命令速查表。