复现基本操作

固件提取

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

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

IOT固件模拟-dir605L_FW_113(函数劫持)相关推荐

  1. qemu网络配置-桥接-IOT固件模拟

    QEMU网络策略 在进行IOT固件模拟的过程中,我们需要进行poc的验证需要能够启动系统级的qemu模拟,这时候需要将固件文件系统传到qemu虚拟机中,我们需要通过qemu网络通信的方法去串通本机和q ...

  2. 通过 qemu 运行并调试 IoT 固件和不同架构的二进制文件

    0x10 前言 对于常用的 IoT 固件,其架构往往是基于 MIPS 或者 ARM 的,如果不能运行整体的固件,那么就应该尝试运行固件中的单个二进制文件,而我们常用的 PC 是 X86 环境,如何在 ...

  3. 物联网设备固件分析:Firmadyne固件模拟环境搭建

    0x01 前言 本文介绍了在对固件进行分析的环境准备部分,主要是对Firmadyne这个工具的环境搭建,最后搭建完用Netgear的路由器固件进行测试. 更新:直接看评论,用配好的docker镜像: ...

  4. Firmadyne固件模拟路由器环境搭建

    0x01 前言 本文介绍了在对固件进行分析的环境准备部分,主要是对Firmadyne这个工具的环境搭建,最后搭建完用Netgear的路由器固件进行测试. 安装完后测试了一下,在我测试的几个固件中(Te ...

  5. 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式

    随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否有想 ...

  6. 记一次华为HG532固件模拟

    记一次华为HG532固件模拟 实验环境 固件模拟过程 从固件中提取出文件系统 创建网桥 配置虚拟网络 启动路由器 将目标文件系统上传到虚拟机 执行文件挂载 使用ssh登录路由器并启动 重新配置ip并登 ...

  7. 从函数劫持角度看开发调试工具AlloyLever

    在腾讯的AlloyTeam的Blog上发现了这样的一款工具:AlloyLever(原blog地址:http://www.alloyteam.com/2016...),觉得非常有趣且实用.尤其是其实现的 ...

  8. checkA.php,php window平台模拟checkdnsrr函数检测_php

    在php的系统函数中有一个checkdnsrr函数,该函数的作用是根据一个给定的host name(域名)或者IP地址检查它是否有DNS记录,目的就是检验它是否真实存在.但是该函数仅可以在linux系 ...

  9. C/C++劫持技术(函数劫持、dll注入、动态库注入、HOOK)

    目录 劫持 detours 实现劫持 步骤: 1. 安装Detours 2. 编译Detours工程 3. 把静态库和头文件引入工程 4. 函数指针与函数的定义 5.拦截 劫持QQ 实现劫持syste ...

最新文章

  1. python-opencv 常用工具总结
  2. java通过使用ffmpeg获取视频的码率
  3. 七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA
  4. 服务器 centos 系统漏洞快速修复简易方法
  5. 讲真,你知道Python咋来的吗?
  6. LeetCode 1004. 最大连续1的个数 III(双指针+滑动窗口)
  7. 合伙人和创始人的区别
  8. 02.规划过程组表格-沟通管理计划
  9. Conda环境与Python解释器
  10. 计算机网络 校园网规划,校园网络规划与设计方案
  11. XRD测试常见问题及解答(一)
  12. js获取时间戳的几种方式
  13. 51,AVR,PIC,MSP430,STM32单片机比较
  14. 2021年100道最新软件测试面试题,常见面试题及答案汇总
  15. SqlServer 计算年龄(岁月天)的函数
  16. rust服务器消失了_【Rust日报】 20190619:Facebook的数字货币项目Libra由Rust实现
  17. 支持全球科研抗疫,艾柏森成功研发Omicron变异株重组蛋白
  18. 小程序身份证号码保留前后4位其他用“*”代替
  19. 【实拍电机】保时捷PPE平台解析
  20. havc是什么意思_H.264/AVC是什么?

热门文章

  1. LeetCode之柠檬水找零
  2. 播放器技术分享(1):架构设计
  3. 纪念关老,沉痛的默哀
  4. 无人机飞行数据java版本api大疆无人机SpringBoot
  5. 计算机继续教育专业课在哪里学,计算机继续教育学习心得
  6. css 查看更多_如何查看是否有人蹭网?教你判断是否有人蹭网的方法
  7. 计算机专业讲座题目有哪些,计算机知识讲座策划书
  8. 教师计算机考试模拟操作试题,中小学教师信息技术中级复查上机操作模拟试题...
  9. 驾照考试相关科目总结
  10. 回合制游戏-------------------------------------------起步(二)