🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

渗透测试框架桌面端 Nanmu-del/dsh-pentest-framework-desktop

DeepSeek Harness
Nanmu-del24 天前有提交已提供中文文档扫描:高危

九种安全模式一键部署,覆盖渗透到应急响应

31.3/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Nanmu-del/dsh-pentest-framework-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · security
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@dsh-external/dsh-redteam-model(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/10 21:27:01

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 128 处,展示前 74 条)
  • 读取本地文件
    lib/index.js:120
    lstatSync(target);
  • 读取本地文件
    lib/index.js:132
    if (!existsSync(pluginsRoot)) return [];
  • 读取本地文件
    lib/index.js:133
    const names = readdirSync(pluginsRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((name2) => ex
  • 读取本地文件
    lib/index.js:133
    const names = readdirSync(pluginsRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((name2) => ex
  • 读取本地文件
    lib/index.js:151
    if (!existsSync(modesRoot)) return [];
  • 读取本地文件
    lib/index.js:153
    const ids = readdirSync(modesRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((id) => existsSyn
  • 写入本地文件
    lib/index.js:229
    mkdirSync(path.dirname(file), { recursive: true });
  • 写入本地文件
    lib/index.js:245
    copyFileSync(file, backup);
  • 写入本地文件
    lib/index.js:250
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:254
    writeFileSync(temp, body, "utf8");
  • 写入本地文件
    lib/index.js:256
    renameSync(temp, file);
  • 删除本地文件
    lib/index.js:258
    rmSync(temp, { force: true });
  • 删除本地文件
    lib/index.js:273
    rmSync(snapshot.file, { force: true });
  • 写入本地文件
    lib/index.js:279
    writeFileSync(temp, snapshot.body, { flag: "wx" });
  • 删除本地文件
    lib/index.js:282
    rmSync(temp, { force: true });
  • 执行外部命令来自配置/变量
    lib/index.js:464
    if (!IS_WIN) return spawn(file, [...args], { ...options, shell: false });
  • 执行外部命令来自配置/变量
    lib/index.js:466
    return spawn(process.env.ComSpec ?? "cmd.exe", ["/d", "/s", "/c", `"${commandLine}"`], {
  • 删除本地文件
    lib/index.js:563
    if (isOurSymlink(change.destination, change.source)) unlinkSync(change.destination);
  • 删除本地文件
    lib/index.js:738
    rmSync(temp, { force: true });
  • 删除本地文件递归
    lib/index.js:818
    rmSync(staging, { recursive: true, force: true });
  • 执行外部命令运行时拼接
    deploy/deploy.mjs:411
    const q = (v) => childProcess.execSync(
  • 执行外部命令固定命令
    deploy/deploy.mjs:443
    const r = childProcess.spawnSync("cmd", ["/c", bat], { cwd: PROFILE_DIR, stdio: "inherit" });
  • 执行外部命令来自配置/变量
    deploy/deploy.mjs:447
    return childProcess.spawnSync(env.desktopExe, ["--expose-internals", env.dshBootstrap, ...args],
  • 执行外部命令来自配置/变量
    deploy/deploy.mjs:472
    return childProcess.spawnSync(IS_WIN ? `npx ${a.join(" ")}` : "npx", IS_WIN ? [] : a,
  • 发起网络请求
    plugins/dsh-attack-atlas/lib/client.js:14
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-attack-atlas/lib/client.js:18
    return fetch("/dsh-attack-atlas/" + endpoint, {
  • 发起网络请求
    plugins/dsh-campaign-memory/lib/client.js:14
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-campaign-memory/lib/client.js:18
    return fetch("/dsh-campaign-memory/" + endpoint, {
  • 发起网络请求
    plugins/dsh-hunter/lib/adapters.js:109
    const res = await fetch(url, { ...opts, signal: ac.signal, redirect: "follow" });
  • 发起网络请求
    plugins/dsh-hunter/lib/client.js:12
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-hunter/lib/client.js:16
    return fetch("/dsh-hunter/" + endpoint, {
  • 请求外部主机fofa.info
    plugins/dsh-hunter/lib/index.js:235
    const res = await fetch(`https://fofa.info/api/v1/info/my?key=${encodeURIComponent(key)}`, { signal: AbortSignal.timeout(8000) });
  • 发起网络请求
    plugins/dsh-hunter/lib/index.js:235
    const res = await fetch(`https://fofa.info/api/v1/info/my?key=${encodeURIComponent(key)}`, { signal: AbortSignal.timeout(8000) });
  • 写入本地文件
    plugins/dsh-hunter/lib/store.js:36
    if (dbPath !== ":memory:") mkdirSync(dirname(dbPath), { recursive: true });
  • 发起网络请求
    plugins/dsh-hunter/lib/verify.js:97
    const res = await fetch(url, {
  • 发起网络请求
    plugins/dsh-hunter/lib/verify.js:159
    const res = await fetch(url, { signal: ac.signal, method: l1.method, redirect: "follow" });
  • 写入剪贴板
    plugins/dsh-mcp-studio/lib/client.js:570
    void navigator.clipboard?.writeText(json).then(
  • 写入剪贴板
    plugins/dsh-mcp-studio/lib/client.js:768
    void navigator.clipboard?.writeText(json).then(
  • 执行外部命令来自配置/变量
    plugins/dsh-mcp-studio/lib/index.js:292
    const child = spawn(server.command, args, {
  • 发起网络请求
    plugins/dsh-mcp-studio/lib/index.js:330
    const response = await fetch(url, {
  • 执行外部命令来自配置/变量
    plugins/dsh-mcp-studio/src/diagnose.ts:30
    const child = spawn(server.command, args, {
  • 发起网络请求
    plugins/dsh-mcp-studio/src/diagnose.ts:73
    const response = await fetch(url, {
  • 写入本地文件
    plugins/dsh-product-subagents/lib/index.js:129
    traceStream = createWriteStream(traceFile, { flags: "a" });
  • 读取本地文件
    plugins/dsh-product-subagents/lib/index.js:166
    try { finalText = (await readFile(collectFile, "utf8")).trim() || finalText; } catch {}
  • 读取本地文件
    plugins/dsh-product-subagents/lib/index.js:178
    finalText = finalTextFromStreamJson(await readFile(traceFile, "utf8")) ?? finalText;
  • 删除本地文件递归
    plugins/dsh-product-subagents/lib/index.js:245
    handle.result.finally(() => rm(dir, { recursive: true, force: true }).catch(() => {}));
  • 发起网络请求
    plugins/dsh-redteam-results/lib/client.js:13
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-redteam-results/lib/client.js:17
    return fetch("/dsh-redteam-results/" + endpoint, {
  • 发起网络请求
    plugins/dsh-redteam-results/lib/client.js:1498
    return fetch("/dsh-hunter/verify.live", {
  • 执行外部命令固定命令
    plugins/dsh-route-boost/lib/skilltools.mjs:50
    ok = spawnSync("/bin/sh", ["-c", `command -v -- ${name} >/dev/null 2>&1`]).status === 0;
  • 执行外部命令固定命令
    plugins/dsh-scanner-tools/lib/index.js:27
    const probe = process.platform === "win32" ? spawnSync("where", [bin]) : spawnSync("/usr/bin/which", [bin]);
  • 执行外部命令来自配置/变量
    plugins/dsh-scanner-tools/lib/index.js:148
    const proc = spawnSync(bin, full, { timeout: timeoutMs, maxBuffer: 64 * 1024 * 1024 });
  • 执行外部命令来自配置/变量
    plugins/dsh-scanner-tools/lib/index.js:182
    const proc = spawnSync(bin, built.argv, { timeout: def.limits.timeoutMs, maxBuffer: 32 * 1024 * 1024 });
  • 执行外部命令固定命令
    plugins/dsh-semgrep-audit/lib/index.js:22
    const probe = process.platform === "win32" ? spawnSync("where", [bin]) : spawnSync("/usr/bin/which", [bin]);
  • 发起网络请求
    plugins/dsh-session-pulse/lib/client.js:537
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-session-pulse/lib/client.js:542
    return fetch(url, { method: "POST", headers: tok ? { "content-type": "application/json", "x-dsh-csrf": tok } : { "content-type": "application/json" },
  • 发起网络请求
    plugins/dsh-webshell-mgr/lib/client.js:14
    if (!dshCsrf[base]) dshCsrf[base] = fetch(base + "/csrf").then(function (r) { return r.json(); }).then(function (r) { return r && r.token ? r.token :
  • 发起网络请求
    plugins/dsh-webshell-mgr/lib/client.js:19
    return fetch("/dsh-webshell-mgr/" + endpoint, {
  • 写入剪贴板
    plugins/dsh-webshell-mgr/lib/client.js:542
    if (navigator.clipboard) navigator.clipboard.writeText(text);
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/generators.js:566
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/generators.js:569
    writeFileSync(filePath, item.content, "utf8");
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/generators.js:584
    const content = readFileSync(srcPath, "utf8");
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/generators.js:588
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/generators.js:591
    writeFileSync(filePath, content, "utf8");
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/index.js:151
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/index.js:153
    writeFileSync(filePath, png);
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/index.js:306
    return { generation: rec, content: readFileSync(rec.file_path, "utf8") };
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:19
    if (!existsSync(mfPath)) return null;
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:21
    try { mf = JSON.parse(readFileSync(mfPath, "utf8")); } catch { return null; }
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:26
    if (!existsSync(entryPath)) return null;
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:53
    if (!existsSync(root)) return;
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:55
    try { entries = readdirSync(root); } catch { return; }
  • 读取本地文件
    plugins/dsh-webshell-mgr/lib/plugins-registry.js:58
    try { if (!statSync(dir).isDirectory()) continue; } catch { continue; }
  • 写入本地文件
    plugins/dsh-webshell-mgr/lib/store.js:94
    if (dbPath !== ":memory:") mkdirSync(dirname(dbPath), { recursive: true });
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:fofa.info

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-settings@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 九种安全模式一键部署
  • 覆盖渗透至应急响应
  • 插件扩展

DSH 渗透测试框架桌面端(DSH Desktop / Electron):九模式 + 插件 + 一键部署 CLI

README

由 DeepSeek 最新模型翻译生成
DSH 渗透测试框架(Web 端) 基于 DeepSeek Harness 的安全评估框架:九大专业模式 + 索引式提示词 + 按需规则库 + 角色定义 + 一键部署 CLI。 本仓库是 Web 端版本;桌面端(DSH Desktop / Electron)请用 dsh-pentest-framework-desktop。 这是什么 一套把安全评估方法论工程化落地到 DSH 上的框架。核心思路: - 模式化:九个专业模式各自携带 persona、作战手册与知识库,会话按任务选模式 - 索引式提示词:顶层 AGENTS.md 只做索引(省上下文),细则按需 read - 按需规则库:派单时把规则文件路径下发给子 Agent,由它自己读 - 两层架构:主 Agent 做调度决策,子 Agent 执行;上下文保护 + 结果结构化回交 - 运行时强制:门禁校验、成果登记、覆盖图谱等由插件在运行时约束,不靠模型自觉 九大模式 | 模式 | 定位 | | redteam | 总控:任务路由 + 台账 + 全局总结(无自建门) | | pentest | 渗透测试:全流程矩阵推进 | | code-audit | 代码审计:静态分析 + PoC 验证 | | binary-analysis | 二进制分析:逆向 + 缺陷挖掘 |
展开完整文档(README 剩余 1 节)
DSH 渗透测试框架(Web 端)

基于 DeepSeek Harness 的安全评估框架:九大专业模式 + 索引式提示词 + 按需规则库 + 角色定义 + 一键部署 CLI。

本仓库是 Web 端版本;桌面端(DSH Desktop / Electron)请用 dsh-pentest-framework-desktop。

这是什么

一套把安全评估方法论工程化落地到 DSH 上的框架。核心思路:

- 模式化:九个专业模式各自携带 persona、作战手册与知识库,会话按任务选模式
- 索引式提示词:顶层 AGENTS.md 只做索引(省上下文),细则按需 read
- 按需规则库:派单时把规则文件路径下发给子 Agent,由它自己读
- 两层架构:主 Agent 做调度决策,子 Agent 执行;上下文保护 + 结果结构化回交
- 运行时强制:门禁校验、成果登记、覆盖图谱等由插件在运行时约束,不靠模型自觉

九大模式

| 模式 | 定位 |
| redteam | 总控:任务路由 + 台账 + 全局总结(无自建门) |
| pentest | 渗透测试:全流程矩阵推进 |
| code-audit | 代码审计:静态分析 + PoC 验证 |
| binary-analysis | 二进制分析:逆向 + 缺陷挖掘 |
| attack-defense | 攻防评估:外网打点到内网横向 |
| av-evasion | 免杀对抗:载荷与工具免杀 |
| incident-response | 应急溯源:失陷调查 + 攻击链还原 |
| cloud-security | 云安全攻防:云平台 + 云原生 |
| ctf-solver | CTF 解题:题面登记 + 模块路由 |

快速开始

前置:Node >= 22(DSH 本身要求)。无需预装 pnpm(经 npx 拉起)。

git clone https://github.com/Nanmu-del/dsh-pentest-framework.git
cd dsh-pentest-framework
node deploy/deploy.mjs
npx -y @deepseek-ai/dsh web # 打开 http://127.0.0.1:3080

deploy.mjs 会:

1. 铺开框架资产(全局指令 / 工作区规则 / 角色定义 / 九模式)
2. 把插件挂进 ~/.dsh/profiles/web
3. 安装依赖
4. 自检并报告结果

常用开关

node deploy/deploy.mjs --check # 离线校验,不写任何文件
node deploy/deploy.mjs --no-extras # 只装框架本体(纯本地,不依赖外部源)
node deploy/deploy.mjs --skip <包名> # 跳过指定 extras
node deploy/deploy.mjs --workspace <目录> # 指定工作区
node deploy/deploy.mjs --profile <名字> # 指定 profile(默认 web)

部署后验证

1. 新建会话,roster 列出九个模式
2. 任一会话让模型调 gates_list —— 返回多模式门禁 schema 即门禁插件生效
3. pentest/attack-defense/cloud-security/ctf-solver 会话可见扫描类工具(其余模式不可见 = preset 平面正确)
4. 发起任务后出现 [route-boost] mode=... phase=... 运行时信封快照

仓库结构

| 路径 | 内容 |
| modes/ | 九模式资产:persona + 作战手册(playbook)+ 知识库(refs)+ 技能 |
| modes.presets.patch.yml | 预设机制:九模式各声明为一个 agent-preset 行(DSH 0.2.0 机制) |
| lib/ + cordis.patch.yml | 框架主包(含设置页) |
| plugins/ | 运行时插件(门禁 / 治理信封 / 成果登记 / 覆盖图谱 / 资产测绘 等) |
| shared/ | 跨模式共享技能与资源 |
| deploy/ | 一键部署 CLI |
| pentest-rules/ | 规则库(见该目录 README) |
| .opencode/agents/ | 角色定义(见该目录 README) |
| global-AGENTS.md | 全局层指令 |

按自己的方法论文档化

框架提供结构与运行机制;pentest-rules/ 与 .opencode/agents/ 下给出建议的结构与职责划分,AGENTS.md 与 global-AGENTS.md 中标注 〔待填〕 处按自己的实践填写。

九模式的作战手册与知识库(modes//skills/、modes//refs/)随框架提供。

三层提示词结构

| 层 | 文件 | 落点 | 生效范围 |
| 全局层 | global-AGENTS.md | ~/.dsh/AGENTS.md | 该 DSH home 下所有会话 |
| 工作区层 | AGENTS.md + 规则库 | <工作区>/ | 该工作区内的会话 |
| 角色层 | .opencode/agents/* | <工作区>/.opencode/ | 派单时下发给子 Agent |

优先级:直接用户指令 > 自控指令(沙箱/审批) > 角色定义 > 工作区 AGENTS > 全局 AGENTS。

依赖与前置

- DSH >= 0.2.0-rc.2(框架按该版本适配;九模式使用 0.2.0 的 agent-preset 机制)
- Node.js >= 22
- 可选工具链:nmap / nuclei / httpx / ffuf / sqlmap 等(playbook 采用工具平面检测制,缺失时按降级链走:已装 → MCP → 询问安装 → 脚本替代)

相关仓库

- dsh-pentest-framework-desktop —— 桌面端版本
- DSH Desktop —— 上游桌面端应用
- DeepSeek Harness —— 上游内核

许可

MIT
预览分享卡片长什么样 ↓Nanmu-del/dsh-pentest-framework-desktop
分享 · DeepSeek Harness Hub
Nanmu-del/dsh-pentest-framework-desktop

九种安全模式一键部署,覆盖渗透到应急响应

回到顶部