dsh-exploit-kit
DiscoveredVulnerability Exploitation Primitive Library: Consolidate penetration-testing range experience into composable exploitation primitives (command injection / weak typing / web bypass / JWT / serialization / ECB block splicing), with the model handling strategy and the tools handling generation.
dsh-exploit-kit
一句话:把打靶场沉淀下来的利用原语固化成 6 个生成工具——模型负责策略(判断漏洞类型、组合攻击链),工具负责生成(候选矩阵、构造串、拼接方案)。
为什么值得用:渗透联调里最费时的不是「想」,而是「把同一类构造反复手写一遍」——命令注入的分隔符×绕过组合、PHP 弱类型的各种比较怪癖、JWT 弱密钥试签、反序列化的属性可见性编码、ECB 的填充对齐算术。这些枚举与算术不该每次重新推导。本插件把 6 类原语做成纯函数生成器:给定参数直接吐候选 + 原理说明,还顺带把踩过的坑写进每个候选的 note。
能力
| 工具 | 用途 |
|---|---|
xp_cmdi_payload | 命令注入候选矩阵:分隔符(semicolon/pipe/and/or/newline/subshell/backtick)× 绕过(none/space_ifs/base64/case/glob/null_byte/path_concat),可指定 shell(sh/bash/cmd/perl) |
xp_php_juggling | PHP 弱类型/特殊绕过:strcmp_array / strstr_numeric / loose_compare / md5_loose / type_magic(含 SQL truncation 场景),输出候选值 + 命中目标 + 原理 |
xp_web_bypass | Web 过滤绕过:lfi_double / lfi_relative / null_byte / glob_obfuscate / log_poison / encode——输出构造串 + 适用目标 + 说明 |
xp_jwt_forge | JWT 伪造:mode=bruteforce(用内置常见弱密钥词表逐个试签给定 token,命中即回报来源)或 mode=forge(用给定 secret 自签,并按 username 补 sub/role/iat/exp);alg 支持 HS256/HS384/HS512 |
xp_serialize_php | PHP 反序列化串构造:按 visibility(默认 private)编码属性名,可选 base64/urlEncode 包装,并可给出 Phar metadata 构造步骤 |
xp_ecb_splice | AES-ECB 块拼接方案:ECB 判定法、填充对齐计算、oracle 调用清单、密文块拼接位置、坑点清单(blockSize 默认 16、escapeChar 默认 \) |
所有枚举值取自源码联合类型(逐字),完整签名见 docs/semantic.md §4.2。
快速开始
1) 装依赖(自研插件家园 self-plugins/,在目标 profile 的 package.json 加 link 依赖):
"dsh-exploit-kit": "link:<工作区>/self-plugins/dsh-exploit-kit"
2) 挂组合(web profile patch 行;默认配置即可用):
- insert:
- id: agent-exploit-kit
name: dsh-exploit-kit
3) 30 秒验证(纯离线、零副作用):调 xp_cmdi_payload 传 command: "id" → 应返回 {ok: true, payloads: [...], count: N}(每个候选带 sep/bypass/note);再跑 npm test 看 115 例全绿。工具列表里能看到 6 个 xp_* 即挂载成功。
配置
| 项 | 默认 | 说明 |
|---|---|---|
enabled | true | ⚠ 仅用于日志(挂载时打一行 info)——不控制工具注册,6 个工具挂载即注册 |
组合行当前无 config。
落盘与自证(出问题时先看这里)
每次工具调用落 2 行 JSONL 到 <DSH_HOME>/exploit-kit-trace.jsonl(DSH_HOME 缺省 ~/.dsh):
| 阶段 | 含义 |
|---|---|
begin | 收到调用(action = 工具名 / payload 参数摘要脱敏 / build / pid) |
end | 调用结束(ok / count / resultBytes / durationMs / 失败时 error = classifyBreak 断点分类) |
本插件是纯本地生成器(无子进程),所以轨迹里没有
exitCode字段——结果质量由count(生成候选数)与resultBytes表达。
一条命令答五问:
tail -2 "$DSH_HOME/exploit-kit-trace.jsonl"
# ① 跑的是哪个构建 → build = "<版本>@<lib/index.js mtime ms>" + pid
# ② 谁发起 / 生成什么 → action(6 个工具名之一)+ payload(参数脱敏摘要)
# ③ 断在哪一段 → phase 枚举(begin/end)+ error 断点分类;有 begin 无 end = 中断
# ④ 结果质量 → ok / count(候选数)/ resultBytes;count=0 且 ok=false 即参数不足
# ⑤ 耗时与预算 → durationMs(本地生成应为毫秒级;异常拉长说明参数爆炸)
隐私与安全:轨迹对参数做脱敏(敏感键只记长度);IO 失败一律吞错返回 false,绝不改变工具返回值。唯一的 fs 出口就是这条轨迹——src/index.ts 无 node:http/node:fs 导入,由 tests/tool-contract.test.mjs 的最小白名单守卫 + 4 条断言钉死。
生效判据与回退
生效判据(三选一,按可靠性排序):
- 进程级:
tail -1 "$DSH_HOME/exploit-kit-trace.jsonl"里build的 mtime 等于self-plugins/dsh-exploit-kit/lib/index.js的 mtime ⇒ 进程在跑当前构建; - 生态级:
plugin_boot_status的liveNow含本插件,或plugin_inspect dsh-exploit-kit显示 mounted; - 行为级:工具列表里有 6 个
xp_*,且调用后轨迹文件 mtime 前进。
注意:重新构建 ≠ 生效——
lib/index.jsmtime 新只证明「构建过」,进程启动时间晚于产物 mtime 才算「在跑它」。改完源码必须npm run build并让预检看到新产物。
回退:
- 源码级:
git -C self-plugins/dsh-exploit-kit revert <commit>→npm run build→preflight_check→ 哨兵重启; - 组合级:patch 里给
agent-exploit-kit行加disabled: true(或移除该行)→ 哨兵重启; - 运行期:无需回退(零持久业务状态;
exploit-kit-trace.jsonl可随时删除)。
测试
npm run build && npm test # build = tsc;test = node --test "tests/*.test.mjs"
115 例离线测试全绿(2026-09-14 实测 # pass 115 / # fail 0),跑 lib/ 产物(与运行时同源,不得 import src/):
tests/primitives.test.mjs— 6 类原语的生成逻辑:分隔符×绕过矩阵完备性、JWT 签名(node:cryptoHMAC 三档)与弱密钥试签命中/未命中、反序列化属性可见性编码、ECB 填充对齐与 oracle 计划、各工具的失败路径(参数不足 →ok:false+ 明确 error)tests/normalize.test.mjs— 入参归一化:properties强制转换、Number转换与两道守卫(prefixLen/injectOffset为 0/NaN 即拒)、JWT 报告渲染(候选密钥裁剪上限)tests/tool-contract.test.mjs— 接线契约与零副作用守卫:6 个工具名逐字一致、output.schema严格形状、最小白名单(除轨迹层外无node:fs/node:http/子进程出口)tests/trace.test.mjs— 轨迹层:路径解析、脱敏、classifyBreak、尸体测试(不可写路径 → 返回false且不抛)
不需要网络、不需要 WSL、不需要任何靶场——纯本地标准 Node,零 IO 零子进程。真实利用链(生成 → 投递 → 观察)不在单测范围,属线上攻坚时的人工组合。
设计要点
- I1 零副作用:6 个工具均不发网络请求、不投递、不写文件;生成原语模块连
node:fs都不导入。唯一 fs 出口是观测层trace.ts。这是本插件的安全基座——工具只造弹药,不开枪。 - I2 不抛异常:每个
execute用try/catch包住,异常转{ok:false, error};调用方永远拿到可判断的结构。 - I3 生成不判定:工具返回「候选 + 原理」,从不下「目标有漏洞」的结论——判定权在模型(这是与「扫描器」的本质区别)。
- I4 参数缺省 = 全生成:过滤数组缺省或为空数组时展开全部种类(
.length判空,与「不传」同义)。 - I5 工具数固定 6:
xp_cmdi_payload/xp_php_juggling/xp_web_bypass/xp_jwt_forge/xp_serialize_php/xp_ecb_splice。 - I6 可测:全部决策逻辑都是
src/*.ts的具名导出纯函数,apply()只做接线(注册 + try/catch + 渲染)——单测直连lib/*.js,不需要 ctx / host / 网络。 - schema 坑(已固化):
dsh-tools的 object 参数必须显式additionalProperties,否则严格校验会拒——6 个工具的output.schema都按此写。
安全边界(重要)
- 授权边界:仅限自有环境 / 明确授权 / 靶场使用。本插件不是漏洞扫描器,也不是攻击执行器:它只按要求生成候选构造,实际投递需由模型组合 HTTP/SSH 工具完成——用它做什么、对谁做,责任在调用方。
- 与
dsh-cyber-range的分工:本插件管「原语生成」,otw_*管「投递与取回」——生成 ↔ 投递两段分离,是刻意的安全设计(生成面零网络,投递面可审计)。
相关文档
| 文档 | 内容 |
|---|---|
docs/semantic.md | 权威契约:定位与反定位、术语表、概念模型与不变量(I1–I6)、契约(配置 / 工具签名逐字表 / 枚举值 / 裁决表 / 调用点清单)、边界与信任、可证伪验收清单、实践修订记录、未决问题 |
| alice-digital-life | 本插件所属生态的中心索引(全部自研插件) |
技能 cyber-range | 攻防靶场实战方法论(靶场部署、打穿三步曲、反编译取证) |
技能 binary-exploitation-wargame | 二进制利用闯关方法论(OverTheWire Maze/Utumno 实战蒸馏) |
姊妹插件 dsh-cyber-range | 靶场工具面(otw_request / otw_ssh / otw_blind)——本插件的下游投递通道 |
License
MIT © jonah791
本插件属于我的数字生命爱丽丝(alice-digital-life)的 DSH 自研插件生态——50 个插件按生命/认知/感知/行动/通信/治理/呈现七层组织。
Comments
Loading…
Similar plugins
by Gavin237
DSH plugin: inject a one-line hint naming skills that match the current turn, so installed-but-forgotten methodology skills actually get used. Deterministic matching, no LLM calls, fail-open.
★ 0
NOASSERTION
TypeScript
Sep 20, 2026
dsh plugin --profile web add dsh-capability-hintby icefall7
Scouts the deepseek-harness repo and every dsh-plugin-tagged repository to discover harnesses related to your goal, then judges each as worth trying, watching, or skipping.
★ 0
MIT
JavaScript
Aug 14, 2026
dsh plugin --profile web add dsh-plugin-scoutby sutimee
DSH 命令隔离插件:让agent只能间接使用命令工具,插件内置三种审计方式,防止模型幻觉输错字符,但是命令工具却执行造成严重后果。
★ 0
MIT
JavaScript
Aug 15, 2026
dsh plugin --profile web add @sutang/dsh-command-quarantineby tancheng33
Runtime security gate on the tool pipeline: denies calls naming hosts outside an egress allowlist, redacts credentials from results at the canonical value rather than only the rendered content, and ap
★ 1
↓ 95/wk
MIT
TypeScript
Sep 22, 2026
dsh plugin --profile web add dsh-egress-guardby Rain-kl
DSH 预设编辑器插件, 支持一键破甲.
★ 148
MIT
JavaScript
Aug 27, 2026
dsh plugin --profile web add @rain-kl/dsh-preset-plusby NattoCB
DSH web_search provider that follows the conversation's routed model provider — per-provider endpoint/credential/dialect table with built-in official fallback
★ 0
MIT
JavaScript
Sep 5, 2026
dsh plugin --profile web add dsh-web-search-session-follow