路由器固件调试方案

0x01前言

本文主要介绍在研究路由器固件安全时常用的两种调试方法,分别是IDA远程调试和gdb远程调试。这里需要注意,由于路由器基本都是mips架构,所以下文是以mips为例展开的,不过如果碰到了arm的,也是同理的。

 

0x02

IDA Pro远程调试

使用qemu-system模式运行的脚本如下:

这里涉及的两个文件分别是内核文件和磁盘镜像文件

这里注意,我们这里涉及到的固件是大端格式的,如下所示:

所以是用*mips,而不是*mipsel

为了后面的调试,我们还需要准备好gdbserver,可以自己编译,不过我建议使用网上已经静态编译好的gdbserver。这里给出rapid7放出来的:

https://github.com/rapid7/embedded-tools

这次用到的是大端的,所以使用gdbserver.mipe即可

在运行该脚本之前,除了准备好这两个文件之外,还要执行下图的命令

将其复制到当前目录下

此时路径下的文件包括:

这样就可以启动了

启动成功后如图所示

输入root/root即可

查看ip

将之前提取出的文件系统通过scp上传到机器上

再将gdbserver上传

回到debian看到上传成功

然后将gdbserver复制到squashfs-root目录下

接下来挂载根文件系统

这样,文件系统在mips系统中就成功挂载并运行了

接下来通过gdbserver进行远程调试:

命令中的ip就是debian的ip,端口号自行设置,后面跟着的是要调试的程序

然后在win中打开ida,载入本地的cgibin,在main下断点

接着debugger->select a debugger

选择remote gdb debugger

点击ok即可

debugger->process options

上面填入在debian中的路径,下面是ip以及对应的端口,点击ok即可

debugger->attach to process

选择第一个,点击ok后,即可进行调试

点击左上角的箭头后,就会自动运行,命中下的断点

说明调试环境已经搭建好了。

 

 

 

0x03

GDB远程调试

打开两个终端:

一个终端使用qemu-user模式运行stack_bof_01

与直接运行不同,这里通过-g指定了端口

接下来在另一个终端通过gdb调试

-multiarch是为了支持其他架构用的,比如我们这里的mips架构

接下来首先设置架构为mips

然后设置ip和端口

通过pwndbg的扩展,我们就可以很方便的进行调试了

 

 

 

 

0x04

看完这篇文章,其实大家都知道我的重点放在了ida动态调试上,个人觉得这是最可靠的调试方案。不过这期间涉及到的功能实现都是有很多方案可以备选的:比如在上传文件系统,gdbserver到debian时我用的scp,当然还可以用其他的,ftp也可以,用python也行(python -m SimpleHTTPServer)

如果是新手看到这篇文章的话,一定要注意,文中我虽然是qemu-system模式和IDA远程调试结合进行分析,qemu-user模式和gdb-multiarch结合进行分析。但是实际上,是可以自由组合的。另外,radare2也是可以用于mips的调试的,但是就我个人经验而言没有必要,所以就不再介绍。

最后给出一篇扩展的文章:https://www.ringzerolabs.com/2018/03/the-wonderful-world-of-mips.html

里面介绍了qemu的两种模式仿真,与radare2本地/远程调试,gdb远程/本地调试,ida远程调试等一共九种组合方案的实现。学有余力的话可以去看看。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章