json 的 generatedAt 时间戳,属正常。发布流程仍会实时刷新,发布产物里的目录是最新的。
The project's README from github.com/zgsfsec/Full-Chain-Sentinel-System. As one markdown file: README.md.
知攻善防实验室,基于 pi agent harness 改造的授权渗透测试 Agent,带中文 Web 控制台与容器化作业环境。
本项目是攻击性安全工具,只能用于你已获得书面授权的目标。
本项目以 MIT 许可发布,不附带任何担保。
ALLOW / BLOCK,判定失败或超时一律放行)。审批链覆盖 bash 与安卓 shell 命令(droid_shell);frida、抓包、APK 分析与文件面板直接调用容器,不过审批门。vuln_submit 提交已验证漏洞,必填 CVSS 分数,原始数据包逐字保存,操作员复核留时间线,可按项目导出 Markdown 报告。fofa_search / quake_search / hunter_search 三个工具按各平台自己的查询语法测绘公网资产(域名、IP、端口、标题、服务、指纹),原始响应落到项目 evidence/asset/,每次查询记一条流水。只有「已启用 + 已配置密钥 + 验证通过」的平台才会挂载工具,没配置或密钥不可用时 Agent 根本看不到该工具;查询由控制台进程直接发起,密钥不进容器、不进 bash 审计,也不进守门员判定。web_search(公网搜索)与 web_extract(页面正文抓取)做目标情报收集(泄露文档、公开报告、技术文章)。支持多 Key 号池,控制台按各 Key 剩余额度自动轮换,额度耗尽自动切换;查询流水入 websearch.db,原始响应落项目 evidence/search/。只有「权限 → Web 搜索」开关打开且号池里有已验证的 Key 时才会挂载工具;密钥明文存本机 websearch.json(0600),不进容器、不进 bash 审计。http、sse 或 stdio)并逐个测试连接,工具以 mcp__<服务器>__<工具> 挂给 Agent,仍受「权限 → MCP」总开关约束,且该开关下可逐个服务器放开或关掉。配置由哨兵自己拥有(mcp-servers.json,0600),不读 pi 原生的 mcp.json,所以列表里没有的服务器 Agent 看不到。stdio 服务器在控制台宿主机上直接执行(不在容器内、不过 bash 审批),必须逐条勾选风险确认才能保存。要求 Node.js >= 22.19.0。
npm install --ignore-scripts
npm run build:offline # 后端各包与 coding-agent(不联网,模型目录已入库)
npm run build:web # Web 控制台与前端资源
npm run start:web
npm run build 只构建后端各包,控制台需要额外的 npm run build:web。
启动后日志里会打印本次的入口地址,形如 http://<地址>:<端口>/<随机串>。默认监听 0.0.0.0,随机入口串与 cookie 校验用于挡扫描器:没有入口串的请求一律返回普通 404,入口串每次启动都变。请在日志里取完整地址访问。
首次访问的流程:
启动参数与环境变量:
| 参数 | 环境变量 | 说明 |
|---|---|---|
--host <地址> |
SENTINEL_HOST |
监听地址,默认 0.0.0.0 |
--port <端口> |
SENTINEL_PORT |
监听端口,默认 7777 |
--cwd <目录> |
SENTINEL_CWD |
工作目录,默认当前目录 |
--gate-token <串> |
SENTINEL_GATE_TOKEN |
固定入口串,默认每次启动随机 |
--no-gate |
— | 关闭随机入口,直接以 / 提供服务(仅本机调试) |
--no-consent |
— | 跳过首次授权承诺(自动化环境) |
--check |
— | 只做启动前自检并打印报告,不启动服务 |
CLI 同样可用:
./pi-test.sh --no-env # 从源码运行 sentinel CLI
本仓库沿用上游 pi monorepo 的分包结构(包名仍是上游的 @earendil-works/*,改名单独进行):
| 包 | 说明 |
|---|---|
| packages/web | 全链哨兵 Web 控制台:HTTP + WebSocket 服务与前端 |
| packages/coding-agent | Agent CLI 与运行时 |
| packages/agent | 工具调用与状态管理 |
| packages/ai | 多 provider LLM API |
| packages/tui | 终端 UI 库 |
| packages/durable | 会话、任务与文档运行时 |
| packages/mcp · packages/protocol | MCP 与协议层 |
| packages/droid-apk | 安卓 DroidBridge APK(Kotlin) |
| docker | 作业容器镜像(Kali + 工具链) |
./test.sh # 全部非 e2e 测试
npm run check # biome + 依赖/导入/入口图检查 + tsc + webui + 浏览器冒烟
npm run build:offline # 全量构建,不联网、不重生成模型目录
本仓库不跑 CI(只保留发布流程):提交前请自己跑 npm run check 和 ./test.sh。
单测从包根目录跑:
node "$(git rev-parse --show-toplevel)/node_modules/vitest/dist/cli.js" --run test/<name>.test.ts
packages/ai/src/providers/data/ 是 generate-models 的产物,已固定在版本库里:模型 id 的类型联合体直接由它推导,固定它之后 tsc 和测试不会随厂商轮换模型而漂移(全新克隆也能离线做类型检查)。要更新目录时跑 npm run generate:models(需联网)并提交改动——刷新会改到 .manifest.json 的 generatedAt 时间戳,属正常。发布流程仍会实时刷新,发布产物里的目录是最新的。
作业容器:
docker build -t sentinel:latest docker/
基础镜像与 apt/pip/npm/go 软件源可在控制台「设置 → 环境」配置,也可以在命令行用 --build-arg 覆盖。
控制台:Docker 是硬依赖。每个项目一个 Kali 容器(sentinel:latest),Agent 的 bash 命令在容器内执行(docker exec),项目目录 bind mount 进 /work,容器以 root 运行。容器网络默认 host(容器直接用宿主机网络栈,反向 shell、payload 服务、本地靶场、内网与 VPN 才是真实的),可在「设置 → 环境 → 容器网络」切到 bridge;两种模式都保留 NET_RAW,NET_ADMIN 只在 bridge 模式授予。Docker 检查有阻断项时控制台拒绝 prompt、compact 与持续目标。
但容器只约束命令,不是整体沙箱:控制台与 Agent 进程本身以启动者的用户身份跑在宿主机上,只有命令进容器。
droid_shell),子代理的 bash 走同一条链;read/edit/write、文件面板、MCP 工具、codemode,以及 frida、抓包、APK 分析等直接调用容器的工具都不过门。工程任务的 bash 另有一套正则黑名单、20 秒超时与 40 条预算,同样不走审批门。read/edit/write 直接读写宿主机文件系统,项目目录只是相对路径的基准,绝对路径不受限制;MCP 的 stdio 服务器是宿主机子进程。settings.json、.pi/extensions、AGENTS.md,且没有项目信任确认步骤——不要把来源不可信的工作目录设为项目。MCP 服务器不在此列:它们只来自「设置 → MCP」,项目目录里的 .pi/mcp.json 与配置目录里的 mcp.json 都不读。sentinel mcp login。websearch.json(权限 0600),前端不回显;流水与原始响应留在本机(websearch.db 与项目 evidence/search/)。assets.json(权限 0600),前端不回显;查询流水与原始响应留在本机(assets.db 与项目 evidence/asset/)。完整边界与配置见 packages/web/README.md。
CLI:沿用 pi 的权限模型,无内建沙箱,工具以当前用户权限在宿主机执行;需要隔离就把 CLI 整个跑进容器(containerization.md 是上游文档,命令与路径名仍是 pi)。
自动执行模式下模型可运行任意命令,持续目标在自动执行下也没有危险命令黑名单,请仅在授权目标与隔离环境中使用;需要无人值守又不愿全放行时用 AI 审批。控制台的登录、随机入口串与授权承诺只用于防误用与防扫描,不构成隔离。
安全问题请通过仓库 Issue 反馈,不要在公开 Issue 里附可直接利用的细节。
本项目是 pi 的衍生作品(fork),不是上游官方项目,与上游团队无关。
上游代码以 MIT 许可发布,版权归 Mario Zechner,许可全文见 LICENSE;本仓库保留该许可与版权声明,并在此基础上加入渗透测试相关的系统提示、Web 控制台、容器化作业环境与安卓设备插件。
渗透测试场景在安全服务工作中,通常分为三种 1.Web 渗透 2.微信小程序渗透 3.APP 渗透 至此,我们全链路打通,一个平台畅游所有任务 三端是怎么打通的呢? 我们要知道我们渗透测试测的是什么?很多人都不明白道理,我们渗透测试过程,90% 的针对服务器后端进行测试的,后端想给我们前端展示,所以想打通三端也只是不同载体的问题。 比如 Web 前端载体就是浏览器, 微信小程序的前端载体就是微信小程序容器 APP 的前端载体就是一些 UI 框架 所以,本质上 Web、小程序、APP,都是一样的。
简单说几个场景怎么用吧, 1.Web 测试 直接输入框使用即可 2.微信小程序 选择预设 Agent 然后自己在 Tscan 这类工具中把微信小程序反编译,点击左下角“附件”上传即可。 3.APP 在左侧安卓设备中配置好你的安卓机器,然后在你的安卓里面安装好对应 APP,然后在对话框中选择“安卓”即可 因为本人想法是更少的工具和上下文,所以,你如果不开“安卓”这个按钮的话,他是不会插入安卓相关的工具调用的、也不会插入相关 prompt
你需要有一台 root 后的设备(虚拟机亦可),并且安装配套的 app 即可
关于手机 root,这里就不再讲解,有兴趣可以去酷安社区逛逛,安卓机为反连主平台,所以你可以将主程序部署在公网服务器。
适用于批量测试环节,指挥官架构,适用于多任务指挥,这个还是测试阶段,自行玩一玩吧。
建议在设置->模型里面再配置一个小模型,比如 qwen,Hook所有 Bash 调用过程,建议用千问的 API 按量付费,不可以用 CodingPlan 模型,因为 CodingPlan 会有速率限制。
https://www.qianwenai.com/models/qwen-flash
采用小模型监管大模型,最大程度上尽量避免对生产环境造成影响。
你可以做一些自己的 Nuclei 的 POC 订阅服务,放进“设置->POC订阅”里面,这种应用场景主要是打 nday ,本来没打算加 Nuclei 固定 POC 的功能的,但是考虑到像 jeecg boot 、若依这种开发框架,的 api 路由自定义功能,还是加了吧。
你只需要在你的远程服务器上定时的把Nuclei 的所有 POC 打包成 zip,然后远程同步即可。
也可以直接同步 Nuclei 官方的 POC
加群的,一定要在“打招呼内容”备注“全链哨兵”。
json 的 generatedAt 时间戳,属正常。发布流程仍会实时刷新,发布产物里的目录是最新的。