上次有小伙伴反馈说,摄像头的仿真部分写的不详细,正好最近在先知上看到了ONESHELL师傅的文章**「见参考链接1」,所以今天我们就以这台路由器为例子,使用QEMU仿真模拟并分析该漏洞的成因「固件下载后台回复:** 华为路由器 」
!!文末另有福利哦!!
转发本文到朋友圈、参与抽奖获取****同款路由器
1 解压固件
尝试binwalk提取文件系统:
binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin
解压出来的有很多文件,最主要的就是squashfs文件系统这个文件夹
2 模拟仿真
首先在解包的文件系统中找一个可执行文件,使用file命令查看一下系统架构等信息
如上图所示,可以知道该系统为MIPS架构,因此我们在启动QEMU的时候需要使用MIPS的内核以及文件系统:
下载地址:
https://people.debian.org/~aurel32/qemu/mips/
因为我们期望宿主机能够和QEMU仿真机处在同一个网络环境中,所以我们要对网络进行设置,首先是在宿主机中配置tap网络:
sudo tunctl -t tap0 -u root
接下来启动QEMU:
sudo qemu-system-mips -M malta -kernel ./vmlinux-3.2.0-4-4kc-malta -hda ./debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic -s
账号密码均为root
给qemu中的仿真机设置IP地址
为了方便上传解包的文件系统,我们这里先用tar将文件系统打包
使用SCP传输文件
在QEMU仿真机中解压
挂载固件文件系统中的proc目录和dev目录到chroot环境,因为proc中存储着进程所需的文件,比如pid文件等等,而dev中存储着相关的设备
mount -o bind /dev ./squashfs-root/dev
通过ssh连接qemu,并启动路由器「此处需要再次执行chroot」
启动路由器
通过之前的qemu终端我们可以查看到ip地址已经发生变化,因此sh登陆的链接已经被断开,所以我们这里再将IP地址修改回来
这个时候再使用浏览器访问192.168.3.2即可
账号密码分别为:admin / @Hua1234,存在于固件压缩包的账号密码文件内:
3 漏洞复现
根据网上的复现文章,payload如下:
import requests
可以看到在NewStatusURL标签处注入了代码,例如上面的POC为创建一个名为hell的文件夹。
4 漏洞分析
首先需要分析出这37215端口的应用程序「此处对应的程序为upnp|怎么查找端口对应的程序可以参照我们之前的一篇文章」,然后对该程序进行逆向。从POC中可以分析,注入点是在**,通过在Ghidra中搜索该字符串,并查找交叉引用,找到目标函数「IDA不大行,没法F5,我也不知道为啥,求知道的师傅讲解」**:
我们可以看到这sprinf将418和414变量直接写入到了1040字符串,未经过任何验证就直接使用system执行
int FUN_0040749c(int param_1)
可以看到程序通过ATP_XML_GetChildNodeByName函数来获取NewDownloadURL节点的内容,然后判断结果是否为空,如果获取成功且结果不为空则继续获取NewStatusURL节点的内容,再判断结果是否空,如果不为空则将NewDownloadURL和NewStatusURL节点的内容拼接到字符串,并执行。
此处我们就可以构造插入命令执行
POC如下:
import requests
在两个注入点分别注入不同的命令,qemu仿真机建立的文件如下
5 漏洞扩展
值得一提的是,该路由器的upnp只能从内网端口访问,默认无法从外网端口访问,那我们有什么办法扩大该漏洞影响呢?
通过查阅资料,我们发现了salt@腾讯玄武实验室师傅对该漏洞的探索,如下:
要成功发起该请求需要满足以下两点:一是成功通过服务器端的HTTP基础认证,二是构造XML攻击代码。仔细观察HTTP基础认证的字段,我们可以发现,用于基础认证的用户名和密码为dslf-config:admin。因此我们只需要构造表单,使之POST到http:// dslf-config:admin @routerip:37215即可自动完成基础认证。接下来就是如何用表单来构造一个XML的请求包了
最终,salt师傅构造的CSRF攻击payload如下:
<body onload='document.forms[0].submit()'>
攻击者只要诱使用户访问包含上述代码的页面,存在漏洞的路由器就会远程下载一个bash脚本并以root的身份执行
能够将仅能在内网触发的漏洞扩大到远程攻击的想法,值得我们在每次漏洞挖掘中去思考
5 漏洞影响
在Satori僵尸网络事件中,攻击者使用的0day漏洞为华为家用路由器HG532远程执行任意代码(CVE-2017-17215),payload是名为OKIRU/SATORI,是Mirai的升级版变种。攻击发起者的昵称为Nexus Zeta
研究人员确认了漏洞后,就通报给华为,华为安全团队非常给力,很快对该漏洞进行了响应和修复,并提供了补丁
关于该僵尸漏洞的详细信息,可以阅读如下报告:https://cloud.tencent.com/developer/news/7159
Time Line:
2018-02-06 V1.5 UPDATED Updated the description
2017-12-22 V1.4 UPDATED Added the description of solution
2017-12-14 V1.3 UPDATED Added CVE-ID
2017-12-07 V1.2 UPDATED Added Temporary Fixes
2017-12-06 V1.1 UPDATED Added the IPS signature
2017-11-30 V1.0 INITIAL
参考引用:
https://xz.aliyun.com/t/8494
给小R同学加鸡腿🍗