通過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 驗證漏洞 


參考資料

[一]  詳細的路由器漏洞分析環境搭建教程

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漏洞

http://m.77169.net/HTML/226392.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM