# IOT 的环境搭建
目前已有的学习参考文档时 2016 年的《家用路由器 0day 漏洞挖掘技术》》,但是由于时间很久了,各种软件的迭代升级导致书中很多工具的配置不好用。
本文复现华为路由器,原文链接
固件链接,提取码 0000
主链接
参考链接
# binwalk
git clone https://github.com/devttys0/binwalk.git | |
sudo apt-get install qemu qemu-system qemu-user-static binfmt-support //提供一些支持,很重要 |
工具可以使用 apt-get 安装,但是需要一个插件
sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev |
同时还要安装一个 sasquatch
sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev | |
git clone https://github.com/devttys0/sasquatch.git | |
cd sasquatch | |
chmod +x build.sh | |
./build.sh |
# qemu 启动 mips 的虚拟机,
我们需要到网站去下载对应 mips 内核
# 搭建 qqmu 虚拟机的网络
在 _XXXXX.bin.extracted_
文件夹下创建 init.sh
文件,同时将内核文件放在该路径下
启动脚本
#!/bin/sh | |
sudo brctl addbr virbr0 | |
sudo ifconfig virbr0 192.168.1.55/24 up | |
sudo tunctl -t tap0 | |
sudo ifconfig tap0 192.168.1.56/24 up | |
sudo brctl addif virbr0 tap0 | |
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic |
虚拟机的网络配置为
ifconfig eth0 192.168.1.57/24 up |
然后可以 ping 到主机的 top0 的网络地址
# 上传文件到 qemu 内
使用 scp 命令
scp [file] root@[ip]:/root/ |
file 是我们需要上传的文件,ip 是我们在 qemu 内部配置的 eth0 的 ip,然后这里上传出现的问题是会有一个选择是否继续,这里要手动输入 yes
我们在 qemu 的主目录下就可以找到我们上传的文件,tar -zxcf 进行解压
这里我们需要打包的是 roof 文件系统
tar -czvf root.tar squashfs-root/ |
以及我们话给虚拟机内部传一个启动脚本 init.sh
#!/bin/sh | |
ifconfig eth0 192.168.1.57/24 up | |
mount -o bind /dev ./squashfs-root/dev | |
mount -t proc /proc ./squashfs-root/proc/ | |
chroot ./squashfs-root/ sh |
(由于某些原因,对于这一个路由器的介绍我们仅仅进行到这里,我们没有该路由器的硬件设备,无法启动路由器服务)
# qemu 的退出
我们只能是由强制中断退出,我们在 mips 机子使用退出时,exit 会进入 login 的循环,没法结束,ctrl+a, 然后再按 x
# qemu 搭建 arm 环境
# 1、安装 aarch64 交叉编译工具链
sudo apt-get install gcc-aarch64-linux-gnu
# mips 编译器
书中使用的时 mips-linux-gcc, 但是目前这个工具已经在主流的 ubuntu 不适用了,而是改用 mips-linux-gnu-gcc 进行编译
# firmadnye 踩坑,
没有 magic 模块,
sudo apt-get install python3-magic |
安装了三个工具,
firmadyne | |
firmware-analysis-toolkit | |
firmware-analysis-plus |
后面两个其实也是基于 firmadyne 的,但是因为我搭建环境时使用的时 python3,ubuntu20, 版本稍高,导致前两个工具的环境有问题,在 makeImage.sh 的脚本中,获取压缩包解压后大小的参数是有问题的
TARBALL_SIZE=$(tar ztvf "${TARBALL_DIR}/${IID}.tar.gz" --totals 2>&1 |tail -1|cut -f4 -d' ') | |
MINIMUM_IMAGE_SIZE=$((TARBALL_SIZE + 10 * 1024 * 1024)) | |
echo "----The size of root filesystem '${TARBALL_DIR}/${IID}.tar.gz' is $TARBALL_SIZE-----" | |
IMAGE_SIZE=8388608 | |
while [ $IMAGE_SIZE -le $MINIMUM_IMAGE_SIZE ] |
解压的最后一行数据时这样的,
dreamcat@ubuntu:~/firmadyne/images$ tar ztvf 1.tar.gz --totals 2>&1 |tail -1 | |
总计读取字节数: 16875520 (17MiB, 208MiB/s) |
如果按照原来的 f4 参数
那么获取到的就是解压缩的速度,而不是大小,
dreamcat@ubuntu:~/firmadyne/images$ tar ztvf 1.tar.gz --totals 2>&1 |tail -1|cut -f4 -d' ' | |
100MiB/s) |
所以我们把这个改 f2
dreamcat@ubuntu:~/firmadyne/images$ tar ztvf 1.tar.gz --totals 2>&1 |tail -1|cut -f2 -d' '
16875520
firmware-analysis-toolkit 目录下的项目也有同样的问题,
后两个工具使用的都是自己目录下独立的 firmadyne .
总的来说,firmware-analysis-plus 下载最方便,也没有上述的问题。
# 使用方法
#firmware-analysis-plus: | |
python fap.py -q ./qemu-builds/2.5.0/ /home/dreamcat/Desktop/IOT_learn/cve_2019_17621/DIR822A1_FW103WWb03.bin | |
#firmware-analysis-toolkit: | |
python fat.py [file] | |
#firmadyne: 这个比较繁琐 | |
sudo python3 ./sources/extractor/extractor.py -b DLink -sql 127.0.0.1 -np -nk ./DIR822A1_FW103WWb03.bin images/ #提取固件 | |
./scripts/getArch.sh ./images/1.tar.gz #分析文件包 | |
sudo python ./scripts/tar2db.py -i 1 -f ./images/1.tar.gz #导入数据库 | |
sudo ./scripts/makeImage.sh 1 mipseb #制作镜像 | |
sudo ./scripts/inferNetwork.sh 1 mipseb #判断网络结构 | |
sudo ./scratch/1/run.sh #最终运行 |
# 文件系统提取
在线提取文件系统工具:https://zhiwanyuzhou.com/multiple_analyse/firmware/