这个系列的文章以逆向路由器固件的方式来挖掘路由器中存在的漏洞。

本篇文章主要以介绍解包固件工具为主。文中演示用的固件可以在这里下载。由于针对设备的攻击越来越多,很多厂商把不提供固件下载作为一种安全策略。所以有些时候只能通过物理的方式从设备中导出固件。后续的文章中会介绍相关技术。

通用的linux RE工具

file — 用来检测是否是有效的文件和文件类型
hexdump —16进制导出工具
strings 跟hexdump类似但是可以以可读的形式展示
dd— 从二进制文件中挖掘数据
lzma— 解压LZMA文件

第三方工具

binwalk — 通过固件文件头来分析文件和文件系统
Fireware Mod Kit— 自动化分析固件文件的一系列脚本
squashfs-tools — 可以通过apt-get squashfs-tools 来安装。用来处理squashfs的一系列工具

初步分析

通常来说逆向工程的第一步就是使用上面列出的通用linux工具从要分析的文件中挖掘出尽量多的信息。通过这些信息来决定下一步进行的分析。比如使用hexdump发现sqsh意味着文件中有一个squashfs文件系统或者识别出了固件包中常用的boot loader U-Boot。

File Tool

文件工具通常只是告诉我们这个文件是否是已知的文件类型,某些情况下可以识别出文件的种类,比如数据文件。

使用file分析路由器固件如下:

file分析的结果可以告诉我们该文件是否是已知的类型,是否需要进一步分析。这里的结果我们可以看到仅仅是显示数据文件。

hexdump

hexdump 工具可以让你分析文件中的每一个字节,这是非常有价值的。使用hexdump分析固件如下:

上面的命令会把hexdump的结果写入到文件hexTP.txt中做进一步分析。-C选项是设置hexdump输出为hex+ASCII的方式,更便于阅读。输出的文件十分巨大,这个例子中我们可以从文件头的地方看到这个固件是属于TP-Link的,但是这个信息我们已经知道了。所以下一步就是尝试strings命令,看看是否可以获得更多的信息。

strings

作为初始的信息收集,strings可能是最常用和做好用的工具之一,因为它可以显示文件中所有可打印的数据。跟使用hexdump一样,最好把strings的结果写入文件分析,以免下次想要分析的时候还需要重复一遍strings命令。

从strings的结果中,我们发现了一些有趣的信息。这个信息就在strings结果文件开始的地方,稍微往后翻一下或者搜索一下文件系统常用的boot loader名字比如U-boot,就可以找到这些信息。现在我们已经知道这个嵌入式系统使用U-boot作为boot loader,而且知道了它的版本信息。

Binwalk

binwalk会分析二进制文件中可能的固件头或者文件系统,然后输出识别出的每个部分以及对应的偏移量。使用binwalk分析固件如下:

binwalk给出了大量有用的信息。从这些信息中可以得知这个固件是运行在MIPS架构上的一个linux系统。使用了squashfs文件系统。同时也再次确认boot loader是U-boot。关于binwalk的更详细的用法可以参考Binwalk:后门(固件)分析利器。

提取文件系统

终于到了最关键的一步,我们要从固件镜像中分离出文件系统的内容。因为是linux系统,可以预见一些标准的linux文件比如passwd和shadow可能会有一些敏感信息。很多人使用dd来分离文件系统的内容。使用binwalk和Firmware Modification Kit来解包最简单方便。

使用binwalk的-e参数可以自动把固件镜像中的所有文件都解出来。

binwalk -e <input file>

使用Firmware Modification Kit中的extract-firmware.sh脚本会更加高效。如果你想重打包修改之后的固件的话可以使用build-firmware.sh来打包固件。这样可以节省大量时间自己解包和管理所有的偏移。

极路由安全设计架构分析这里分析的极路由的那个固件包,使用FMK就可以一键解包。如下:

