mcpField
N
ntobjmanager-mcp

ntobjmanager-mcp

本地服务
github.com安全164 周前更新

关于 ntobjmanager-mcp

ntobjmanager-mcp 是面向安全研究人员的有状态 MCP 服务,用于研究 Windows RPC 攻击面。它结合持久 RPC 会话、实验室 VM 执行,以及针对已公开 CVE 研究方法的专用工具。

主要功能

  1. 01持久化 RPC 客户端与会话
  2. 02RPC 解析和端点发现
  3. 03CVE 研究流程工具
  4. 04在实验室 VM 中有状态执行 PowerShell
  5. 05记录工具调用审计日志

适用场景

  1. 01检查 Windows 二进制文件中的 RPC 接口
  2. 02跨调用测试上下文句柄行为
  3. 03盘点端点和已停止服务的接口
  4. 04在隔离实验室 VM 中开展 RPC 研究

MCP 相关

它通过 stdio 向 MCP 客户端提供 24 个 Windows RPC 研究工具,涵盖解析、枚举、连接、调用、模糊测试和 VM 执行。RPC 会话和存储对象可跨调用保持状态。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

🛰️ NtObjectManager-MCP

有状态的 Windows RPC 研究 MCP——将 2024–2026 年的 CVE 方法论变成一键工具

Python License PowerShell MCP

🌐 中文版


什么是 NtObjectManager-MCP?

一个 Model Context Protocol 服务,为 AI Agent 提供对 Windows RPC 攻击面的研究结果的实时、有状态访问。它基于 James Forshaw 的 NtObjectManager (NtCoreLib) 构建。

通用 PowerShell MCP 无法做到的三件事,也是本项目存在的原因:

  1. 有状态的 RPC 连接——持久化的 PowerShell 引擎可在多次工具调用之间保留已解析的 RpcServer 对象和已连接的 RPC 客户端: 执行一次 rpc_connect,即可多次调用 rpc_call(身份验证握手、上下文句柄 链和会话变量均可保留)。
  2. 将 CVE 方法论作为固定工具——2024–2026 年公开研究中的标准漏洞搜寻工作流可一键执行,无需精心编写提示词。
  3. 在实验室虚拟机中进行有状态执行——将同一套单引擎原则应用于客户机:rpc_vm_exec 通过单个持久客户机运行空间,在多次调用之间保留变量和已连接的 RPC 客户端,而不是每次调用都启动一个全新的 Shell(vmrun 回退方案会报告 stateful: false)。
┌────────────────────────────────────────────────────────────────────┐
│  AI Agent (Claude Code / OpenCode / any MCP client)                │
│      │  MCP (stdio, 24 tools)                                      │
│      ▼                                                             │
│  server.py ── snippets.py (PS templates, @@TOKEN@@ + ps_str escape)│
│      │                                                             │
│      ▼                                                             │
│  ps_engine.py ── persistent powershell.exe (base64 + __MCP_DONE__) │
│      │            state: $RPCMCP = @{ Servers; Clients; vars }     │
│      ▼                                                             │
│  NtObjectManager / NtCoreLib  ──►  RPC runtime (ALPC / pipe / TCP) │
└────────────────────────────────────────────────────────────────────┘

工具矩阵(24 个)

核心有状态流水线
工具用途
rpc_parse(file, symbol_path?)解析 PE 以查找 RPC 服务,并缓存(键为 file_N)
rpc_state()已缓存的服务 + 活动会话
rpc_get_interface(key)过程、NDR 参数、上下文句柄、严格性
rpc_query_endpoints(ifid?, search_binding?, find_alpc_port?)EPM 查询(本地或远程)
rpc_running_servers(pid?/service?)活动进程/服务枚举
rpc_connect(session, key, binding?, auth?)生成并连接客户端(有状态)
rpc_methods(session)带有操作号映射的签名
rpc_call(session, method, args_json, store_as?)通过反射调用;{"__var__"} 可传递已存储对象
rpc_disconnect(session)断开会话
虚拟机实验室桥接(有状态客户机执行)
工具用途
rpc_vm_exec(ps, timeout?, vm?)在实验室虚拟机内运行 PowerShell;状态会在多次调用之间保留(持久客户机运行空间)
rpc_vm_start_listener(vm?)部署/启动持久客户机 HTTP 引擎(vm_listener.ps1)
2024–2026 CVE 方法论工具
工具方法论来源
rpc_scan_context_handles(paths)上下文句柄类型混淆——CVE-2025-48815 模式(whereisk0shl 2026)
rpc_inventory(paths?, limit?)攻击面清点 + EPM 交叉核查——MS-RPC-Fuzzer 阶段 1(CVE-2025-26651)
rpc_fuzz(session, dry_run=True)仅对基本类型的默认值进行模糊测试,并分类为 ok/denied/error——默认 dry-run
rpc_find_hijackable()已停止服务的未注册接口——EPM 投毒 / RPC-Racer(CVE-2025-49760/59200/59230)
rpc_etw_unreachable(duration, trigger_script?)调用已失效服务端的客户端——PhantomRPC(Kaspersky 2026),需要管理员权限
rpc_interface_security(key)ALPC SD / 匿名 ACE 审计——MS-NRPC 空会话(SafeBreach/Securelist 2025)
rpc_decode_flags(flags)RpcServerRegisterIf3 标志位掩码解码
rpc_format_client(key)导出生成的 C# 客户端源代码(离线 grep 工作流)
rpc_new_struct(session, type, store_as)将 NDR 复合类型构建为会话变量
rpc_alpc_squat(name, duration)ALPC 端口占位 + 连接捕获(竞态验证基本工具)
rpc_accessible_tasks()用户可启动的任务(Dark-Elevator 链材料,CVE-2026-66804 模式)
rpc_vars / rpc_clear_cache会话变量和缓存管理(淘汰上限为 150)

