插件目录 / Developer / dsh-pentest
dsh-pentest
已验证 · 实测可装 howmp
功能简介
面向 DeepSeek Harness(dsh)的渗透测试模式 @CloverSecLabs
推荐 — 实测可用且热门
面向 DeepSeek Harness(dsh)的渗透测试模式 @CloverSecLabs 实测能干净安装、正常启动。562+ stars,社区认可度高,是低风险选择。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-pentest — DSH 渗透测试模式
面向 DeepSeek Harness(dsh)的渗透测试模式:
在授权范围内记录目标、探索线索、验证结果、资产与漏洞,并在 Web 中以探索链路、漏洞和资产视图展示。
本目录是自包含 bundle 包(@howmp/dsh-pentest):宿主插件、Web 界面和 sqlite 后端通过包内 exports
一同分发。Release 资产可直接由 dsh plugin add 安装。
安装
从 Release URL 安装
dsh plugin --profile web add https://github.com/howmp/dsh-pentest/releases/latest/download/dsh-pentest.tar.gz
或下载后从本地文件安装
dsh plugin --profile web add file:C:\path\to\dsh-pentest.tar.gz
重启 dsh 后,在新会话中选择自动注册的「渗透模式」。
预设注册兼容当前 DSH 的 agentPresets.register() 接口及旧版 resolvedRoots 接口。
当前接口通过宿主 include loader 加载包内配置,关闭组件时释放预设注册。
宿主版本要求:DSH >= 0.1.6。发布包的 peer 范围覆盖 DSH 0.1.x,以及从 0.2.0-rc.1 开始的 0.2.x;
预设是宿主 standard 预设的拷贝,其中的宿主包名逐字生效;
DSH 0.1.6 把工作流引擎从 @deepseek-ai/dsh-workflow-worker-thread 改名为@deepseek-ai/dsh-workflow-ptc,0.1.6 之前的宿主请钉 @howmp/[email protected]
(bundle 的 peer 范围覆盖 0.1.x 和 0.2.x,但预设会显示「加载失败」)。
DSH 0.1.7 的 Web 页签使用 retainedBy.mainView 识别当前会话,并兼容旧版 sessions.list.current;
后台任务或侧栏打开的渗透会话不会让普通主会话显示渗透页签。
界面预览
模式选择

对话与执行

探索链路

漏洞视图

资产视图

测试报告