逆向路由器固件之解包 Part1的更多相关文章

  1. 逆向路由器固件之SQL注入 Part3

    另寻他径 在前面的内容中,我们使用TEW-654TR路由器的tftp服务实现了获取目标的管理权限.但是要是tftp没有开放到外网怎么办?另寻他径:在这一篇中会我们来分析一个web应用上的漏洞. 初步分 ...

  2. 逆向路由器固件之敏感信息泄露 Part2

    之前的文章中详细介绍了各种解包路由器固件的工具.解包之后就获得了固件中的文件.下一步就是分析文件寻找漏洞了.这次分析的目标是Trendnet路由器,分析的漏洞是一个远程获取路由器权限的漏洞. 初步分析 ...

  3. Android固件img文件的解包, 修改和打包的命令行操作

    Android固件img文件的解包打包 To Unpack-Modify-Pach the system.img, I have followed the following procedure: a ...

  4. 提取路由器固件中的squashfs

    之前用binwalk -Me提取固件中的squashfs,但会生成大量的压缩包等,只提取文件系统的话,可以定位squashfs的文件头(hsqs)位置,然后用dd将它分离出来,然后在unsquashf ...

  5. MonoTouch 二三事(三)mono mkbundle 打包程序的解包支持

    2014.10.06 更新 编写了 IDA Pro 的插件,用来解包和打包 mkbundle程序,请参见 https://github.com/binsys/MKBundleManager 许久以后, ...

  6. linux下如何打包压缩?解包解压?.tar文件.gz文件

    ===文件打包.压缩 ==打包 tar [root@521478.com]# tar -cvf etc1.tar /etc //c创建 v详细 f打包后文件名 [root@521478.com]# t ...

  7. Swift中的Optional类型 (可选类型)与强制解包 ? !

    我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...

  8. 如何解包,编辑,重新打包boot images

    HOWTO: Unpack, Edit, and Repack Boot Images http://forum.xda-developers.com/showthread.php?t=443994 ...

  9. zImage.img、ramdisk.img、system.img、userdata.img介绍及解包、打包方法

    ramdisk.img system.img userdata.img介绍及解包.打包方法 Android 源码编译后,在out/target/product/generic下生成ramdisk.im ...

随机推荐

  1. 如何新建一个datatable,并往表里赋值

    顺序是新建对象-->新建列-->新建行,示例代码如下: DataTable dt=new DataTable(); //新建对象 dt.Columns.Add("姓名" ...

  2. poj 1144 Network 无向图求割点

    Network Description A Telephone Line Company (TLC) is establishing a new telephone cable network. Th ...

  3. TDD、BDD、DDD

    TDDTest-Driven DevelopmentTest-Driven Development (TDD) is a software development technique where au ...

  4. F4+2 团队项目软件设计方案

    目录 1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2总体设计 2.1需求规定 2.2运行环境 2.3基本设计概念和处理流程 2.4功能描述 2.5功能器求与程序的关系 2.6人工处 ...

  5. 《剑指offer》第二十四题(反转链表)

    // 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点. #include <iostream> #include &quo ...

  6. Codeforces 260B - Ancient Prophesy

    260B - Ancient Prophesy 思路:字符串处理,把符合条件的答案放进map里,用string类中的substr()函数会简单一些,map中的值可以边加边记录答案,可以省略迭代器访问部 ...

  7. Python 爬虫-BeautifulSoup

    2017-07-26 10:10:11 Beautiful Soup可以解析html 和 xml 格式的文件. Beautiful Soup库是解析.遍历.维护“标签树”的功能库.使用Beautifu ...

  8. 一个Java例子,解释清楚注解的作用

    原文出处:码农登陆 写在前面 今天聊的是注解,但其实单纯说注解,注解本身没有任何的作用.简单说和注释没啥区别,而它有作用的原因是:注解解释类,也就是相关对代码进行解释的特定类.一般这些类使用反射是可以 ...

  9. Underground Lab CodeForces - 782E (欧拉序)

    大意:$n$结点,$m$条边无向图, 有$k$个人, 每个人最多走$\left\lceil\frac {2n}{k}\right\rceil$步, 求一种方案使得$k$个人走遍所有的点 $n$结点树的 ...

  10. tomcat8w.exe 运行 提示 指定的服务未安装 unable to open the service 'tomcat8'

    新下载的Tomcat8 解压版,解压缩完成后,双击tomcat8.exe出现个DOS样子的窗口一闪而过消失了,tomcat也没有启动成功.双击tomcat8w.exe 弹出个错误对话框,说“指定的服务 ...