復現基本操作
韌體提取
首先需要進行下載并且進行韌體解壓,
在進行韌體解壓的時候,前面由于環境問題一直解壓失敗,與路由器相關的檔案夾是空的在squashfs-root下沒有任何東西,自習查看報錯提示,需要注意相關binwalk插件或者是依賴的安裝,本人環境需要進行sasquatch 安裝,完成安裝后,binwalk的解壓結果多了:squashfs-root-0,進入就是正常的目錄結構了,
# 安裝依賴庫檔案
$ sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev
# 下載原始碼
$ git clone https://github.com/devttys0/sasquatch.git
# 原始碼的編譯
$ (cd sasquatch && ./build.sh)
qemu模擬運行
接下來就需要進行qemu的模擬運行,進行qemu的運行方法,最簡便的方法流程如下:
cp $(which qemu-mips) ./ #復制qemu相關插件到所在韌體根目錄
#省略一步如下,需要進行qemu依賴庫的復制,因為該插件也是動態鏈接的,需要正常使用需要將環境帶著走
sudo chroot ./ ./qemu-mips ./bin/boa
sudo chroot ./ ./qemu-mips -g 1234 ./bin/boa #qemu幫忙啟動gdbserver,在ida中使用gdb
除錯模塊
#依賴庫復制(手動創建目錄項)
cp /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 ./usr/lib/
cp /lib/x86_64-linux-gnu/libglib-2.0.so.0 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/librt.so.1 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libm.so.6 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libgcc_s.so.1 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libpthread.so.0 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libc.so.6 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libdl.so.2 ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libpcre.so.3 ./lib/x86_64-linux-gnu
cp /lib64/ld-linux-x86-64.so.2 ./lib64
運行問題
實際直接運行會出現問題:
squashfs-root-0$ sudo chroot ./ ./qemu-mips ./bin/boa
Initialize AP MIB failed!
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault (core dumped)
使用ida去搜索定位出現問題的地方,再用gdb進行除錯,不建議直接呼叫string視窗,搜索需要較長時間,


我們發現是這里是存在一個跳轉判斷,如果apmib_init 給的回傳值為0則會報我們運行時候出現的錯誤Initialize AP MIB failed!,我們再針對函式參考的元件進行分析,分析apmib_init大致判斷對程式執行無過多影響,于是可以嘗試直接進行函式劫持來使得程式正常跑起,
函式劫持
#include <stdio.h>
#include <stdio.h>
int apmib_init(void)
{
return 1;
}
mips-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so #編譯鏈接程式
sudo chroot ./ ./qemu-mips -E LD_PRELOAD="/apmib-ld.so" -g 1234 ./bin/boa #劫持對應函式
參考《解密家用路由器0day漏洞挖掘技術》,構造本例最后的劫持函式為:
#ampib.c
#include <stdio.h>
#include <stdlib.h>
#define MIB_IP_ADDR 170
#define MIB_HW_VER 0x256
#define MIB_CAPTCHA 0x2C1
int apmib_init(void)
{
return 1;
}
int fork(void){
reuturn 0;
}
void apmib_get(int code,int *value)
{
switch(code)
{
case MIB_HW_VER:
*value=0xF1;
break;
case MIB_IP_ADDR:
*value=0x7F000001;
break;
case MIB_CAPTCHA:
*value=1;
break;
}
return;
}
#生成apmib-ld.so
mips-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so
#將生成的so檔案復制到路由器根檔案系統下
sudo chroot ./ ./qemu-mips -E LD_PRELOAD="/apmib-ld.so" ./bin/boa
參考鏈接
https://www.giantbranch.cn/2018/04/16/%E4%B8%80%E6%AC%A1qemu%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95%E8%B7%AF%E7%94%B1%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%AE%B0%E5%BD%95/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335298.html
標籤:其他
上一篇:串口協議和RS-232標準,以及RS232電平與TTL電平的區別,“USB/TTL轉232“模塊(以CH340芯片模塊為例)的作業原理。
