九种安全模式一键部署,覆盖渗透到应急响应
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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.infoplugins/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
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Nanmu-del/dsh-pentest-framework-desktop
九种安全模式一键部署,覆盖渗透到应急响应
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7