Binwalkt提取固件及qemu模拟

时间:2024-03-23 12:48:30

 

Binwalk在ctf的杂项题目常用,在日常的安全研究中常用于固件的逆向、提取等。

我们都知道binwalk可以对指定文件进行扫描,然后打印出可能在其中的一些特定类型的文件,比如打ctf的隐写类题目时有时候binwalk一下就搞定了。

但是binwalk是怎么实现的呢。

Binwalk会扫描整个文件寻找文件signature,比如找到了0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A,那么就知道这里有png文件。Binwalk做到这一点其实是调用了libmagic的库来进行识别。

我们接下来就实战看看。

随便找个提供固件下载的官网,这里找了一个tp-link的。

下载固件

Binwalkt提取固件及qemu模拟

下载来后先使用signature选项搜索镜像里的文件签名

Binwalkt提取固件及qemu模拟

可以看到通过签名匹配找到了很多东西

可以看到镜像使用U-BOOT作为BootLoader

简单说下u-boot:

U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS

D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。

以及bootloader:

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中整个系统的加载启动任务就完全由BootLoader来完成。

Lzma:一种数据压缩算法

从上图中我们可以看到镜像的header地址在0x5ac0,压缩后的bootloader地址在0x5b00

Binwalkt提取固件及qemu模拟

可以知道,cpu为mips架构,linux内核版本为3.3.8

根文件系统rootfs为squashfs 文件系统

 

综合以上信息可以把bootloader提取出来

由下图可知

Binwalkt提取固件及qemu模拟

应从23296开始提取,大小为64968-23296

Binwalkt提取固件及qemu模拟

将其解压缩

Binwalkt提取固件及qemu模拟

这样就得到u-boot镜像了

Binwalkt提取固件及qemu模拟

我们可以来看看默认的bootargs引导参数的值

Binwalkt提取固件及qemu模拟

这些变量是用来给linux内核传参的

接下来我们尝试提取linux内核镜像

还是同样的方法

Binwalkt提取固件及qemu模拟

可以使用file看一下基本信息

Binwalkt提取固件及qemu模拟

uimage文件格式是带有附加header的linux内核镜像,我们将其删掉,得到Linux内核

Binwalkt提取固件及qemu模拟

这里的72=78520-78448

解压

Binwalkt提取固件及qemu模拟

然后就得到镜像了

使用extract选项来自动提取根文件系统

Binwalkt提取固件及qemu模拟

Binwalkt提取固件及qemu模拟

使用qemu模拟个shell出来

Binwalkt提取固件及qemu模拟

Binwalkt提取固件及qemu模拟

输入help可以看到被裁减过后的命令

输入exit退出

Binwalkt提取固件及qemu模拟

参考:https://embeddedbits.org

https://www.zerodayinitiative.com