复现基本操作

固件提取

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

在进行固件解压的时候,前面由于环境问题一直解压失败,与路由器相关的文件夹是空的在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. 【Flutter】FutureBuilder 异步编程 ( FutureBuilder 构造方法 | AsyncSnapshot 异步计算 )
  2. Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢
  3. 搭建opencv环境
  4. Event Viewer 查看 Windows 系统日志
  5. springCloud 学习记录过程
  6. android大屏适配_2019年度投影机盘点:无线智能,塑造大屏全应用场景
  7. python zlib module_python 安装 setuptools Compression requires the (missing) zlib module 的解决方案...
  8. python 生成器读取文件
  9. 使用Linux好还是unix好
  10. #20165201 macOS中统计代码总行数
  11. C#基础知识梳理系列七:字符串
  12. 人之间的尊重是相互的_人和人之间,尊重永远是相互的,是礼貌,是美德,更是善良的表现...
  13. 学计算机数理化不好怎么办,数理化不好怎么办?3招教你学好数理化!
  14. 远程过程调用失败 异常来自 HRESULT:0x800706BE
  15. 魔方世界服务器文件,魔方世界服务器指令 | 手游网游页游攻略大全
  16. 南非最大城市约翰内斯堡被黑客团伙勒索
  17. ipad如何与计算机连接网络连接不上,平板电脑可以连接无线网络但上不了网如何解决...
  18. 移动UPS电源使用(不间断电源)
  19. 第1个Qt项目:计算器
  20. python+Mysql+flask架构的在线留言板实战

热门文章

  1. 分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)
  2. 历时30年探索牛顿之谜,中国科学家测出迄今最高精度万有引力常数值!
  3. 计算机软件如何更新,计算机显卡驱动怎么更新
  4. Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用
  5. base64编码踩坑之身份证号模糊查询
  6. java 多线程 动画_Java多线程实现简单动画(小球运动)效果
  7. 什么东西可以改善睡眠,这些助眠好物让你远离失眠
  8. 3G时代手机电影必大放异彩
  9. Propagation-Based Social-Aware Replication for Social Video Contents
  10. Apache Hadoop VIP版