目录

  简介

  环境搭建

  固件解包

  复现漏洞,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="" if [ "$LEN" == "" ] || [ "$INPUT" == "-h" ] || [ "$UID" != "" ]
then
echo -e "\nUsage: sudo $0 \n"
exit
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 >/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

通过qemu复现路由器漏洞的更多相关文章

  1. kvm qemu ,ubuntu debian rootfs 通过qemu复现路由器漏洞

    KVM https://www.toutiao.com/i6264303973256135170/?tt_from=weixin&utm_campaign=client_share&t ...

  2. 路由器漏洞复现分析第三弹:DVRF INTRO题目分析

    这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...

  3. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

    1.基本信息: 2017/11/27,Check Point 软件技术部门报告了一个华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞.看 ...

  4. 路由器漏洞利用工具RouterSploit

     路由器漏洞利用工具RouterSploit 网络中存在大量的嵌入式设备,如路由器.智能摄像头.这类设备安全防护程度较低.由于这些设备更新不方便,一旦发现漏洞,往往不能及时修复.所以,在网络渗透测试中 ...

  5. 每天复现一个漏洞--vulhub

    phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433) 漏洞原理:http://www.polaris-lab.com/index.php/ar ...

  6. D-Link系列路由器漏洞挖掘入门

    D-Link系列路由器漏洞挖掘入门 前言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些大神们.所以回来就决定好好研究一下路由器,争取跟上大 ...

  7. 路由器漏洞复现分析第二弹:CNVD-2018-01084

    1月17日,CNVD公开了D-LinkDIR 615/645/815 service.cgi远程命令执行漏洞(CNVD-2018-01084),freebuf上有前辈写了一篇漏洞复现和poc的文章(h ...

  8. 关于路由器漏洞利用,qemu环境搭建,网络配置的总结

    FAT 搭建的坑 1 先按照官方步骤进行,完成后进行如下步骤 2 修改 move /firmadyne into /firmware-analysis-toolkit navigate to the ...

  9. D-Link系列路由器漏洞挖掘

    参考 http://www.freebuf.com/articles/terminal/153176.html https://paper.seebug.org/429/ http://www.s3c ...

随机推荐

  1. ubuntu13.04 搭建 Nginx + PHP + PHP-FPM + Mysql (lnmp) 环境

    Nginx 是一个轻量级,以占用系统资源少,运行效率而成为web服务器的后起之秀,国内现在很多大型网站都以使用nginx,包括腾讯.新浪等大型信息网站,还有淘宝网站使用的是nginx二次开发的web服 ...

  2. ios开发之--NSDictionary和NSData之间的互转/NSString和NSData之间的互转

    NSDictionary转NSData,代码如下: +(NSData*)returnDataWith:(NSDictionary*)dict { NSData *data = [NSJSONSeria ...

  3. openssl & openssh

    什么是OpenSSL众多的密码算法.公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法.果真如此,在对你表示敬佩的同时,还是忍不住提醒你:这是一个令人望而生畏的过 ...

  4. iOS 将Excel导入到SQLite3的过程

    1.打开Excel表格,另存为.csv文件 2.打开SQLite3,选择File -> Import -> other... 3.在弹出的文件选择框中选择步骤1保存的.cvs文件 4在弹出 ...

  5. 【SVN】自动定时更新

    程序或脚本:"C:\Program Files\TortoiseSVN\bin\svn.exe" 参数:update E:\XXXXProjects\Code 参考:https:/ ...

  6. COM组件没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

    1.解决办法:在项目属性里设置“生成”=>“目标平台”为x86而不是默认的ANY CPU:

  7. VS2017编译Poco1.9.0的64版本

    需要先准备好OpenSSL1.0.2 下载poco-poco-1.9.0-release.zip,解压,修改buildwin.cmd中的OPENSSL_DIR路径,特别注意OPENSSL_LIB的路径 ...

  8. javascript的初步认识

    把握自己,就是时时拥有一颗清澈的心,拥有一片明朗的情怀.嘿嘿,我们在2014-2015的跨度里,我们休息了的四天,今天又回到了学习的阶段,敲起来键盘突然有点陌生,想一想时间真的好快,在这里我们已经是跨 ...

  9. 使用node中的iconv-lite实现对“gbk”格式的转码

    在window中,gbk和utf-8是最常见的两种格式,但是我们在显示的时候往往需要将GBK转换为UTF-8,我现在有一个同步读取文件的操作: const fs = require('fs'); co ...

  10. 关于VC中的附加进程调试

    今天领导要求在服务端添加一个获取会议参数的功能接口,接口写好后要自己测试,但是没有客户端的源码,只有客户端安装程序和客户端与服务端发送信令的底层库KSYSClient.dll,而我修改了客户端需要底层 ...