每次工具调用都会追加记录到 output/mcp_audit.log。

实测验证(真实机器,完整狩猎流程)

候选项结果
srvsvc.dll 98716d03… 标记为 HIGH识别为 XactSrv(XsOpenPrinter/XsClosePrinter/XsAddJob/XsScheduleJob)——单一打印机句柄类型;实时探测:非管理员可连接,但 XsOpenPrinter → ACCESS_DENIED(授权门控有效)。已记录扫描器误报模式
ssdpsrv.dll(CVE-2025-48815 原始问题)全部 20 个上下文句柄均为 strict——当前版本已修补
51 模块扫描31 个发现项,6 个 HIGH,均为“一个生产者 → 多个使用者”;NDR 层无法证实多种类型句柄(需要 RE)
EPM 劫持面10 个已停止服务存在未注册接口(AppIDSvc、ClipSVC、dcsvc……)
任务链清点出 44 个用户可启动的 SYSTEM 任务
结论在受测主机上没有可确认的可利用漏洞——每个步骤均有证据

🚀 快速开始

# 1) Prerequisites (one-time)
Install-Module NtObjectManager -Scope CurrentUser -Force
pip install -r requirements.txt            # mcp>=1.2.0 (1.x / 2.x compatible)

# 2) Verify — three suites, all green
python tests\smoke_test.py                 # 17 checks (live MCP stdio round-trip)
python tests\var_test.py                   # 10 checks (store_as / __var__ mechanics)
python tests\audit.py                      # 43 checks (edge cases, hostile paths, concurrency)

# 3) Run the server
python server.py                           # stdio MCP

Claude Code:

claude mcp add ntobjectmanager-rpc -- python C:\path\to\ntobjmanager-mcp\server.py

任意 MCP 客户端(例如 OpenCode opencode.json):

{
  "mcp": {
    "ntobjectmanager-rpc": {
      "type": "local",
      "command": ["python", "C:\\path\\to\\ntobjmanager-mcp\\server.py"],
      "enabled": true
    }
  }
}

示例:上下文句柄类型混淆(CVE-2025-48815 模式)

1. rpc_parse  C:\Windows\System32\target.dll  [symbol_path optional]
2. rpc_scan_context_handles ["C:\\Windows\\System32\\target.dll"]
3. rpc_get_interface target_0                 → producer ([out] ctx) / consumer ([in] ctx) pairs
4. rpc_connect s1 target_0                    → auto-discovers binding via EPM
5. rpc_methods s1                            → opnum-mapped signatures
6. rpc_call s1 XsOpenPrinter-like args store_as="h"   → keep the raw handle object
7. rpc_call s1 XsClosePrinter-like [{"__var__":"h"}] → feed it to the other type

store_as / {"__var__"} 是核心链路基本工具:RPC 返回对象在不同调用间无需序列化往返即可传递,这正是测试生产者→使用者句柄混淆所需的能力。

📁 项目结构

ntobjmanager-mcp/
├── server.py            # 24 MCP tools + audit logging wrapper
├── snippets.py          # PowerShell templates (@@TOKEN@@ render + ps_str escaping)
├── ps_engine.py         # Persistent engine: base64 cmds + __MCP_DONE__ markers, timeouts
├── wrapper.ps1          # PS-side loop (state lives in $RPCMCP)
├── vm_listener.ps1      # Persistent guest HTTP bridge (stateful VM exec)
├── tests/
│   ├── smoke_test.py    # 17 checks — live stdio end-to-end
│   ├── var_test.py      # 10 checks — store_as/__var__ object passing
│   ├── audit.py         # 43 checks — hostile inputs, concurrency, engine kill/restart
│   ├── hunt.py          # Full dogfood hunting round (safe policy)
│   ├── hunt2_static.py  # Deep-dive: symbols + producer/consumer map
│   ├── hunt2_wide.py    # 51-module sweep
│   └── hunt2_probe.py   # Safe runtime probes (exposure / task cross-ref)
├── ARCHITECTURE.md      # Engine protocol + design decisions
├── CHANGELOG.md         # Decision history (R1–R13)
├── SECURITY.md          # Authorized-use policy + MSRC disclosure
├── CONTRIBUTING.md      # Development invariants
└── LICENSE              # MIT

🛡️ 如实说明能力边界

声明状态
跨工具调用的有状态客户端是——持久化引擎 + $RPCMCP
在实验室虚拟机内有状态执行是——一个持久化的来宾运行空间(rpc_vm_exec);vmrun 回退方案为无状态
上下文句柄链式传递(生产者 → 使用者)是——通过 store_as / __var__ 传递原始对象
自动确认类型混淆否——NDR 无法证实句柄类型不同;需通过 RE 验证(参见 XactSrv 案例)
完整的恶意 RPC 托管否——NtObjectManager 2.0.1 未提供服务端构建器;rpc_alpc_squat 仅支持竞态捕获
ETW 跟踪 / ALPC SDDL需要管理员权限(logman / SeDebugPrivilege)
符号解析的过程名称取决于环境(symsrv 链);否则使用启发式回退名称
在 Windows PS 5.1 以外的环境运行尚未支持(未测试 pwsh 7)

📖 文档

⚠️ 免责声明

仅用于合法的安全研究、教育和授权测试。 rpc_call 会调用真实的 RPC 方法,可能导致服务崩溃——请在隔离的虚拟机中运行,切勿在生产主机或日常使用的主机上运行。通过此工具发现的漏洞必须遵循负责任的漏洞披露流程(MSRC)。

📄 许可证

MIT — 版权所有 (c) 2026 ntobjmanager-mcp Contributors

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。