永恒之黑(CVE-2020-0796)
CVE-2020-0796漏洞(我把它叫做永恒之黑
)
3月10日:微软发布安全通告ADV200005,称SMBv3协议在处理某些请求的方式中存在代码执行漏洞,并提供了缓解措施。
3月11日:国外某厂商针对该漏洞发布安全防护规则更新。
3月11日:绿盟科技发布微软SMBv3协议远程代码执行漏洞(CVE-2020-0796)通告。
3月12日:微软正式发布CVE-2020-0796安全通告和漏洞修复补丁。
受影响的版本
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
首先对漏洞成因进行一波分析
CVE-2020-0796漏洞存在于受影响版本的Windows驱动srv2.sys中,由于Windows SMB更新的3.1.1版本增加了对压缩数据的支持,未对用户传输的压缩数据的合法性进行校验。
我们先搭建具有漏洞的虚拟机环境(记得关掉防火墙,被这个坑惨了):
ip:192.168.159.130
并搭建配置一台kali用来完成后面的利用拿shell:ip:192.168.159.129
漏洞发现
开始复现,首先我们利用python检测脚本对安装好的虚拟机进行检测,看看是否具有永恒之黑漏洞。
这里奉上万能的github上大佬的脚本QAQ
也可以使用nmap检测脚本(nmap赛高)
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")
看下虚拟机能否互通:
ok,准备就绪就直接开始运行脚本检测就行了(要用python3,不然会报错)
python3 scanner.py 192.168.159.130
显示Vulnerable则表示含有漏洞,否则显示NOT Vulnerable
蓝屏攻击(嘿嘿,终于可以开始了)
首先,去github找大佬的poc(github,永远滴神)
安装好依赖
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
python3 setup.py install
利用python脚本进行蓝屏攻击测试(python老劳模了):
python3 gistfile1.py 192.168.159.130
换了好几个poc,还是这个进行溢出攻击好用
拿shell
嘿嘿嘿,经过蓝屏攻击验证后我们就可以开始进一步利用漏洞构造payload进行任意代码执行的操作(后面填坑)
本作品采用《CC 协议》,转载必须注明作者和本文链接