zoukankan      html  css  js  c++  java
  • 通过qemu复现路由器漏洞

    目录

      简介

      环境搭建

      固件解包

      复现漏洞,IDA调试

      参考资料


    简介

    • qemu和vmware一样,一种虚拟机软件,只不过qemu能够虚拟的平台更加丰富一些。能够虚拟很多嵌入式平台的设备。
    • 工作上需要向着智能硬件方向探索,暂时用qemu模拟设备来积累经验。
    • 这次是简单分析一些路由器的漏洞,mips架构。
    • 当然,qemu对存储器和外设的虚拟是欠缺的,如果涉及到这些资源,可能漏洞就没法复现了
    • 本次主要侧重于使用,原理方面,因为自己才接触也不敢说很清楚。

    环境搭建

    • 选取debian系统
    • 安装binwalk

    -git clone https://github.com/devttys0/binwalk.git

    -按照INSTALL.md说明安装依赖库

    -安装binfmt-support(用来指定某种格式的二进制文件的解释器,目前似乎没有用到)

    • 安装qemu

    -安装qume-user-static(用户态执行固件里面的程序,apt-get install qume-user-static)

    -安装qemu、qemu-system(apt-get install qemu qemu-system,目前用到的是qemu-system)

    • 配置网络,搭建网桥

    -apt-get install bridge-utils uml-utilities

    -修改/etc/network/interfaces内容

    -修改/etc/qemu-ifup内容

    我的环境搭建是按照[参考资料一]的指导来进行的。


    固件解包

    • 从各厂商官网提供的下载页面选取要分析的固件
    • 解包命令

    -Binwalk –Me 固件路径

      固件解包一般比较简单。用现有的工具,能解出来就可以分析,如果解不出来,我的功力不够,没法手工提取文件系统了。


    复现漏洞,IDA调试

    下面两个例子是我根据[参考资料二、三]来复现的,毕竟没有实际的设备,一上来只能找一些公开的漏洞来学习。

    用户模式

      这个例子是根据[参考资料二]进行的,用qemu单独运行一个程序,这个比较方便调试。

    • 示例:my_cgi.cgi
    • 运行脚本(见代码1)
    • qemu-mips-static参数,-E 指定环境参数

    代码1 运行脚本

    #!/bin/bash
     
    INPUT="$1"
    LEN=$(echo -n "$INPUT" | wc -c)
    PORT="1234"
     
    if [ "$LEN" == "0" ] || [ "$INPUT" == "-h" ] || [ "$UID" != "0" ]
    then
        echo -e "
    Usage: sudo $0 
    "
        exit 1
    fi
     
    cp $(which qemu-mipsel-static) ./qemu
     
    echo "$INPUT" | chroot . ./qemu -E REQUEST_METHOD="POST" -E CONTENT_LENGTH=$LEN -E CONTENT_TYPE="application/x-www-form-urlencoded" -E REMOTE_ADDR="1.1.1.100" -g $PORT ./usr/bin/my_cgi.cgi 2>/dev/null

      运行运行指令

    图1 运行脚本等待调试

      结果

    图2 运行结果

    这个例子运行起来还是比较简单的,把运行脚本复制到固件解开的文件系统根目录下就可以运行了。

    系统模式

      这个例子是根据[参考资料三]来进行的。将整个固件包解开的文件系统制作为一块硬盘镜像,然后用qemu系统模式运行一个Malta平台的linux系统内核,这样内核就可以识别到这个硬盘镜像了。

    • 需要固件包解开后的整个文件系统
    • 运行qemu-system命令,加载操作系统和文件系统,将固件的文件系统通过一些方式添加到系统里面(诸如ftp、以磁盘镜像格式当做第二块磁盘附加到操作系统上)
    • 切换到固件根目录, 必须保证qemu模拟的系统和固件的系统架构一致

      一开始我把找了个大端的固件,解压出的文件系统挂载到qemu-system运行的linux系统上了,但是用chroot切换根目录的时候,一直提示我”/bin/sh”文件格式错误。我一直以为这个文件本身有问题,一直来回倒腾。后来组长找到一个小端的固件,按照同样的方法却成功了,我才明白是机器字节序列的问题,还是经验不足啊。

      按照[参考资料三]中的讲述,将解包后的文件系统制作为img格式的镜像,随后到https://downloads.openwrt.org/snapshots/trunk/malta/generic/这个网站去下载内核,最后用qemu-system指令启动。

      启动指令:

      qemu-system-mipsel -kernel openwrt-malta-le-vmlinux-initramfs.elf -M malta -net nic,vlan=0,macaddr=12:22:22:22:22:22 -net tap -nographic -drive file=./share.img

        -kernel参数指定了内核文件

      -M参数指定了需要qemu模拟的平台

      -net参数指定了网卡的mac地址

      -drive参数就是指定了我们的硬盘镜像文件

      -nographic告诉qemu不用另起一个界面视窗,就用当前的控制台

      启动后界面:

    图3 运行后命令行界面

      此时,我们可以用mount -t ext4 /dev/sda /overlay/来挂载我们的路由器文件系系统了。

     

    图4 挂载路由器镜像

      然后用chroot /overlay/squashfs-root /bin/sh来切换根目录到路由器文件系统。

     

    图5 切换根目录

      运行igdmptd

     

    图6 运行igdmptd

      另起一个控制台用来验证漏洞

     

    图7 验证漏洞 


    参考资料

    [一]  详细的路由器漏洞分析环境搭建教程

    http://bbs.pediy.com/showthread.php?t=212369

    [二]  sql注入漏洞

    http://xdxd.love/2016/09/20/%E9%80%86%E5%90%91%E8%B7%AF%E7%94%B1%E5%99%A8%E5%9B%BA%E4%BB%B6%E4%B9%8B%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95/

    [三]  磊科igdmptd漏洞

    http://m.77169.net/HTML/226392.html

  • 相关阅读:
    VMware Workstation 11 安装MAC OS X 10.10 Yosemite(14B25)图解 2015-01-13 12:26:01|
    tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速
    vs2015终于配置完成了
    Visual Studio 2015 update 3各版本下载地址
    惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
    TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派
    官方Caffe-windows 配置与示例运行
    ipython notebook 如何打开.ipynb文件?
    Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细
    【CUDA】CUDA开发环境搭建
  • 原文地址:https://www.cnblogs.com/shangye/p/6196403.html
Copyright © 2011-2022 走看看