可恢复的 DSH 渗透测试模式:资产归档、证据复核、断点续跑与 Web 可视化
50.6/100
综合分
37
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「@howmp/dsh-pentest」归属 howmp/dsh-pentest,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add baianquanzu/dsh-pentest该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · browser
装得上吗
实装验证未通过(dep_tree_unresolvable),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dep_tree_unresolvable · 2026/9/27) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「@howmp/dsh-pentest」归属 howmp/dsh-pentest,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@howmp/dsh-pentest @ 0.1.0-rc.37
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 04:34:02
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 102 处,展示前 63 条)
- 读取本地文件scripts/burp-mcp.mjs:34
if (config.transport !== 'streamable-http' && !existsSync(bridge)) { - 读取本地文件lib/file-upload.js:291
await access(candidate, constants.F_OK); - 读取本地文件lib/file-upload.js:298
if (!(await stat(payload.cwd)).isDirectory()) throw new Error("当前工作区路径不是目录"); - 写入本地文件lib/file-upload.js:302
await mkdir(directory, { recursive: true }); - 写入本地文件lib/file-upload.js:305
await writeFile(path, buffer, { flag: "wx" }); - 写入本地文件lib/storage-sqlite.js:47
await mkdir(dirname(actual), { - 读取本地文件lib/preset-root.js:18
const metadata = yaml.load(readFileSync(join(directory, "preset.yml"), "utf8")); - 读取本地文件lib/preset-root.js:19
const plugins = yaml.load(readFileSync(join(directory, "agent.cordis.yml"), "utf8"), { schema: entryListSchema }); - 读取本地文件scripts/repair-composer.mjs:63
const metadata = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) - 读取本地文件scripts/repair-composer.mjs:66
const source = readFileSync(file, 'utf8') - 读取本地文件scripts/repair-composer.mjs:75
if (!existsSync(backup)) writeFileSync(backup, source, { flag: 'wx' }) - 写入本地文件scripts/repair-composer.mjs:75
if (!existsSync(backup)) writeFileSync(backup, source, { flag: 'wx' }) - 写入本地文件scripts/repair-composer.mjs:76
writeFileSync(file, patched) - 执行外部命令来自配置/变量scripts/repair-composer.mjs:95
const globalRoot = execFileSync(process.execPath, [npm, 'root', '-g'], { encoding: 'utf8', windowsHide: true }).trim() - 读取本地文件scripts/configure-burp-mcp.mjs:77
const original = existsSync(file) ? readFileSync(file, 'utf8') : '' - 读取本地文件scripts/configure-burp-mcp.mjs:77
const original = existsSync(file) ? readFileSync(file, 'utf8') : '' - 写入本地文件scripts/configure-burp-mcp.mjs:93
mkdirSync(dirname(file), { recursive: true }) - 读取本地文件scripts/configure-burp-mcp.mjs:95
if (!existsSync(backup) && existsSync(file)) writeFileSync(backup, original, { flag: 'wx' }) - 写入本地文件scripts/configure-burp-mcp.mjs:95
if (!existsSync(backup) && existsSync(file)) writeFileSync(backup, original, { flag: 'wx' }) - 写入本地文件scripts/configure-burp-mcp.mjs:96
writeFileSync(file, next) - 读取本地文件scripts/configure-shared-browser.mjs:15
return JSON.parse(readFileSync(file, 'utf8')) - 读取本地文件scripts/configure-shared-browser.mjs:42
ready: runtime.browserVersion === BROWSER_VERSION && existsSync(executable), - 读取本地文件scripts/configure-shared-browser.mjs:48
executableReady: existsSync(executable), - 读取本地文件scripts/configure-shared-browser.mjs:62
if (!existsSync(installer)) throw new Error(`Electron installer not found: ${installer}`) - 执行外部命令来自配置/变量scripts/configure-shared-browser.mjs:63
const child = spawnSync(process.execPath, [installer], { - 读取本地文件scripts/configure-profile-pnpm.mjs:27
if (!existsSync(file)) throw new Error(`DSH profile workspace not found: ${file}`) - 读取本地文件scripts/configure-profile-pnpm.mjs:29
const source = readFileSync(file, 'utf8') - 写入本地文件scripts/configure-profile-pnpm.mjs:53
writeFileSync(temporary, output, 'utf8') - 写入本地文件scripts/configure-profile-pnpm.mjs:54
renameSync(temporary, file) - 读取本地文件scripts/configure-redteam-suite.mjs:170
const source = readFileSync(file, 'utf8') - 写入本地文件scripts/configure-redteam-suite.mjs:178
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 读取本地文件scripts/configure-redteam-suite.mjs:178
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 写入本地文件scripts/configure-redteam-suite.mjs:179
writeFileSync(file, source.replace(previous, desired), 'utf8') - 读取本地文件scripts/configure-redteam-suite.mjs:185
const source = readFileSync(file, 'utf8') - 写入本地文件scripts/configure-redteam-suite.mjs:199
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 读取本地文件scripts/configure-redteam-suite.mjs:199
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 写入本地文件scripts/configure-redteam-suite.mjs:205
writeFileSync(file, patched, 'utf8') - 读取本地文件scripts/configure-redteam-suite.mjs:210
if (!existsSync(file)) return fallback - 读取本地文件scripts/configure-redteam-suite.mjs:211
return JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件scripts/configure-redteam-suite.mjs:215
mkdirSync(path.dirname(file), { recursive: true }) - 写入本地文件scripts/configure-redteam-suite.mjs:217
writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, 'utf8') - 删除本地文件scripts/configure-redteam-suite.mjs:227
rmSync(item.file, { force: true }) - 执行外部命令来自配置/变量scripts/configure-redteam-suite.mjs:251
const result = spawnSync(executable, args, { - 删除本地文件递归scripts/configure-redteam-suite.mjs:295
rmSync(destination, { force: true, recursive: true }) - 删除本地文件递归scripts/configure-redteam-suite.mjs:377
rmSync(staging, { recursive: true, force: true }) - 删除本地文件递归scripts/configure-redteam-suite.mjs:385
rmSync(old, { recursive: true, force: true }) - 删除本地文件递归scripts/configure-redteam-suite.mjs:387
rmSync(staging, { recursive: true, force: true }) - 读取本地文件scripts/repair-preset.mjs:19
const metadata = JSON.parse(readFileSync(join(directory, 'package.json'), 'utf8')) - 读取本地文件scripts/repair-preset.mjs:22
const original = readFileSync(file, 'utf8') - 写入本地文件scripts/repair-preset.mjs:25
if (!existsSync(`${file}.pentest-preset.bak`)) writeFileSync(`${file}.pentest-preset.bak`, original, { flag: 'wx' }) - 读取本地文件scripts/repair-preset.mjs:25
if (!existsSync(`${file}.pentest-preset.bak`)) writeFileSync(`${file}.pentest-preset.bak`, original, { flag: 'wx' }) - 写入本地文件scripts/repair-preset.mjs:26
writeFileSync(file, patched) - 读取本地文件scripts/dependencies.mjs:13
if (!existsSync(directory) || !statSync(directory).isDirectory()) { - 读取本地文件scripts/dependencies.mjs:13
if (!existsSync(directory) || !statSync(directory).isDirectory()) { - 读取本地文件scripts/dependencies.mjs:27
if (!existsSync(join(directory, name, 'package.json'))) continue - 读取本地文件scripts/dependencies.mjs:39
if (existsSync(manifest)) { - 读取本地文件scripts/dependencies.mjs:40
const data = JSON.parse(readFileSync(manifest, 'utf8')) - 读取本地文件scripts/migrate-credentials.mjs:54
if (!existsSync(file)) return { changed: false, credentialCount: 0, reason: 'missing' } - 读取本地文件scripts/migrate-credentials.mjs:56
const current = readFileSync(file, 'utf8') - 写入本地文件scripts/migrate-credentials.mjs:61
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 读取本地文件scripts/migrate-credentials.mjs:61
if (!existsSync(backupFile)) copyFileSync(file, backupFile) - 读取本地文件scripts/migrate-credentials.mjs:62
writeFileSync(file, result.text, { encoding: 'utf8', mode: statSync(file).mode }) - 写入本地文件scripts/migrate-credentials.mjs:62
writeFileSync(file, result.text, { encoding: 'utf8', mode: statSync(file).mode })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-invariants@deepseek-ai/dsh-storage@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
6 张 · 点击查看大图功能亮点
- 资产归档
- 证据复核
- 断点续跑
README
由 DeepSeek 最新模型翻译生成dsh-pentest
面向 DeepSeek Harness(DSH)的可恢复授权安全测试插件。
它提供彼此隔离的「挖洞模式」和「红队模式」,把侦察、资产归档、逐项验证、证据复核和报告生成串成可追踪工作流,并在 Web 中提供探索链路、漏洞、资产和报告视图。
当前实现版本:0.1.0-rc.42
官方 DSH 升级状态:本项目保留 0.1.0-rc.6/rc.8 与 0.1.5-rc.2 兼容路径,并已在隔离 profile 验证 0.2.0-rc.2 核心宿主。0.2 的 preset 注册和官方文件上传服务已适配;第三方 redteam 扩展套件仍按宿主版本门控,不会在 0.2 上强行安装旧 peer 依赖,也不会自动替换你正在运行的全局 DSH。
正式 DSH 或迁移原始会话。新版 MCP Studio 与模式分组的适配已加入配置器,详见升级验证记录。
项目特点
- 先侦察再测试:子域名、目录/端点、端口/服务、框架指纹、存储桶和前端资源统一归档。
- 资产驱动推进:新发现的 API、路由、对象 ID、内部 host、组件版本和云资源自动进入待测队列。
- 中断可恢复:任务 checkpoint、租约、指数退避、阻塞状态和幂等提交避免断线后重复工作。
展开完整文档(README 剩余 1 节)
dsh-pentest
面向 DeepSeek Harness(DSH)的可恢复授权安全测试插件。
它提供彼此隔离的「挖洞模式」和「红队模式」,把侦察、资产归档、逐项验证、证据复核和报告生成串成可追踪工作流,并在 Web 中提供探索链路、漏洞、资产和报告视图。
当前实现版本:0.1.0-rc.42
官方 DSH 升级状态:本项目保留 0.1.0-rc.6/rc.8 与 0.1.5-rc.2 兼容路径,并已在隔离 profile 验证 0.2.0-rc.2 核心宿主。0.2 的 preset 注册和官方文件上传服务已适配;第三方 redteam 扩展套件仍按宿主版本门控,不会在 0.2 上强行安装旧 peer 依赖,也不会自动替换你正在运行的全局 DSH。
正式 DSH 或迁移原始会话。新版 MCP Studio 与模式分组的适配已加入配置器,详见升级验证记录。
项目特点
- 先侦察再测试:子域名、目录/端点、端口/服务、框架指纹、存储桶和前端资源统一归档。
- 资产驱动推进:新发现的 API、路由、对象 ID、内部 host、组件版本和云资源自动进入待测队列。
- 中断可恢复:任务 checkpoint、租约、指数退避、阻塞状态和幂等提交避免断线后重复工作。
- 漏洞质量门槛:只有符合赏金/授权范围,并具备复现步骤、观察结果、对照结果和影响证据的问题才进入 finding。
- 低噪声策略:识别 WAF、CDN、风控和限速后降低频率与并发,避免高强度 fuzz、批量爆破和破坏性验证。
- 覆盖检查:对每个资产登记检查项;未覆盖资产、未完成任务或阻塞项存在时只输出阶段报告。
- 阶段门禁:scope → recon → validation → review → complete 由 pentest_gate 读取持久台账判定;四类侦察、待验证线索或阻塞项未收口时不能生成最终报告。
- 可证伪意图:测试 intent 可记录正证据、反证据、停止条件和低噪声替代路径;重试耗尽后自动把 fallback 写入恢复状态。
- Skill 融合:吸收 clown-src-6k-skill 的锁面/自由跳、一种子闭环、短表、价值排序、黑盒/白盒双轨和按特征选择知识模块。
- 双模式隔离:旧 pentest 预设保留兼容 ID 并显示为「挖洞模式」;融合 dsh-redteam-model 阶段门禁、恢复、证据纪律和失败熔断的能力独立为「红队模式」。
- 输入框兼容修复:随包分发 DSH 会话组件修复,覆盖文字不可见、清空草稿后的高度和翻译扩展引起的 DOM 冲突;Windows 启动脚本自动执行。
- Burp MCP 模式:可选接入 Burp 的 legacy SSE MCP,通过 mcp-remote 转为 DSH stdio;自动重连、超时和离线降级配置不会影响未使用 Burp 的安装。
- 共享真实浏览器:固定集成 dsh-builtin-browser 0.1.22,提供 33 个 browser_ 工具、任务级标签会话、实时可见页面和人工接管;普通 Web 自托管 Electron 窗口,带 electronViewHost 的桌面壳自动使用内嵌 WebContentsView。
- 多类型文件上传:输入框工具栏可直接上传文本、代码、配置、Office、PDF、图片、音视频、压缩包和二进制文件;文件保存到当前工作区 .dsh-uploads,文本及常见文档自动提取内容,其余类型保留原文件路径供 Agent 继续分析。
- 完整安全能力套件:固定整合 dsh-redteam-model 的 7 个补充专业模式与 15 个安全插件,覆盖 AttackAtlas、扫描器、Semgrep、MCP Studio、会话脉冲、轨迹仓库、成果面板、阶段门禁、恢复推进和子代理协作。
- 安全白名单部署:不加载免杀规避模式、拒答绕过插件和 WebShell 管理器;上游预设中的反拒答指令会在部署副本中替换为授权范围、低噪声和破坏性操作确认约束。
本目录是自包含 bundle 包(@howmp/dsh-pentest):宿主插件、Web 界面、SQLite 后端和两个安全测试预设通过包内 exports 一同分发。Release 资产可直接由 dsh plugin add 安装。
安装
从 Release URL 安装
dsh plugin --profile web add https://github.com/baianquanzu/dsh-pentest/releases/latest/download/dsh-pentest.tar.gz
或下载后从本地文件安装
dsh plugin --profile web add file:C:\path\to\dsh-pentest.tar.gz
直接用 dsh plugin add 安装的用户,还需执行包内的输入框修复脚本。默认 Windows 安装位置:
node "$env:USERPROFILE\.dsh\profiles\web\node_modules\@howmp\dsh-pentest\scripts\repair-composer.mjs"
node "$env:USERPROFILE\.dsh\profiles\web\node_modules\@howmp\dsh-pentest\scripts\configure-redteam-suite.mjs"
node "$env:USERPROFILE\.dsh\profiles\web\node_modules\@howmp\dsh-pentest\scripts\configure-shared-browser.mjs"
Linux/macOS:
node "${DSH_HOME:-$HOME/.dsh}/profiles/web/node_modules/@howmp/dsh-pentest/scripts/repair-composer.mjs"
node "${DSH_HOME:-$HOME/.dsh}/profiles/web/node_modules/@howmp/dsh-pentest/scripts/configure-redteam-suite.mjs"bash
node "${DSH_HOME:-$HOME/.dsh}/profiles/web/node_modules/@howmp/dsh-pentest/scripts/configure-shared-browser.mjs"
自定义 DSH_HOME 或 profile 时,调整脚本路径。脚本默认通过 npm root -g 定位全局 DSH;非全局安装可附加 --host-root /path/to/node_modules/@deepseek-ai/dsh。
支持会话组件 0.1.0-rc.6、0.1.0-rc.8,并识别无需旧补丁的 0.1.5-rc.2、0.2.0-rc.2;修改前自动备份,重复运行不会重复修改,未知版本会报错而不写入。
修复后停止并重新启动 DSH Web,在浏览器强制刷新,然后在新会话中选择「挖洞模式」或「红队模式」。
本地源码启动
Windows 用户可以直接运行: powershell .\start-pentest.bat
启动脚本会先初始化 Web profile;如果系统没有 pnpm,会自动安装固定的 pnpm@10.33.0。随后它把 DSH 宿主提供的 @deepseek-ai/ 与 React 标记为外部 peer,避免 pnpm 把正常的宿主依赖显示成 missing peer 或 Conflicting peer dependencies;不会额外安装一套 DSH 核心包。随后自动运行输入框修复并配置完整安全能力套件。
安装失败时脚本会保留 profile 文件,不覆盖用户凭据,并打印插件安装的最后 25 行诊断。可直接重新运行脚本;它会比较当前 bundle 文件后决定是否需要重新安装,不会重复追加 Burp MCP 配置。
外部依赖默认优先使用 http://127.0.0.1:10808(v2rayN 默认 mixed 端口);也可以通过 DSH_DOWNLOAD_PROXY 或 -DownloadProxy 指定 V2 代理。
代理不可用时自动尝试直连;代理和直连都失败时,仅跳过可选 redteam 扩展,核心 DSH 仍会启动。本地 file:D:/... bundle 不经过代理。
旧版输入框补丁曾只存在于开发电脑的全局 DSH 中;从 rc.28 起,源码 ZIP 和 Release 安装包都包含修复脚本。升级 DSH 后请重新运行启动脚本或输入框修复命令。
Burp MCP 模式
启动时不连接 Burp。点击输入框左下角 +,选择 burp-connect · 连接 Burp MCP;断开时选择 burp-disconnect · 断开 Burp MCP。
连接由当前 DSH 进程内的会话共享,重启后需重新连接。默认 bridge 为 D:\burp-mcp\node_modules\mcp-remote\dist\proxy.js;也可以显式指定: powershell .\start-pentest.bat -BurpMcp -BurpMcpUrl http://127.0.0.1:9876/ -BurpMcpBridge D:\burp-mcp\node_modules\mcp-remote\dist\proxy.js
其他目录使用环境变量: powershell $env:DSH_BURP_MCP_BRIDGE = 'D:\burp-mcp\node_modules\mcp-remote\dist\proxy.js' $env:DSH_BURP_MCP_URL = 'http://127.0.0.1:9876/' .\start-pentest.bat -BurpMcp
-BurpMcp 只保存连接参数,不会自动连接。配置器更新 $DSH_HOME\profiles\web\cordis.patch.yml,保存 stdio bridge、 legacy SSE transport 和重连策略,并保留原文件备份。启动脚本会迁移旧的 Burp 自动连接配置。Burp MCP 工具在模型目录中通常显示为 mcp__burp__;两个模式都会先检查实际工具目录和参数,再把 Burp 的流量、请求、响应和技术栈线索归档到资产与事实记录。
Burp 未启动或 MCP 暂时断开时,连接会标记为可重试/阻塞,其他侦察和测试任务仍可继续。
清除已保存的 Burp MCP 连接参数(正在运行的连接请用加号菜单断开): powershell .\start-pentest.bat -DisableBurpMcp
Burp 端建议保持监听在本机回环地址,并在 Burp MCP 设置中按授权范围配置 HTTP 请求和项目数据权限。
共享真实浏览器
浏览器能力默认随 bundle 挂载,但不会在 DSH 启动时访问任何页面;首次源码启动会在缺少二进制时下载 Electron。
智能体第一次调用 browser_open 后才创建浏览器会话。用户和智能体操作同一个页面,可以直接在可见窗口中登录、处理验证码或临时接管;随后智能体继续使用 browser_snapshot、browser_a11y、browser_click、browser_fill、标签管理和截图等工具。
dsh web 运行在普通 Chrome/Edge 标签页时,任意目标站受 CSP、X-Frame-Options 和浏览器同源策略限制,无法可靠地直接嵌入该标签页,
因此插件使用独立的共享 Electron 窗口。若 DSH 桌面壳提供 electronViewHost,同一 provider 会自动改为原生内嵌 WebContentsView,即截图所示的应用内浏览器形态。项目默认只允许 HTTP(S) 导航,截图和下载只能写入 $DSH_HOME/browser-downloads,并且不覆盖已有文件。
遇到 CAPTCHA、人机验证或登录确认时,工作流应停止自动重试并等待人工处理。browser_auth 导出的 Cookie 是实时凭据,不得写入对话、日志或仓库。检查运行时: powershell
node "$env:USERPROFILE\.dsh\profiles\web\node_modules\@howmp\dsh-pentest\scripts\configure-shared-browser.mjs" --status
多类型文件上传
当前会话选定工作区后,点击输入框工具栏中的文件上传图标即可多选文件。上传文件会写入当前工作区的 .dsh-uploads 目录,并把文件名、绝对路径、识别类型、大小、SHA-256 与可提取的文本内容追加到草稿;确认草稿后再发送即可。DOCX、PPTX、XLSX、ODT、ODP、ODS、PDF、RTF 和 EPUB 会自动抽取文本,常见代码、日志、JSON/YAML、CSV、HTML 等直接生成文本预览;图片和其他二进制文件由智能体通过现有图片、文件或终端工具读取原件。单文件上限为 128 MB,同名文件自动保留为带序号的新文件。
模式切换与安全测试入口排查
- 选择模式应在新会话发送首条消息之前完成。模式按钮与菜单勾选不一致时,先关闭本页自动翻译并强制刷新;rc.30 为模式标签增加了防翻译处理。
- 轨迹 是 DSH 的通用执行日志,挖洞/红队 是本插件按当前预设显示的探索链路、资产和漏洞视图。发送首条消息后,会话顶部才显示这些标签。
- 有模式名称但没有对应标签时,检查是否安装了完整 bundle;仅复制 preset 目录不会安装前端。运行项目的 start-pentest.bat 重新安装,然后重启 DSH 并按 Ctrl+F5。
- rc.31 的启动脚本每次重新打包,并比较已安装前端文件,避免同版本旧包一直被复用。
- 模式标签存在但图为空,表示当前会话尚无 pentest_ 工具记录;普通聊天和 Shell 调用不会自动变成探索图。
手动构建和校验: powershell
npm ci
npm test
npm run build
npm run build:check
构建完成后,使用 dist\howmp-dsh-pentest-<version>.tgz 安装到 DSH Web 配置档。插件更新后需要重启正在运行的 DSH Web 进程。
两种模式
- 挖洞模式(预设 ID 仍为 pentest):面向漏洞赏金和授权挖掘,先过滤明确不可获赏金的问题,按 completion.canFinish 收口;不会注入红队阶段门禁协议。
- 红队模式(预设 ID redteam):面向明确授权的安全评估和攻击路径验证,不以赏金资格筛选;eligible 表示已授权范围,必须依次通过 scope → recon → validation → review 门禁。
- 两种模式共享兼容的 pentest_ 工具、SQLite 数据结构和 Web 轨迹,但系统提示词、最终报告判定、工具卡片和会话标签按预设隔离。
补充专业模式与插件
安装套件后,模式选择器还会提供:资产测绘、攻防演练、二进制分析、云安全、代码审计、CTF 解题和事件响应。它们与项目自带的挖洞/红队模式并存,不覆盖原有预设。
安全白名单共安装 15 个上游插件:AttackAtlas、自动推进、任务记忆、Hunter、MCP Studio、模式分组、产品子代理、红队成果、路由增强、扫描工具、安全执行约束、Semgrep 审计、会话脉冲、阶段门禁和轨迹仓库。扫描工具与 Semgrep 只挂载到对应预设,其余插件位于宿主平面;安全执行约束负责工作区写入、报告门禁、高风险命令确认与扫描速率纪律。
配置器还会对固定版本的 MCP Studio 客户端执行一次签名校验兼容补丁:rc.6/rc.8 使用裸 channel,rc.2 保留新版 /api 路由。原文件只备份一次,未知版本或代码布局会停止安装并回滚配置档。
模式分组客户端同样执行固定版本签名补丁:模式项和「专业安全模式」入口在点击捕获阶段处理,避免浏览器翻译或 DOM 增强扩展截断子节点的冒泡事件,导致菜单关闭后仍回到原模式。
以下组件不会部署:av-evasion、dsh-refusal-guard、dsh-webshell-mgr。上游代码以提交 e549e0f2fa515cce5f71842088f75333e7e997e7 的 HTTPS 归档固定,配置器会备份配置档与锁文件,失败时回滚。检查状态: powershell
node "$env:USERPROFILE\.dsh\profiles\web\node_modules\@howmp\dsh-pentest\scripts\configure-redteam-suite.mjs" --status
红队工作流
1. 创建目标并记录授权说明。
2. 建立侦察 intent,归档子域名、端点、端口、框架和其他资产。
3. 将资产标记为 eligible、unknown 或 excluded,只有符合范围的资产才进入主动测试。
4. 为资产登记覆盖项,按业务面和证据强度创建去重的测试任务。
5. 深度测试 intent 填写 evidencePlan.expected、negative、stopConditions 和 fallback,使验证目标可证伪、可停止、可降级。
6. 子代理通过 pentest_submit 提交事实、资产、覆盖状态和已复核结果;网络中断时使用相同 submissionId 重试。
7. 阶段切换前调用 pentest_gate;pentest_state.workflow.nextActions 是重启、重连或「继续」后的恢复入口。
8. 输出前检查任务、覆盖项、待验证线索和未测试资产;只有四道门禁全部通过时才生成最终报告。
使用边界
本项目仅用于明确授权的安全测试、内部审计、训练环境和本地代码审查。默认优先只读验证、测试账号和可回滚字段;不登出或吊销用户会话,不修改他人对象、密码、角色、订单或资金。详细攻击载荷不会作为盲扫指令自动执行,所有漏洞都需要可复现证据和范围确认。
界面预览
模式选择
安全测试模式选择
对话与执行
对话与执行
探索链路
探索链路
漏洞视图
漏洞视图
资产视图
资产视图
测试报告
测试报告
架构速览
- 领域模型(src/dsh-pentest/src/spec.ts):storage domain pentest(version 2)——goals / intents / facts / findings / assets / tasks / coverage / submissions / edges。边即链路词汇:spawns(goal→intent)、
yields(intent→fact)、derived_from(fact→intent)、proves(intent→finding),资产关系用 parent(asset→asset)。
finding 必填可复现步骤、赏金资格与观察/对照/影响证据;任务、覆盖项和提交批次支持断点续跑与幂等重试。
- 确定性 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 / pentest_update_asset / pentest_update_task / pentest_add_coverage / pentest_state / pentest_gate / pentest_graph / pentest_report。资产、覆盖项和任务均带状态门槛。
- 会话投影(projection.ts):折叠已日志化的 pentest_ 调用为 { goal, nodes, assets, tasks, coverage, edges, counts, completion, workflow },镜像 store 的引用拒绝;上限各 200,并支持旧日志回放。
- Web 标签页(src/dsh-client-ui-pentest):按会话注册(当前会话或列表祖先链含 pentest / redteam 预设即显示,其他会话隐藏);主标签按模式显示“挖洞”或“红队”,含四个子标签——探索链路(@xyflow/react 图,边带关系胶囊:意图链/产出/推导自/证实)、漏洞(严重度/描述/可复现步骤/影响资产)、资产(列表/图两种模式)、报告(Markdown 渲染、复制与保存)。
- 协议(instructions.ts):系统提示词段 pentest:protocol(order 50)按 bughunt / redteam 配置生成;两者共同强制授权边界、低噪声 WAF 策略和独立复核,红队额外启用阶段门禁和恢复协议。
- Skill 融合(src/dsh-pentest/src/clown-skill.ts):吸收 clown-src-6k 的锁面/自由跳节奏、一种子闭环、短表与价值排序、黑盒/白盒双轨、按特征选择知识模块和阶段自检;详细载荷资料不作为盲扫指令注入。
- Redteam 工作流与能力套件(src/dsh-pentest/src/redteam-model-bridge.ts、scripts/configure-redteam-suite.mjs):依据 MIT 许可项目 SeaOf0/dsh-redteam-model 重写适配核心门禁,并以安全白名单部署专业模式和运行时插件;适配清单见 docs/REDTEAM-MODEL-INTEGRATION.md。
已知边界
- 数据库:安全测试记录写入 $DSH_HOME/storages/pentest-sessions.db(sqlite,经 bundle 补丁路由)。
宿主其它域的存储不受影响(仍为宿主默认 json 后端)。
- 授权:只测试有授权的目标。pentest_add_goal 的 authorization 参数可填写授权说明(授权对象 / 书面许可引用),会写入状态与最终报告留痕;它只是审计事实,不是门禁——扫描/利用动作仍受部署沙箱与审批约束。
- 记录按单会话作用域;同一会话在进程重启、页面重连或“继续”后会依据任务 checkpoint、租约和提交幂等记录续跑。
重新开始一次 engagement 仍需明确调用新的 pentest_add_goal,它会清空当前会话探索图。
- Web 图为窗口视图:会话投影各保留最新 200 个节点/资产/边(超出后最旧被逐出,悬挂边同步清理)。
UI 计数与图反映的是该窗口;完整记录以 pentest_state / pentest_report(读存储层)为准。
- 图布局为静态分层(可平移缩放,节点不可拖拽)。
- 运行时要求:sqlite 后端使用 Node.js node:sqlite,宿主运行时需 Node.js >= 22.5。
目录结构
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 # 宿主安全测试插件:pentest_* 工具 + 双模式协议 + 会话投影 │ ├── preset-root.js # 旧版注册预设目录;DSH 0.2 直接注册 preset 声明 │ ├── storage-sqlite.js # 安全测试记录专用的 sqlite 后端(node:sqlite) │ ├── ui-pentest.js # Web 插件宿主半:空 apply │ ├── 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/ # 「挖洞模式」智能体预设(保留旧 ID) ├── preset/redteam/ # 「红队模式」智能体预设(阶段门禁与恢复) ├── scripts/configure-redteam-suite.mjs # 固定上游版本、安全过滤、配置档事务安装与模式部署 ├── images/ # README 界面预览截图 └── README.md
参考项目
- ARTEX
- SeaOf0/dsh-redteam-model(MIT;阶段门禁、恢复与证据治理思路)预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
baianquanzu/dsh-pentest
可恢复的 DSH 渗透测试模式:资产归档、证据复核、断点续跑与 Web 可视化
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4