架构速览
- 领域模型(
src/dsh-pentest/src/spec.ts):storage domainpentest(version 2)——goals/intents/facts/findings/assets/edges六张表。边即链路词汇:spawns(goal→intent)、yields(intent→fact)、derived_from(fact→intent)、proves(intent→finding),资产关系用parent(asset→asset)。finding 必填reproducibleSteps(至少一条)。 - 确定性 id(
store.ts):节点/边 id 为<kind>-<n>(按会话计数,goal 重置后归零)——工具返回 id 供模型
跨调用引用,会话投影从日志纯重放同一张图。 - 工具(
tools.ts):pentest_submit(子 agent 直写指定父 intent)/pentest_add_goal(重置整图)/pentest_add_intent(恰好一个锚点)/pentest_add_fact/pentest_add_finding(步骤必填,可关联影响资产)/pentest_add_asset(可选 parentId,
空字符串视为根资产)/pentest_state/pentest_graph/pentest_report。 - 会话投影(
projection.ts):折叠已日志化的pentest_*调用为{ goal, nodes, assets, edges, counts },
镜像 store 的引用拒绝;上限各 200。另注册逐会话的pentestMounted标记单元:当该会话自身日志证明组合
挂载了本插件(请求头组装出pentest_*工具 / 已记录调用 / 子 agent 委派提交)时置真,供 Web 标签页判定。 - Web 标签页(
src/dsh-client-ui-pentest):按会话注册(当前会话或列表祖先链命中pentest预设名、pentest-*复制预设名,或该会话带pentestMounted标记即显示;无证据的会话隐藏);四个子标签——探索链路
(@xyflow/react 图,边带关系胶囊:意图链/产出/推导自/证实)、漏洞(严重度/描述/可复现步骤/影响资产)、
资产(列表/图两种模式)、报告(Markdown 渲染、复制与保存)。 - 协议(
instructions.ts):系统提示词段pentest:protocol(order 50),沿链路推进、子 agent 通过pentest_submit直写父 intent、资产先父后子、与用户交互一律中文。
已知边界
- 数据库:渗透记录写入
$DSH_HOME/storages/pentest-sessions.db(sqlite,经 bundle 补丁路由)。
宿主其它域的存储不受影响(仍为宿主默认 json 后端)。 - 授权:只测试有授权的目标。
pentest_add_goal的authorization参数可填写授权说明(授权对象 /
书面许可引用),会写入状态与最终报告留痕;它只是审计事实,不是门禁——扫描/利用动作仍受部署沙箱与
审批约束。 - 记录按单会话作用域,无跨会话/项目续跑;重新开始一次 engagement 需新的
pentest_add_goal。 - 派生预设:预设不支持继承,按官方方式整目录复制
preset/pentest/后自改即可(工具、协议、投影都随行
生效)。Web 标签页的判定与预设名解耦:复制时保留pentest-前缀(如pentest-sec)会立即显示;改成
任意名字的复制预设在该会话首次请求后由pentestMounted(会话自身日志证据)置位显示——预设名不是能力,
会话日志才是。 - Web 图为窗口视图:会话投影各保留最新 200 个节点/资产/边(超出后最旧被逐出,悬挂边同步清理)。
UI 计数与图反映的是该窗口;完整记录以pentest_state/pentest_report(读存储层)为准。 - 图布局为静态分层(可平移缩放,节点不可拖拽)。
- 运行时要求:sqlite 后端使用 Node.js
node:sqlite,宿主运行时需 Node.js >= 22.5;
宿主 DSH 需 >= 0.1.6(见「安装」一节)。
目录结构
dsh-pentest/ # 项目根 = bundle 包 @howmp/dsh-pentest(自带 zod/schemastery 运行时依赖,其余宿主提供)
├── package.json # bundle manifest:dsh.bundle.patch + dsh.client + exports 子路径
├── cordis.patch.yml # 补丁层:UI、sqlite 后端与 storage-domain 路由
├── lib/ # 构建产物(npm pack 的内容)
│ ├── index.js # 包入口:空 apply
│ ├── pentest.js # 宿主渗透插件:9 个 pentest_* 工具 + 协议注入 + 会话投影/挂载标记
│ ├── preset-root.js # 注册包内「渗透模式」,源码为 src/preset-root.ts
│ ├── storage-sqlite.js # 渗透记录专用的 sqlite 后端(node:sqlite)
│ ├── ui-pentest.js # Web 插件宿主半:空 apply(0.1.1 时代的子路径行座位;bundle 已改挂包根)
│ ├── ui-pentest.client.js # Web 插件浏览器半:渗透视图标签页(4 个子标签,@xyflow/react 内联)
│ └── invariant.js # 探索图不变量伴生(与官方各包同构,生产环境不加载)
├── src/ # 源码快照(继续开发/重新构建用)
│ ├── index.ts / invariant.ts
│ ├── dsh-pentest/ # host 包源码:src/ + tests/ + tsconfig + tsdown + README
│ └── dsh-client-ui-pentest/ # client 包源码:src/client/(视图/图布局/注册)+ tests/
├── tests/bundle.spec.ts # bundle 补丁层测试
├── packages/ # 三个构建好的子包(仅作构建源保留;bundle 不再依赖它们)
│ ├── dsh-pentest/ # host 插件源码构建产物
│ ├── dsh-client-ui-pentest/ # Web 界面插件源码构建产物
│ └── dsh-storage-sqlite/ # sqlite 后端构建产物(来自 dsh 仓库,无独立源码)
├── preset/pentest/ # 「渗透模式」agent 预设(由 bundle 自动注册)
├── images/ # README 界面预览截图
└── README.md
参考项目
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-pentest」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:howmp/dsh-pentest Headless(CLI)profile:
dsh plugin --profile headless add github:howmp/dsh-pentest 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。
使用场景
扩展 agent 的编码能力面——给它一个新工具、工作流或集成,让它接手以前做不了的开发任务。
适合谁
想让 dsh 在真实代码库上像队友一样干活的开发者——能改、能跑、能验证,而不只是回答问题。
二次开发建议
工具/命令面就是缝:暴露更多 SDK 能力、加更聪明的上下文接线,或收紧改代码与验证之间的循环。