1、路由器文件系统
我们通常所说的更新路由器是指更新路由器的固件。不同的路由器使用不同的硬件平台,操作系统和固件。通常,路由器的固件包含操作系统的内核和文件系统。
1. 1、路由器固件
路由器固件不是硬件,而是软件。在路由器中,通常将其固化在只读存储器中,因此称为固件。
在漏洞分析过程中,通常有两种获取路由器固件的方法:
一、从路由器制造商提供的更新网站上下载;
二、通过硬件访问,从路由器的Flash中提取固件。
路由器固件包含路由器中的所有可执行程序和配置文件信息。此信息对于我们分析和挖掘路由器漏洞至关重要。获取固件后,我们可以将文件系统与固件分开。
1. 2、文件系统
文件系统是操作系统的重要组成部分,也是操作的基础。不同的路由器使用不同的文件系统格式。根文件系统将打包为当前路由器使用的文件系统格式,然后组装为固件。
Squashfs是具有超高压缩率的只读格式文件系统,可以达到34%的压缩率。系统启动后,文件系统将保存在压缩的文件系统文件中。该文件可以以换回和访问其中文件的形式安装。当进程需要某些文件时,仅将压缩文件的相应部分解压缩。
Squashfs文件系统的常用压缩格式为GZIP,LZMA,LZO,XZ(LZMA 2)),它们在路由器中普遍使用。路由器的根文件系统通常遵循Squashfs的一种常用压缩格式。文件系统。将其打包以形成完整的Squashfs文件系统,然后与路由器操作系统的内核一起形成更新的固件。
2、手动提取文件系统
要分析路由器漏洞,必须在路由器中获取易受攻击的应用程序。文件系统是操作系统的重要组成部分,也是操作的基础。文件系统包含实现路由器各种功能的基本应用程序。例如,Web服务器是在家用路由器中实现的,因此用户可以通过Web访问路由器并管理路由器。可以从固件中提取文件系统,并且很难从路由器固件中提取文件系统。原因之一是不同的操作系统使用不同的文件系统。另外,路由器的文件系统压缩算法也不同。有些路由器甚至使用非标准压缩算法来打包文件系统。
2. 1、查看文件类型
The
file命令可以通过定义的魔术签名来识别各种格式,包括常用的Linux / Windows可执行文件,DOC,PDF和各种压缩格式。
如果文件firmware.bin -----> firmware.bin:数据
在上面的示例中,file命令未找到与任何文件类型的匹配项,但这并不意味着固件是一种未被触及的文件格式。原因是file命令从给定文件的第一个字节开始。模式匹配将按照已建立的格式进行。
2. 2、手动确定文件类型
如果找不到符合要求的文件格式,则需要使用以下方法进行进一步分析:
文件系统魔术签名标头是指文件系统中包含的可识别字符的字符串。使用此字符串,表示文件可能包含某个文件系统。当然,如果要确定是否包含某个文件系统,则需要使用其他条件进行证明,即需要执行步骤2和3。
Windows应用程序以字符串“ MZ”开头,但并非所有具有此功能的文件都是可执行程序。它也可能是一个文本文件,但是它恰好以“ MZ”开头,因此只有一个功能,只需确定文件的类型是否有偏差即可。
2. 2. 1、检索文件系统魔术签名
基于每个文件系统的前几个字节提取文件系统标头功能。常用的文件系统标头功能如下:
检查是否有cramfs文件系统标头功能和魔术签名“ 0x28cd3d45”。由于我不知道文件组织是大端格式还是小端格式,因此需要进行第二次搜索:
字符串firmware.bin | grep`python -c'print“ \ x28 \ xcd \ x3d \ x45”'`
字符串firmware.bin | grep`python -c'print“ \ x45 \ x3d \ xcd \ x28”'`
如果它不是cramfs文件类型,则可以尝试确定它是否是Squashfs文件系统:
字符串fimware.bin | grep“ sqsh”或“ hsqs”或“ qshs”或“ shsq”或“ hsqt”或“ tqsh”或“ sqlz”等。
在这里,如果您在字符串firmware.bin中打印出hsqs | grep“ hsqs” ----->,我们找到了squashfs文件系统“ hsqs”的魔术签名头,但是我们不确定是否该文件包含squashfs文件系统,需要进一步确定firmware.bin是否为squashfs文件系统。
2. 2. 2、确定文件系统
进入hexdump -C firmware.bin之后| grep -n“ hsqs”,出现:
00240:00160090 68 73 71 73 9d 08 00 00 ab c0 ba 51 00 00 04 00 | hsqs .... ...... Q .......... |
您可以看到在偏移量0x160090(十六进制144193 6))上找到了“ hsqs”。
然后使用dd命令复制从0x160090开始的100字节数据。命令如下:
dd if = firmware.bin bs = 1 count = 100 skip = 1441936 of = squash
复制100字节数据的原因是因为squashfs文件系统的标头校验和不会超过100字节。
最后,使用file命令确认复制的文件南瓜的文件类型。
运行文件压缩:
squash:Squashfs文件系统,小字节序,版本4. 0,6164554字节,2205个inode,块大小:262144字节,
2. 3、手动解压缩文件系统
在上面,我们已经知道firmware.bin包含squashfs文件系统,其偏移量为0x00160090(十进制144193 6),其大小为6164554字节。因此,可以使用dd命令复制数据块。
命令如下:
dd if = firmware.bin bs = 1 count = 6164554 skip = 1441936 of = kernel.squash
运行上述命令后,已成功提取属于squashfs文件系统的数据。下一个任务是在squashfs文件系统中还原根文件系统。
尽管Linux随附的file命令包含与squashfs文件系统有关的魔术签名头信息,但对于我们而言,深入了解文件系统还不够。
使用file命令的“ -m”参数加载自定义魔术签名文件并输出更多详细信息。
命令:file -m filesystems.hsqs hernel.squash
跳过打印,在firmware.bin中提取的kernel.squash使用LZMA压缩。
squashfs-tools工具可以在linux下安装,命令“ apt-get install squashfs-tools”,该工具目前仅支持GIZP,LZO,XZ格式,不支持LZMA格式。
您可以安装firmware-mod-kit进行解压缩。
git clone
sudo apt-get install build-essential zlib1g-dev libz1zma-dev python-magic
./ configure && make
然后在firmware-mod-kit目录中运行unsquashfs_all.sh kernel.squash
本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/tongxingongju/article-373755-1.html
……