CVE-2017-17215复现(华为HG532命令执行)
前言
本文对 CVE-2017-17215 的复现过程进行了记录,该漏洞位于华为 HG532 路由器,在 UPnP 服务中存在 NewStatusURL 和 NewDownloadURL 标签中的命令注入。通过向端口 37215 ,地址为 /ctrlt/DeviceUpgrade_1 发送 POST 报文进行漏洞的触发。整体而言,这个漏洞确实是目前复现过最简单的了,但自己在做的时候依然踩了一些坑…😅
固件链接
固件链接:https://pan.baidu.com/s/1bhUyY-b6rxlAj8pG3cFFjQ?pwd=98uv
提取码:98uv
漏洞定位
根据漏洞披露可知,在启动 UPnP 服务时,存在命令注入。

用 binwalk 将固件解压后,把文件系统中 /bin 目录下的 UPnP 程序给拷贝出来,使用 IDA 分析定位漏洞点时,我的思路是先对system 函数交叉引用看看,既然是命令注入,那大概率是 snprintf + system 造成的。
在对 system 交叉引用到最后一个时,果然发现了漏洞点


这里把 v4 v5 和正常字符串拼接后,直接执行了 system 命令,由于 NewStatusURL 和 NewDownloadURL 标签中的内容是用户可控,导致了命令注入漏洞
搭建复现环境
启动 qemu 之前,我是先执行 net.sh 脚本,创建了一个网桥并且设置了 tap0 接口留给 qemu
!/bin/sh |
qemu 启动脚本如下
!/bin/bash |
我运行了启动脚本 boot.sh ,但发现一直没有回显,用 ps -ef 查看,发现是 7069 号进程卡住了

经过反复尝试,将启动脚本里的 vmlinux-2.6.32-5-5kc-malta 改成 vmlinux-2.6.32-5-4kc-malta 就能成功把 qemu 给启起来(原因我也没搞明白,不知道是不是这个下载内核的版本影响)
进入 qemu 后,首先执行 ip add 命令,确保能看到 IP 并可以正常和宿主机通信

宿主机执行 scp squashfs-root.tar.gz root@10.214.140.139:/root/ 命令,将解压的文件系统传入 qemu 中(传输前最好把文件夹给压缩一下,传入后再解压)
提前用 ssh 再连一个到 qemu 上,后续执行程序 mic 时会把当前 shell 给卡住,所以先弄个 ssh(其实命令加上 & 给它放到后台运行也没问题)

移动到刚传入的 /root/squashfs-root 目录,执行下面的命令来做出隔离环境
chmod -R 777 squashfs-root |
漏洞复现
按照漏洞披露信息来看,需要先打开 37215 端口,并向该端口下的 /ctrlt/DeviceUpgrade_1 地址发送数据包。
首先执行命令 grep -r "37215" ./ ,查看字符串 37215 出现在了哪个文件里

发现 mic 包含了字符串 37215 ,猜测是该程序打开了 37215 端口,因此将 mic 运行
执行一会发现这个 ssh 连上来的终端卡住了(刚刚的命令我都是在 ssh 上来的这个终端执行的),此时查看 IP ,发现网卡 eth0 的 IP 没了,网桥 br0 的 IP 被改成了 192.168.1.1 ,也就导致 ssh 的连接断了。

执行 ifconfig eth0 192.168.110.112/24 up ,将网卡改回原本正常的 IP

宿主机执行 ping 命令,发现已经可以继续和 qemu 进行通信了(如果换回原本的 IP 还无法通信,确定一下虚拟机开的是不是桥接模式,我最开始用的是 NAT ,IP 改回正常的也依然无法通信,折腾了半天才发现要开桥接🥲)

在 qemu 中执行命令 netstat -aut 发现端口 37215 已经打开

在宿主机上执行 nmap -p- -Pn 192.168.110.112 ,对 qemu 开放的所有端口进行扫描,此时也能够看到 37215 成功的暴露了出来
使用 exp 进行攻击验证,因为找了一下隔离环境中可用的命令,发现没有什么适合反弹 shell 的。这里就只用 mkdir zikh26 创建目录的命令来演示一下效果吧
import requests |
运行 exp.py 的时候,发现脚本卡住了,于是我手动 ctrl+c 给退出了
第二次运行的时候还是卡住,然后我想着执行命令 nmap -p- -Pn 192.168.110.112 扫一下,确保端口还开着。结果扫了一下,exp.py 就正常执行了…😶🌫️

疑问
漏洞在 UPnP 里,启动的是 mic 。那肯定是 mic 经过一系列调用后执行了 UPnP ,但是我看了一下 mic 里的字符串,以及 UPnP 字符串存在的那几个程序,并没有找到这之间的关系。因此这条漏洞链最终触发的完整细节我并没探究清楚,再加网上没有找到有文章对于这部分的分析,那就先……🥴
参考文章
Huawei Home Routers in Botnet Recruitment - Check Point Research
一些经典IoT漏洞的分析与复现(新手向) - IOTsec-Zone