永恒之黑渗漏洞复现:原理详解+环境搭建+渗透实战(CVE-2020-0796)

目录

一、永恒之黑

1、漏洞简介

2、漏洞原理

二、环境搭建

1、受影响的系统

2、拓扑环境

3、关闭靶机防火墙

4、关闭靶机自动更新

5、确保开启靶机SMB功能

(1)配置程序

(2)启动windows功能

(3)开启SMB功能

(4)重启电脑

三、漏洞探测

1、下载PoC

2、漏洞探测

四、渗透实战

1、下载PoC

2、MSF生成木马

3、替换PoC脚本

4、MSF渗透配置

5、exploit.py攻击

6、MSF开启攻击

五、后渗透实战

1、查看ip地址

2、查看系统信息

3、查看用户身份

4、进入命令行页面

5、查看netstat

6、消除乱码

7、新建管理员账户


本文详细分析了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、新建管理员账户

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