Izakun/n8n-nodes-metasploit
GitHub: Izakun/n8n-nodes-metasploit
为 n8n 提供 Metasploit Framework RPC 接口的社区节点,支持在自动化工作流中驱动模块执行、payload 生成、会话管理和数据库操作。
Stars: 0 | Forks: 0

# n8n-nodes-metasploit
[](https://www.npmjs.com/package/n8n-nodes-metasploit)
[](./LICENSE)
这是一个用于 n8n 的社区节点,可通过其 MessagePack RPC API (`msfrpcd`) 驱动 **Metasploit Framework**。支持搜索和运行模块、生成 payload、管理 session 和 job、读写 Metasploit 数据库(host、service、vuln、loot 等),并在新 session 开启时自动触发工作流 —— 所有这些都可以直接在 n8n 中完成。
## 安装说明
**Settings → Community Nodes → Install** → `n8n-nodes-metasploit`。
然后创建一个 **Metasploit RPC API** 凭证(参见[凭证](#credentials)),并确保 `msfrpcd` 正在运行且可从 n8n 访问。
## 前置条件:启动 RPC daemon
该节点与 `msfrpcd`(Metasploit RPC daemon)进行通信。无论 Metasploit 是**原生安装在主机上**还是在 **Docker** 中运行,它的工作方式都是一样的 —— 该节点只会向您配置的 URL 发送 HTTP 请求。在 n8n 可以访问到的主机上启动 daemon:
```
# -U 用户 -P 密码 -S = 普通 HTTP (无 SSL) -a 绑定地址 -p 端口 -f 前台
msfrpcd -U msf -P 'change-me-strong-password' -S -a 0.0.0.0 -p 55553 -f
```
- **`-a 0.0.0.0`** 绑定所有网络接口。如果省略此项,msfrpcd 将仅监听 `127.0.0.1`,并且该主机之外的任何设备(包括 n8n container)都无法访问它。
- **`-S`** 提供明文 HTTP → 在 Base URL 中使用 `http://…`。请仅在**受信任/隔离的网络**中使用。去掉 `-S` 可要求使用 TLS → 使用 `https://…`(该节点已经兼容自签名证书)。
- **Database** 操作需要 `msfrpcd` 连接到 PostgreSQL(通过 `msfdb init`,或配置 `database.yml` + `MSF_DATABASE_CONFIG`)。如果没有数据库,它们将返回 ActiveRecord 连接错误;所有其他操作在没有数据库的情况下也能正常工作。
## 凭证(必填)
该节点**要求**提供 **Metasploit RPC API** 凭证 —— 不支持匿名访问。每次运行时都会使用您的用户名/密码调用 `auth.login`。
| 字段 | 必填 | 描述 |
|---|---|---|
| **Base URL** | ✅ | msfrpcd 的监听地址,无尾部斜杠(参见下文场景) |
| **Username** | ✅ | `msfrpcd -U` 用户(例如 `msf`) |
| **Password** | ✅ | `msfrpcd -P` 密码 —— 默认为空,**您必须填写** |
| **msfvenom / Tools Wrapper URL** | ❌ 可选 | 用于 `Payload → Generate File` 和 `Tool` 资源;否则请留空 |
`auth.login` 获取的 token 会在 MessagePack 请求正文中发送,因此无需配置任何 auth header —— 只需提供 URL + 用户名 + 密码即可。
## 连接场景 (Base URL)
请根据 **n8n 与 Metasploit 的相对运行位置**选择相应的行。所有情况下 daemon 的启动命令都是一样的(`msfrpcd -U msf -P … -S -a 0.0.0.0 -p 55553 -f`);只有您在凭证中填写的 **Base URL** 会有所不同。
| n8n 运行位置... | Metasploit 运行位置... | 使用的 Base URL |
|---|---|---|
| 原生安装在主机上 | 在**同一台**主机上 | `http://127.0.0.1:55553` |
| 在 Docker 中 | 在**宿主机**上(原生安装) | `http://host.docker.internal:55553` —— 在 Linux 上需向 n8n 服务添加 `extra_hosts: ["host.docker.internal:host-gateway"]`,或使用网桥 IP `http://172.17.0.1:55553` |
| 在 Docker 中 | 在**同一网络的 Docker 中** | `http://
:55553`(例如 `http://metasploit:55553`) |
| 任意位置 | 在另一台机器 / 局域网内 | `http://:55553` |
## 示例:完整的 Docker 堆栈
在 [`examples/docker-compose.yml`](./examples/docker-compose.yml) 中提供了一个可直接运行的堆栈(包含 n8n + Metasploit RPC + PostgreSQL + 可选的 msfvenom wrapper),以及 [`examples/database.yml`](./examples/database.yml) 和 [`examples/msfvenom-wrapper.rb`](./examples/msfvenom-wrapper.rb)。将这三个文件复制到一个文件夹中,然后执行:
```
docker compose up -d
```
然后使用以下信息创建凭证:
| 字段 | 值 |
|---|---|
| Base URL | `http://metasploit:55553` |
| Username | `msf` |
| Password | `change-me-strong-password`(必须与 compose 文件中的 `msfrpcd -P` 匹配) |
| msfvenom / Tools Wrapper URL | `http://msfvenom:8095`(可选) |
可以根据需要精简堆栈:如果不需要 Database 操作,请移除 `msf-db` 服务(以及 `metasploit` 上的两行 `MSF_DATABASE_CONFIG` / `volumes` 配置);如果不需要 `Generate File`,请移除 `msfvenom`。
## 资源与操作
| 资源 | 操作 |
|---|---|
| **Console** | Create · Get Many · Read · Write · **Run Command** · Destroy |
| **Core** | Get Version · Get/Set Global Option · Reload Modules · Get Module Stats · Get Thread List |
| **Database** | Get Hosts / Services / Vulns / Creds / Notes / Loots / Workspaces · **Import Data** (Nmap XML) · Report Host / Service / Vuln / Note |
| **Job** | Get Info · Get Many · Stop · Stop All |
| **Module** | Search · Get Info · Get Options · Get Compatible Payloads · Check · **Execute** · Get Many |
| **Payload** | Generate File(通过 msfvenom 生成具有特定格式的 payload) |
| **Plugin** | Get Many · Load · Unload |
| **Session** | Get Many · Run Shell Command · Run Meterpreter Command · Run Meterpreter Script · Get Compatible Modules · Upgrade Shell to Meterpreter · Stop · Stop All |
| **Tool** | Pattern Create · Pattern Offset · Assemble (NASM/Metasm) · Generate Egghunter · Find Bad Chars · EXE to VBA/VBS · PDF to XDP · Java Deserializer · VirusTotal · Run Tool |
| **Advanced** | **Call RPC Method** —— 原始透传至*任何* RPC 方法 |
此外,还提供了一个 **Metasploit Trigger** 节点,它可以进行轮询并在发生事件时启动工作流:新增 **session / host / service / vulnerability / credential / loot / note / job / framework event**,以及消失事件 **Session Closed** 和 **Job Finished**。
### Advanced → Call RPC Method (100% 覆盖率)
上面列出的精选操作涵盖了您日常所需的一切。对于长尾需求 —— 即任何未作为专用操作提供的 RPC 方法,或者未来 Metasploit 版本可能添加的新方法 —— 请使用 **Advanced → Call RPC Method**:
- **Method** —— RPC 方法名,例如 `session.ring_read`、`db.report_loot`、`core.stop`、`module.encode`。
- **Prepend Auth Token** —— 默认开启(登录 token 将作为第一个参数发送)。仅对于不需要 token 的方法才关闭此项。
- **Arguments (JSON Array)** —— 位于 token *之后*的位置参数,例如 `["exploit", "windows/smb/ms17_010_eternalblue"]` 或 `[{ "host": "10.0.0.5" }]`。
这使得该节点成为涵盖整个 Metasploit RPC 接口的完整客户端。
⚠️ 这是一个原始透传通道 —— 某些方法是破坏性的(例如 `core.stop` 会关闭 daemon);您需要对自己调用的内容负责。
### 结构化输出与控制台的对比
在进行链式操作时,请优先使用结构化操作(`Module → Search`、`Get Info`、`Get Compatible Payloads`、`Session/Job → Get Many`、`Database → …`):它们会返回干净的 JSON,供您直接进行过滤和映射。`Console → Run Command` 会返回原始的框架文本,以及清理过的 `lines[]` 数组和您可以重复使用的 `consoleId`(控制台是有状态的 —— `use` → `set` → `run` 的状态会被保留),这对于没有结构化 RPC 等价物的命令非常有用。
## 典型流程:search → inspect → payloads
```
flowchart LR
A["Module
Search 'eternalblue'"] -->|filter by rank| B["Pick exploit
(Code)"]
B -->|moduleName| C["Module
Get Info"]
B -->|moduleName| D["Module
Get Compatible Payloads"]
```
`module.search` 将每个模块返回为 `{ type, name, fullname, rank, disclosuredate }`。`fullname` 包含类型前缀(例如 `exploit/windows/smb/ms17_010_eternalblue`);在传递给 `Get Info`(`moduleType` + `moduleName`)或 `Get Compatible Payloads` 之前,请将其去掉(使用 `split('/')`)。
## 侦察 (Recon) → 报告 (Database)
```
flowchart LR
A["Import Nmap XML"] --> B["Get Hosts"] --> C["Get Services"] --> D["Report Vuln"] --> E["Get Vulns"] --> F["Build report (Code)"]
```
`Import Data` 接受以文本或从二进制属性输入的扫描输出,因此您可以将一个包含 Nmap XML 的“读取/下载文件 (Read/Download File)”节点直接连接到它。
## 自动响应新的 session (Trigger)
```
flowchart LR
T["Metasploit Trigger
On New Session"] -->|session_id| A["Session
Run Meterpreter Command"] --> S["Summarize (Code)"]
```
在手动(测试)模式下,触发器会返回所有当前的 session,以便您构建工作流;当处于激活状态时,它只会发送它之前未曾记录过的 session/host/loot。
## 辅助 Wrapper(可选):msfvenom + Tools
Metasploit 的某些功能存在于其 **CLI 工具**中,而不是 RPC 中:
- **格式化 payload**(`exe`、`elf`、`dll` 等) —— RPC 只能返回*原始*字节;格式化是 `msfvenom` 的功能(`Payload → Generate File`)。
- **`Tool` 资源** —— `pattern_create`、`pattern_offset`、`nasm_shell`、`egghunter`、`exe2vba`/`exe2vbs`、`pdf2xdp`、`java_deserializer`、`virustotal` 等都是位于 `tools/` 目录下的独立脚本,而不是 RPC 方法。
这两者都可以由一个您在 Metasploit 旁边运行的小型 HTTP wrapper 来提供服务(它内部会通过 shell 调用 `msfvenom` 和 `tools/` 脚本)。将凭证中的 **msfvenom / Tools Wrapper URL** 指向它即可。在 [`examples/msfvenom-wrapper.rb`](./examples/msfvenom-wrapper.rb) 中提供了一个可直接运行的 wrapper(包含接口 `POST /generate` 和 `POST /tool`);它已经在 [`examples/docker-compose.yml`](./examples/docker-compose.yml) 中配置完毕。如果您既不使用 `Generate File` 也不使用 `Tool` 资源,请将该字段留空。
对于基于文件的工具(EXE to VBA/VBS、PDF to XDP、Java Deserializer、VirusTotal),输入数据将从传入项的**二进制属性**中读取,而文件输出类工具会将其结果作为二进制属性(`data`)返回。`Run Tool` 是一个通用的逃生通道,您可以使用自己的参数、stdin 以及可选的输入/输出文件来调用任何 `tools//` 脚本。
## 构建
```
npm install
npm run build # tsc + copy icons into dist/
```
## 部署到自托管 (Docker) 的 n8n 上
n8n 会自动加载放置在 `~/.n8n/custom/node_modules/` 中的包。如果您的 n8n 数据目录是从宿主机进行绑定挂载 (bind-mounted) 的:
```
# 在 `npm run build` 之后
mkdir -p /path/to/n8n-data/custom/node_modules
cp -r . /path/to/n8n-data/custom/node_modules/n8n-nodes-metasploit
docker restart n8n
```
在运行时只需要 `package.json` 和 `dist/`(`n8n-workflow` 是由 n8n 本身提供的 peer dependency)。
## 注意事项
- 该节点**没有运行时依赖项** —— MessagePack 编解码器是内联打包的,因此它符合经验证的社区节点资格。
- 长时间运行的模块执行会返回一个 `job_id`;轮询 `Job → Get Info` / `Get Many` 即可跟踪它们的进度。
- `Session → Run Shell Command` 仅适用于 **shell** 类型的 session;对于 **meterpreter** 类型的 session,请使用 `Run Meterpreter Command`。
- **Session** 和 **Job** 字段是选择器:选择 *From List* 来挑选活跃的 session/job,或者切换到 *By ID* 直接输入 ID。
- `Module → Get Many` 支持 **Return All / Limit**(exploit 列表非常庞大)。
- 即使发生错误,msfrpcd 返回 HTTP 200;该节点会检查响应并抛出标准的节点错误(包含来自 `error_message` 的信息),因此错误情况依然会遵循 **Continue On Fail** 设置并流转到错误输出分支。
## 免责声明
本项目不隶属于 Rapid7 或 Metasploit 项目,也未获得其认可。“Metasploit” 是 Rapid7 的商标。请仅用于合法且经过授权的安全测试。
## 许可证
[MIT](./LICENSE)标签:n8n, RPC, Web报告查看器, XXE攻击, 测试用例, 网络信息收集, 自动化攻击, 自动化集成, 请求拦截