从一道CTF题简单接触路由器逆向

关键遇到一个由于Glibc版本变化出现的问题,花了些时间解决。。

首先是对路由器文件系统的学习,看了一篇文章,这里直接贴上:路由器文件系统与提取

然后这个CTF题来自BUU:firmware

下载后得到一个bin文件,file一下:image-20201004180937146

从最上面的文章可以知道这是固件里的bin文件分析。

首先使用binwalk 提取出,得到一个Squashfs 文件系统的文件:image-20201004181455157

对于Squashfs 文件系统的文件,我们要使用firmware-mod-kit工具来进行解压。fiemware-mod-kit工具的安装

遇到的问题来了。跟着安装前置的文件后,在执行configure文件生成Makefile文件然后make编译生成可执行文件发生了问题:image-20201004182128948

其实上面的也有很多warning,但都能通过的,找了一篇文章了解原因,C语言中函数不声明也能使用

在函数声明方面C和C++则不同,C++语言中,在被调用之前未声明或定义是不允许的,而C语言是允许的。

然后就是出现error的原因寻找。。

最开始没仔细看出错原因,直接把一大段错误google和百度,但发现大家都没有出现这样的问题。。找了很久。。

然后开始仔细看出错的原因,即上面画红线的语句。最开始对collect2:error:ld return 1 exit status进行了搜索。找到解释:image-20201004182839147

意思就是:上面的undefined reference to — 导致出错。而undefined reference to — 出错的原因是我们在程序中使用了未定义的函数。

现在error原因清晰多了,google也更目标化了。然后找到了最终原因:image-20201004183233667

最后找到所有要编译的文件添加上:#include <sys/sysmacros.h>即可。

准备工作完成,开始对Squashfs 文件系统文件解压:

在firmware/firmware-mod-kit目录下,使用./unsquashfs_all.sh 需要解压文件的目录image-20201004183726652

最后在解压得到文件目录:squashfs-root/tmp下得到我们想要的backdoor程序。然后脱壳,找string。

本文更多的是对自己解决问题一步一步的记录,也是路由器逆向的简单学习。

-------------本文结束感谢您的阅读-------------