Izakun/n8n-nodes-metasploit

GitHub: Izakun/n8n-nodes-metasploit

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

Stars: 0 | Forks: 0

Metasploit # n8n-nodes-metasploit [![npm version](https://img.shields.io/npm/v/n8n-nodes-metasploit.svg)](https://www.npmjs.com/package/n8n-nodes-metasploit) [![License: MIT](https://img.shields.io/npm/l/n8n-nodes-metasploit.svg)](./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攻击, 测试用例, 网络信息收集, 自动化攻击, 自动化集成, 请求拦截