通过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 "\nUsage: sudo $0 \n"
    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 验证漏洞

时间: 2024-07-30 13:48:11

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

锐捷路由器漏洞分析

0x00 前言 今早看到关于锐捷路由器漏洞CNVD-2018-06947 被披露POC,对于POC进行复现后,继续挖掘路由器漏洞. 0x01 复现 通过测试发现POC只能执行VERSION,也就是查看版本.复现的截图如下: 这个命令执行只能查看版本的感觉不太过瘾,只好尝试去挖掘漏洞. 0x02 漏洞挖掘 在NBR1300G-E存在COOKIE会话固定漏洞,利用这个漏洞结合命令执行接口,就是newcli.php 这个文件.最后导致命令执行. 经过测试发现,只能直接与路由器命令执行交互,能够执行路由

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

D-Link系列路由器漏洞挖掘入门 前言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些大神们.所以回来就决定好好研究一下路由器,争取跟上大神们的步伐.看网上公开的D-Link系列的漏洞也不少,那就从D-Link路由器漏洞开始学习. 准备工作 既然要挖路由器漏洞,首先要搞到路由器的固件. D-Link路由器固件下载地址: ftp://ftp2.dlink.com/PRODUCTS/ 下载完固件发现是个压缩包,解压之后里面还是有一个bin

路由器漏洞挖掘环境搭建

详细的路由器漏洞分析环境搭建教程 http://chuansong.me/n/864762852648 嵌入式Linux固件模拟与安全分析系统Firmadyne交流 http://chuansong.me/n/1009525252762 优秀博文: 路由器固件安全分析技术(一) https://www.vulbox.com/knowledge/detail/?id=35      一起学习从零基础从搭建环境开始入门路由器固件安全分析的技术 路由器固件安全分析技术(二) https://www.v

路由器漏洞挖掘之 DIR-850/645 命令执行漏洞复现

前言 这次来分析两个比较经典的路由器命令执行漏洞,DIR-850 和 DIR-645 的 RCE,漏洞成因都是由于参数拼接不当造成的. 漏洞分析 根据前一篇文章中的任意文件读取漏洞,在读取到 DEVICE.ACCOUNT 配置文件中的敏感信息之后,我们就可以进一步利用,达到命令执行的目的,进而 getshell. php 源代码 代码如下: 这里的 server 变量可控,导致在拼接时,我们可以闭合前面的命令参数,执行任意命令. 通过前一步的任意文件读取得到 admin 的密码之后,登录上去抓包

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

FAT 搭建的坑 1 先按照官方步骤进行,完成后进行如下步骤 2 修改 move /firmadyne into /firmware-analysis-toolkit navigate to the Firmadyne folder and execute "sudo ./download.sh" (seems like I missed this step when setting up Firmadyne) move fat.py and reset.py into Firmady

路由器漏洞挖掘使用的脚本

计算偏移多少的python脚本: # a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # B = 'abcdefghijklmnopqrstuvwxyz' # c = '0123456789' from string import ascii_lowercase as ls from string import ascii_uppercase as UP import time import sys import os import binascii a = ''.join(l

路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析

这次笔者来复现一个比较经典的栈溢出漏洞:D-link dir-815 栈溢出.其实这个路由器的栈溢出漏洞的利用方式和之前 DVRF 靶机平台的栈溢出例子大同小异,只是需要注意下一些小的地方. 前言 这个栈溢出的原因是由于 cookie 的值过长导致的栈溢出.服务端取得客户端请求的 HTTP 头中 Cookie 字段中 uid 的值,格式化到栈上导致溢出. 漏洞分析 大体流程 首先还是先将 cgibin 加载到 IDA 中,定位到 sobj_get_string 函数. 在 sobj_get_st

路由器漏洞调试的一些技巧

mips 指令集特性 1 没有push pop指令 2 所有指令都是32位,4字节对齐 mips 动态调试 1 IDA ./qemu-mipsel -g 23946 ./xxx IDA 上选择Remote GDB debuffer 2 gdb-multiarch qemu-mipsel -L . -g 23946 ./xxx 注意要切换到路由器文件系统根目录 gdb-multiarch ./xxx set architecture mips target remote 127.0.0.1:239

DVRF:路由器漏洞练习靶机 Damn Vulnerable Router Firmware

0×01 概述 这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 目前为止,该项目是基于Linksys E1550 为基础进行安装. 0×02 安装 友情提示,安装前请先备份路由器固件,以备不时之需. 1.使用管理员帐户密码登录E1550 2.访问固件更新页面,http://192.168.1.1/Upgrade.asp 3.上传Damn Vulnerable Router Firmware (DVRF) v0.1 固件DVRF_v01.bin