Binwalk在ctf的杂项题目常用,在日常的安全研究中常用于固件的逆向、提取等。
我们都知道binwalk可以对指定文件进行扫描,然后打印出可能在其中的一些特定类型的文件,比如打ctf的隐写类题目时有时候binwalk一下就搞定了。
但是binwalk是怎么实现的呢。
Binwalk会扫描整个文件寻找文件signature,比如找到了0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A,那么就知道这里有png文件。Binwalk做到这一点其实是调用了libmagic的库来进行识别。
我们接下来就实战看看。
随便找个提供固件下载的官网,这里找了一个tp-link的。
下载固件
下载来后先使用signature选项搜索镜像里的文件签名
可以看到通过签名匹配找到了很多东西
可以看到镜像使用U-BOOT作为BootLoader
简单说下u-boot:
U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS
D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。
以及bootloader:
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中整个系统的加载启动任务就完全由BootLoader来完成。
Lzma:一种数据压缩算法
从上图中我们可以看到镜像的header地址在0x5ac0,压缩后的bootloader地址在0x5b00
可以知道,cpu为mips架构,linux内核版本为3.3.8
根文件系统rootfs为squashfs 文件系统
综合以上信息可以把bootloader提取出来
由下图可知
应从23296开始提取,大小为64968-23296
将其解压缩
这样就得到u-boot镜像了
我们可以来看看默认的bootargs引导参数的值
这些变量是用来给linux内核传参的
接下来我们尝试提取linux内核镜像
还是同样的方法
可以使用file看一下基本信息
uimage文件格式是带有附加header的linux内核镜像,我们将其删掉,得到Linux内核
这里的72=78520-78448
解压
然后就得到镜像了
使用extract选项来自动提取根文件系统
使用qemu模拟个shell出来
输入help可以看到被裁减过后的命令
输入exit退出
https://www.zerodayinitiative.com
来源:CSDN
作者:Neil-Yale
链接:https://blog.csdn.net/yalecaltech/article/details/104216139