Skip to content

Repository files navigation

Metasploit

n8n-nodes-metasploit

npm version License: MIT

Community node for n8n that drives the Metasploit Framework through its MessagePack RPC API (msfrpcd). Search and run modules, generate payloads, manage sessions and jobs, read/write the Metasploit database (hosts, services, vulns, loot…) and trigger workflows automatically when a new session opens — all from n8n.

⚠️ Authorized testing only. This node automates an offensive-security framework. Use it exclusively against systems you own or are explicitly authorized to test. You are responsible for complying with all applicable laws and rules of engagement.

Installation

Settings → Community Nodes → Installn8n-nodes-metasploit.

Then create a Metasploit RPC API credential (see Credentials) and make sure msfrpcd is running and reachable from n8n.

Requirements: start the RPC daemon

The node talks to msfrpcd (the Metasploit RPC daemon). It works the same whether Metasploit is installed natively on a host or run in Docker — the node just makes HTTP requests to whatever URL you configure. Start the daemon on a host n8n can reach:

# -U user  -P password  -S = plain HTTP (no SSL)  -a bind addr  -p port  -f foreground
msfrpcd -U msf -P 'change-me-strong-password' -S -a 0.0.0.0 -p 55553 -f
  • -a 0.0.0.0 binds all interfaces. If you omit it, msfrpcd listens only on 127.0.0.1 and nothing outside that host (including an n8n container) can reach it.
  • -S serves plain HTTP → use http://… in the Base URL. Only do this on a trusted / isolated network. Drop -S to require TLS → use https://… (the node already tolerates self-signed certs).
  • The Database operations need msfrpcd connected to PostgreSQL (via msfdb init, or a database.yml + MSF_DATABASE_CONFIG). Without a database they return an ActiveRecord connection error; every other operation works without one.

Credentials (required)

The node requires a Metasploit RPC API credential — there is no anonymous access. auth.login is called with your username/password on every run.

Field Required Description
Base URL Where msfrpcd listens, no trailing slash (see scenarios below)
Username the msfrpcd -U user (e.g. msf)
Password the msfrpcd -P password — the field is empty by default, you must fill it
msfvenom / Tools Wrapper URL ❌ optional For Payload → Generate File and the Tool resource; leave empty otherwise

The token from auth.login is sent in the MessagePack request body, so there is no auth header to configure — just URL + username + password.

Connection scenarios (Base URL)

Pick the row matching where n8n runs relative to Metasploit. The daemon command is the same in all cases (msfrpcd -U msf -P … -S -a 0.0.0.0 -p 55553 -f); only the Base URL you put in the credential changes.

n8n runs… Metasploit is… Base URL to use
natively on a host on the same host http://127.0.0.1:55553
in Docker on the host (native install) http://host.docker.internal:55553 — on Linux add extra_hosts: ["host.docker.internal:host-gateway"] to the n8n service, or use the bridge IP http://172.17.0.1:55553
in Docker in Docker on the same network http://<service-name>:55553 (e.g. http://metasploit:55553)
anywhere on another machine / LAN http://<machine-ip>:55553

If msfrpcd runs without -S (TLS on), use https:// instead of http:// in any of the rows above.

Example: full Docker stack

A ready-to-run stack (n8n + Metasploit RPC + PostgreSQL + optional msfvenom wrapper) is in examples/docker-compose.yml, with examples/database.yml and examples/msfvenom-wrapper.rb. Copy the three files into a folder and:

docker compose up -d

Then create the credential with:

Field Value
Base URL http://metasploit:55553
Username msf
Password change-me-strong-password (must match msfrpcd -P in the compose file)
msfvenom / Tools Wrapper URL http://msfvenom:8095 (optional)

Trim the stack to taste: drop the msf-db service (and the two MSF_DATABASE_CONFIG / volumes lines on metasploit) if you don't need the Database ops, and drop msfvenom if you don't need Generate File.

Resources & operations

Resource Operations
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 (formatted payload via msfvenom)
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 — raw passthrough to any RPC method

Plus a Metasploit Trigger node that polls and starts a workflow on events: new session / host / service / vulnerability / credential / loot / note / job / framework event, plus disappearance events Session Closed and Job Finished.

Advanced → Call RPC Method (100% coverage)

The curated operations above cover everything you normally need. For the long tail — any RPC method not surfaced as a dedicated operation, or a new one added by a future Metasploit release — use Advanced → Call RPC Method:

  • Method — the RPC method name, e.g. session.ring_read, db.report_loot, core.stop, module.encode.
  • Prepend Auth Token — on by default (the login token is sent as the first argument). Turn off only for methods that take no token.
  • Arguments (JSON Array) — the positional args after the token, e.g. ["exploit", "windows/smb/ms17_010_eternalblue"] or [{ "host": "10.0.0.5" }].

