这个插件的交互和数据组织参考了 ARTEX:把目标、资产、发现和报告放在一个渗透工作台里,而不是只保留聊天记录。本文介绍将这个思路接到 DeepSeek Harness 后的实现。
dsh-pentest 面向已授权测试。它让 DSH 的会话保存目标、探索线索、验证结果、资产和漏洞,并在 Web 端把这些数据画出来。
项目地址:howmp/dsh-pentest。
仅对已获得明确授权的目标使用。插件记录授权说明,但不会替代部署环境的权限控制、审批或沙箱。
核心流程
该模式的核心是让人工智能自主完成渗透测试中的探索循环。人只需要给出目标、测试目的和授权范围;主代理(主 agent)创建待验证的意图(intent),执行代理(执行 agent)负责执行该意图,得到事实(fact)或漏洞(finding)后,主代理再根据新事实创建下一批意图。这个过程持续循环:
1 | 人设定目标 -> AI 创建意图 -> 执行意图 -> 发现事实/漏洞 -> 基于事实创建新意图 |
这样设计主要为了解决两个问题。
第一,分离决策和执行。主 agent 不直接接收大段扫描输出,也不亲自跑每条命令;执行 agent 把确认后的结构化结果写入记录,主 agent 只看摘要和状态。上下文不会被端口列表、响应正文和命令日志污染,主 agent 能持续围绕“下一步验证什么”做决策。
第二,固定渗透流程而不是固定攻击手法。目标(goal) -> 意图(intent) -> 事实(fact) -> 推导意图(derived intent) -> 漏洞(finding) 约束了每一步的输入和输出,但不限定人工智能必须使用哪种扫描器或测试路径。模型可以根据新的事实调整方向,同时不会跳过证据链直接把猜测写成漏洞。
数据模型
插件没有把渗透过程抽象成一份自由文本笔记,而是采用一条明确的链路:
1 | 目标(goal) -> 意图(intent) -> 事实(fact) -> 推导意图(derived intent) -> 漏洞(finding) |
目标(goal)记录目标、目的和授权;意图(intent)是下一步要验证的假设;事实(fact)是得到的证据;新的事实可以派生新的意图;只有具备复现步骤的结果才会成为漏洞(finding)。资产则使用另一张父子图,覆盖根域、子域、IP、服务、应用和端点。
记录存进 SQLite 的六张表:goals、intents、facts、findings、assets、edges。边不是前端临时计算出来的,而是和节点一起持久化,因此报告、图和工具返回值读取的是同一份链路。
这里有两个实现细节比较重要:
- 节点和边 ID 使用会话内的
<kind>-<n>形式,例如intent-2、asset-4。模型拿到返回 ID 后才能可靠地关联后续事实和资产。 - 数据库 key 使用
sessionId:id,使每个会话拥有独立的探索图和资产集合。
finding 必须有至少一条 reproducibleSteps,否则只记录为事实。这个约束放在存储层而不是提示词里,避免模型漏写字段时仍然出现“无法复现的高危漏洞”。
前端界面
安装后,新会话选择「渗透模式」即可看到独立标签页。

主 agent 会先记录目标和意图,再把具体验证任务交给执行 agent。对话区保留的是计划、状态和摘要。

探索链路视图把目标、意图、事实和漏洞按层级排布,边直接标明“产出”“推导自”“证实”等关系。
节点设定最大高度、行数截断和固定布局尺寸,完整文字放在点击后的抽屉中。缩放时不会因一张卡片变高而改变整层节点的位置。

漏洞视图聚合严重度、描述、影响资产和可复现步骤;报告子标签渲染 Markdown,并提供复制和保存。缩放控件适配站点的明暗主题。

资产视图同时提供列表和关系图。资产 ID 是会话作用域内的数据,子代理只能引用委派输入中已经存在的父资产。

报告视图使用同一份持久化数据生成 Markdown,可直接复制或保存。它不是从最后一轮对话里截取文本,因此不会遗漏先前提交的资产、事实和复现步骤。

安装
需要先安装并启动 DSH Web/CLI。当前插件面向 DSH 0.1.0-rc.6。
最简单的安装方式是直接使用固定的 latest URL:
1 | dsh plugin --profile web add https://github.com/howmp/dsh-pentest/releases/latest/download/dsh-pentest.tar.gz |
也可以下载后从本地文件安装:
1 | dsh plugin --profile web add file:C:\path\to\dsh-pentest.tar.gz |
重启 DSH Web 服务后新版本生效。新建会话并选择「渗透模式」,输入目标、测试目的和授权范围;随后查看探索链路、漏洞、资产和报告。渗透记录存放在 $DSH_HOME/storages/pentest-sessions.db,与宿主其他 JSON 存储域隔离。