路由器固件調試方案

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遠程調試等一共九種組合方案的實現。學有餘力的話可以去看看。

 

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