这个插件的交互和数据组织参考了 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 的六张表:goalsintentsfactsfindingsassetsedges。边不是前端临时计算出来的,而是和节点一起持久化,因此报告、图和工具返回值读取的是同一份链路。

这里有两个实现细节比较重要:

  1. 节点和边 ID 使用会话内的 <kind>-<n> 形式,例如 intent-2asset-4。模型拿到返回 ID 后才能可靠地关联后续事实和资产。
  2. 数据库 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 存储域隔离。