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/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(函数劫持)相关推荐
- qemu网络配置-桥接-IOT固件模拟
QEMU网络策略 在进行IOT固件模拟的过程中,我们需要进行poc的验证需要能够启动系统级的qemu模拟,这时候需要将固件文件系统传到qemu虚拟机中,我们需要通过qemu网络通信的方法去串通本机和q ...
- 通过 qemu 运行并调试 IoT 固件和不同架构的二进制文件
0x10 前言 对于常用的 IoT 固件,其架构往往是基于 MIPS 或者 ARM 的,如果不能运行整体的固件,那么就应该尝试运行固件中的单个二进制文件,而我们常用的 PC 是 X86 环境,如何在 ...
- 物联网设备固件分析:Firmadyne固件模拟环境搭建
0x01 前言 本文介绍了在对固件进行分析的环境准备部分,主要是对Firmadyne这个工具的环境搭建,最后搭建完用Netgear的路由器固件进行测试. 更新:直接看评论,用配好的docker镜像: ...
- Firmadyne固件模拟路由器环境搭建
0x01 前言 本文介绍了在对固件进行分析的环境准备部分,主要是对Firmadyne这个工具的环境搭建,最后搭建完用Netgear的路由器固件进行测试. 安装完后测试了一下,在我测试的几个固件中(Te ...
- 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式
随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否有想 ...
- 记一次华为HG532固件模拟
记一次华为HG532固件模拟 实验环境 固件模拟过程 从固件中提取出文件系统 创建网桥 配置虚拟网络 启动路由器 将目标文件系统上传到虚拟机 执行文件挂载 使用ssh登录路由器并启动 重新配置ip并登 ...
- 从函数劫持角度看开发调试工具AlloyLever
在腾讯的AlloyTeam的Blog上发现了这样的一款工具:AlloyLever(原blog地址:http://www.alloyteam.com/2016...),觉得非常有趣且实用.尤其是其实现的 ...
- checkA.php,php window平台模拟checkdnsrr函数检测_php
在php的系统函数中有一个checkdnsrr函数,该函数的作用是根据一个给定的host name(域名)或者IP地址检查它是否有DNS记录,目的就是检验它是否真实存在.但是该函数仅可以在linux系 ...
- C/C++劫持技术(函数劫持、dll注入、动态库注入、HOOK)
目录 劫持 detours 实现劫持 步骤: 1. 安装Detours 2. 编译Detours工程 3. 把静态库和头文件引入工程 4. 函数指针与函数的定义 5.拦截 劫持QQ 实现劫持syste ...
最新文章
- 【Flutter】FutureBuilder 异步编程 ( FutureBuilder 构造方法 | AsyncSnapshot 异步计算 )
- Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢
- 搭建opencv环境
- Event Viewer 查看 Windows 系统日志
- springCloud 学习记录过程
- android大屏适配_2019年度投影机盘点:无线智能,塑造大屏全应用场景
- python zlib module_python 安装 setuptools Compression requires the (missing) zlib module 的解决方案...
- python 生成器读取文件
- 使用Linux好还是unix好
- #20165201 macOS中统计代码总行数
- C#基础知识梳理系列七:字符串
- 人之间的尊重是相互的_人和人之间,尊重永远是相互的,是礼貌,是美德,更是善良的表现...
- 学计算机数理化不好怎么办,数理化不好怎么办?3招教你学好数理化!
- 远程过程调用失败 异常来自 HRESULT:0x800706BE
- 魔方世界服务器文件,魔方世界服务器指令 | 手游网游页游攻略大全
- 南非最大城市约翰内斯堡被黑客团伙勒索
- ipad如何与计算机连接网络连接不上,平板电脑可以连接无线网络但上不了网如何解决...
- 移动UPS电源使用(不间断电源)
- 第1个Qt项目:计算器
- python+Mysql+flask架构的在线留言板实战
热门文章
- 分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)
- 历时30年探索牛顿之谜,中国科学家测出迄今最高精度万有引力常数值!
- 计算机软件如何更新,计算机显卡驱动怎么更新
- Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用
- base64编码踩坑之身份证号模糊查询
- java 多线程 动画_Java多线程实现简单动画(小球运动)效果
- 什么东西可以改善睡眠,这些助眠好物让你远离失眠
- 3G时代手机电影必大放异彩
- Propagation-Based Social-Aware Replication for Social Video Contents
- Apache Hadoop VIP版