目錄
簡介
環境搭建
固件解包
復現漏洞,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 驗證漏洞
參考資料
[一] 詳細的路由器漏洞分析環境搭建教程
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漏洞