什么是永恒之蓝
永恒之蓝是一种利用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 | proxychains4 msfconsole //让它的网络流量通过代理服务器转发 |
代理修改在/etc/proxychains.conf
1 | [ProxyList] |
打进去之后就是system权限了