路由器解固件包构建固件包(详解一)

路由器解固件包构建固件包(详解一)


0x01 前言

一篇关于路由器解固件包和构建固件包的文章,顺便记录一些关于在提取固件中常用的工具以及使用的方法。一方面是自己记录的笔记,另一方面分享给大家。

0x02 常用工具

Linux系统自带工具

file — 用来检测是否是有效的文件和文件类型 后面会讲的到

xxd - 会生成给定文件或者标准输入的十六进制格式,也可以将十六进制格式转换回原始的二进制格式
这个工具没用过
hexdump — 将固件中的内容以16进制的格式导出来。 后面会讲到

strings 跟hexdump类似, 可以将固件的内容转成字符串的格式导出来。 后面会提到

dd — 从二进制文件的特定位置中挖掘数据 后面会将 到

lzma — 解压LZMA文件
有的固件包的压缩方式是lzma 的格式,大多数路由器的文件压缩都是这个格式。

第三方工具
Radare2 - 缩写为r2 逆向工程和二进制分析的完整框架
这里有关于radare2的讲解,感觉写的不错【radare2】

ghidra - nsa开源的逆向分析工具
这个相比ida来说,对mips的支持会更好,有的时候ida打开效果不好,可以试试这个工具

IDA Pro - 不用多解释的超强逆向分析工具, 逆向用的最多的工具

Firmware_Slap - 使用约束求解和函数聚类自动发现固件中的漏洞
没用过

firmwalker - 用于搜索提取或者安装的固件文件系统的简单bash脚本,它将搜索解压缩或者装入的固件文件系统,以获取感兴趣的东西

binwalk - 通过固件文件头来分析文件和文件系统,可以用来解开固件包,kali里面自带,但是不太好用,有的固件包解不开。
我都是直接用binwalk -Me firmware 直接解。

Fireware Mod Kit — 自动化分析固件文件的一系列脚本,简称fmk, 一般是用来解开固件包,打包固件包的。

squashfs-tools— 可以通过apt-get squashfs-tools 来安装。用来处理squashfs的一系列工具

qemu 在固件中的作用是模拟固件的运行。可以模拟固件中文件需要执行的环境,如arm,mipsel,mips 常见架构。 后面会专门写一篇对这三种架构环境的模拟搭建。

firmware-analysis-toolkit 固件分析工具,可以用来模拟执行路由器。我只要是用它来模拟路由器,然后可以访问路由器的web界面。一步到位,比较自动化

这些第三方工具,安装过程可以参考我这篇文章路由器固件模拟环境搭建(超详细)

0x03 固件分析

这里使用的固件是TP-link 的一款路由器 TL-WR841N https://static.tp-link.com/2018/201804/20180403/TL-WR841N%28EU%29_V14_180319.zip

下载下来的包是一个压缩包,解包的过程就不概述了。固件包就是下图中 的bin 文件,有的是trx 文件,二者的区别可以去查一查。
在这里插入图片描述
使用file命令来识别文件类型,这是数据类文件
在这里插入图片描述
可以使用hexdump 和 strings 读取固件文件中的信息,传输到文件中,以便后面查看是否有可以利用的信息。
路由器解固件包构建固件包(详解一)_第1张图片

之后就可以在文件中搜索自己想要的信息,比如搜索一下文件系统常用的boot loader名字u-boot,就可以在文件中看到相关信息。有的时候可以看到设备里面有哪些启动程序。在这里插入图片描述
使用binwalk -Me 解开固件,从输出的信息中可以看到,这个固件是用lzma的压缩方式,以及是Squashfs类型的文件系统。
路由器解固件包构建固件包(详解一)_第2张图片
解开之后是如下图所示的。另外也可以使用 dd 命令来提取特定的文件系统。可binwalk的作用是一样的。
但是使用binwalk 解开的包,用firmware-mod-kit重新再打包不是很支持。
在这里插入图片描述

0x04 firmware-mod-kit 解构固件包

firmware-mod-kit 来完成对固件的解包和打包,这样我们就可以很方便的在对目标完成修改后重新打包固件(比如植入后门之后重新打包)
1. 下载固件

   git clone  https://github.com/rampageX/firmware-mod-kit.git

2. 安装依赖

sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

3. 编译文件(如果你不想编译,也可以直接解固件,解固件的时候会自动编译,我是跳过这一步)

cd firmware-mod-kit/src
./configure && make

4. 解开固件包
使用extract-firmware.sh 解开固件包
路由器解固件包构建固件包(详解一)_第3张图片路由器解固件包构建固件包(详解一)_第4张图片
解完固件包之后,固件的内容在fmk中,其中images_parts 文件夹是存储中间文件的位置,如果需要替换内核(完全不建议),可以通过在此处替换适当的文件(通常为segment2)来替换;rootfs 是固件的文件系统所在的位置,可以在此处修改文件内容;logs 是解包的输出日志信息。
在这里插入图片描述
修改etcz中rcS 文件中的内容,当然我这里只是在做测试,各位大佬,可以想一些奇技淫巧。
路由器解固件包构建固件包(详解一)_第5张图片
5. 重新构建固件包
使用build-firmware.sh 构建固件包, 它会自动的把fmk 文件夹中解开的固件包自动重新打包回去。
路由器解固件包构建固件包(详解一)_第6张图片
使用binwalk重新构建的固件包,查看/etc/ini.d/rcS内容,发现修改成功
在这里插入图片描述
使用firmware-analysis-toolkit启动的时候,会发现启动自启动的文件rcS,并且执行了里面的内容
路由器解固件包构建固件包(详解一)_第7张图片
路由器解固件包构建固件包(详解一)_第8张图片

0x05 总结

其实有的固件包由于固件包加密,压缩方式的不同等种种原因使用以上的工具是解不开的,这时候需要用其他的方式来进行解包,各位大佬会的可以指导DD
但是大部分的固件包但是可以接开的。

0x06 参考

【技术分享】物联网设备的固件分析技术
https://www.anquanke.com/post/id/85036
IoT固件逆向入门
https://zeroyu.xyz/2019/08/15/How_to_start_IoT_Reverse/#0x02-%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7

你可能感兴趣的:(一无所知的渗透,路由器,iot,安全)