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