This makes the node a complete client for the whole Metasploit RPC surface. ⚠️ It is a raw passthrough — some methods are destructive (e.g. core.stop shuts the daemon down); you are responsible for what you call.

Structured output vs the console

Prefer the structured operations (Module → Search, Get Info, Get Compatible Payloads, Session/Job → Get Many, Database → …) for chaining: they return clean JSON you can filter and map directly. Console → Run Command returns the raw framework text plus a cleaned lines[] array and a consoleId you can reuse (the console is stateful — usesetrun persist), useful for commands with no structured RPC equivalent.

Typical flow: search → inspect → payloads

flowchart LR
    A["Module<br/>Search 'eternalblue'"] -->|filter by rank| B["Pick exploit<br/>(Code)"]
    B -->|moduleName| C["Module<br/>Get Info"]
    B -->|moduleName| D["Module<br/>Get Compatible Payloads"]
Loading

module.search returns each module as { type, name, fullname, rank, disclosuredate }. fullname includes the type prefix (e.g. exploit/windows/smb/ms17_010_eternalblue); strip it (split('/')) before passing to Get Info (moduleType + moduleName) or Get Compatible Payloads.

Recon → report (Database)

flowchart LR
    A["Import Nmap XML"] --> B["Get Hosts"] --> C["Get Services"] --> D["Report Vuln"] --> E["Get Vulns"] --> F["Build report (Code)"]
Loading

Import Data accepts the scan output either as text or from a binary property, so you can chain a "Read/Download File" node holding an Nmap XML straight into it.

Auto-respond to a new session (Trigger)

flowchart LR
    T["Metasploit Trigger<br/>On New Session"] -->|session_id| A["Session<br/>Run Meterpreter Command"] --> S["Summarize (Code)"]
Loading

In manual (test) mode the trigger returns all current sessions so you can build the flow; when active it only emits sessions/hosts/loot it has not seen before.

The helper wrapper (optional): msfvenom + Tools

Some capabilities live in Metasploit's CLI tools, not the RPC:

  • Formatted payloads (exe, elf, dll, …) — the RPC only returns raw bytes; formatting is a msfvenom capability (Payload → Generate File).
  • The Tool resourcepattern_create, pattern_offset, nasm_shell, egghunter, exe2vba/exe2vbs, pdf2xdp, java_deserializer, virustotal, etc. are standalone scripts under tools/, not RPC methods.

Both are served by a single small HTTP wrapper you run alongside Metasploit (it shells out to msfvenom and the tools/ scripts). Point the credential's msfvenom / Tools Wrapper URL at it. A ready-to-run wrapper is examples/msfvenom-wrapper.rb (endpoints POST /generate and POST /tool); it is already wired up in examples/docker-compose.yml. Leave the field empty if you use neither Generate File nor the Tool resource.

For file-based tools (EXE to VBA/VBS, PDF to XDP, Java Deserializer, VirusTotal) the input is read from a binary property on the incoming item, and file-output tools return their result as a binary property (data). Run Tool is a generic escape hatch to invoke any tools/<category>/<name> script with your own arguments, stdin and optional input/output files.

Build

npm install
npm run build   # tsc + copy icons into dist/

Deploy to a self-hosted (Docker) n8n

n8n auto-loads packages placed in ~/.n8n/custom/node_modules/. If your n8n data dir is bind-mounted from the host:

# after `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

Only package.json + dist/ are needed at runtime (n8n-workflow is a peer dependency provided by n8n itself).

Notes

  • The node ships no runtime dependencies — the MessagePack codec is bundled inline so it can qualify as a verified community node.
  • Long-running module executions return a job_id; poll Job → Get Info / Get Many to follow them.
  • Session → Run Shell Command works on shell sessions; use Run Meterpreter Command for meterpreter sessions.
  • Session and Job fields are pickers: choose a live session/job From List, or switch to By ID to type one directly.
  • Module → Get Many supports Return All / Limit (the exploit list is large).
  • msfrpcd returns HTTP 200 even on failure; the node inspects the response and raises a proper node error (message from error_message), so failures respect Continue On Fail and the error output branch.

Disclaimer

This project is not affiliated with or endorsed by Rapid7 or the Metasploit project. "Metasploit" is a trademark of Rapid7. Use only for lawful, authorized security testing.

License

MIT

About

n8n community node for the Metasploit Framework RPC (modules, sessions, payloads, database, tools & triggers). Authorized testing only.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages