IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> IOT固件模拟-dir605L_FW_113(函数劫持) -> 正文阅读

[嵌入式]IOT固件模拟-dir605L_FW_113(函数劫持)

复现基本操作

固件提取

首先需要进行下载并且进行固件解压。

在进行固件解压的时候,前面由于环境问题一直解压失败,与路由器相关的文件夹是空的在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/

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:40:09  更:2021-10-25 12:41:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:29:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码