1. 固件提取与文件系统解析

固件提取与文件系统解析 学习卡片

任务说明

本案例以典型家用路由器固件(TP-Link TL-WR841N)为例,完成从固件镜像中提取文件系统、定位关键二进制文件与配置的完整流程。最终目标是获得可浏览的根文件系统目录结构,并识别出Web服务程序、系统初始化脚本及明文配置文件。

环境准备

所需工具均为开源软件,建议在Linux环境(Ubuntu 22.04+)下操作:

  • binwalk:固件结构分析与文件提取
  • sasquatch:非标准SquashFS文件系统解包工具(针对路由器固件定制)
  • file、strings:文件类型识别与字符串提取

安装命令:

sudo apt update && sudo apt install -y binwalk
# sasquatch需从源码编译,依赖zlib、lzma库
git clone https://github.com/devttys0/sasquatch.git
cd sasquatch && sudo ./build.sh

固件获取与结构分析

下载TL-WR841N V14固件(约4MB):

wget https://static.tp-link.com/resources/software/TL-WR841N_V14_150429.zip
unzip TL-WR841N_V14_150429.zip
# 解压后得到 .bin 文件,例如 wr841nv14_en_3_16_9_up_boot(150429).bin

使用binwalk扫描固件内部结构:

binwalk wr841nv14_en_3_16_9_up_boot\(150429\).bin

预期输出应显示:固件头部(uImage)、LZMA压缩内核、以及位于偏移量约0x135000处的SquashFS文件系统。若binwalk未能识别文件系统,可尝试binwalk -A或binwalk -I(忽略熵检测)重新扫描。

文件系统提取

使用binwalk的-e参数自动提取所有识别到的内容:

binwalk -e wr841nv14_en_3_16_9_up_boot\(150429\).bin

提取完成后,进入输出目录并检查SquashFS解包结果:

cd _wr841nv14_en_3_16_9_up_boot\(150429\).bin.extracted/
ls -la
file *.squashfs  # 确认文件系统类型

若binwalk自动解包失败(SquashFS为非标准格式),使用sasquatch手动解包:

sasquatch <squashfs文件> -o ./squashfs-root

成功解包后,squashfs-root目录即为完整的根文件系统。

关键文件识别

以下命令在解包后的根目录中执行,用于定位核心组件:

# 1. 查看目录结构
ls -la squashfs-root/
ls -la squashfs-root/etc/
ls -la squashfs-root/usr/bin/

# 2. 定位Web服务程序(路由器管理界面)
find squashfs-root/ -name "*httpd*" -o -name "*uhttpd*" 2>/dev/null

# 3. 查找系统初始化脚本
ls -la squashfs-root/etc/init.d/
cat squashfs-root/etc/init.d/rcS  # 查看启动入口

# 4. 识别关键配置文件
find squashfs-root/etc/ -name "*.conf" -o -name "*.cfg" -o -name "passwd" 2>/dev/null
cat squashfs-root/etc/passwd  # 查看用户账户(通常含root密码哈希)

典型输出示例(基于该固件版本):

  • Web服务程序位于/usr/bin/httpd,为GoAhead Web服务器
  • 启动脚本/etc/init.d/rcS会调用/etc/init.d/httpd启动Web服务
  • 配置文件/etc/init.d/rcS中包含网络参数,/etc/passwd中root密码为明文或弱哈希

验证方法

完成上述步骤后,通过以下标准判断是否成功:

  1. squashfs-root/目录存在且包含bin/、etc/、usr/、lib/等标准Linux目录结构
  2. find命令能定位到httpd二进制文件,且file命令确认其为MIPS架构可执行文件(路由器常用架构)
  3. /etc/passwd文件可读取,且包含root用户条目
  4. 启动脚本rcS内容可查看,能识别出Web服务启动命令

若以上条件均满足,说明固件文件系统提取成功,且已定位到后续漏洞分析所需的关键目标文件。

常见问题

  • binwalk无法识别SquashFS:部分厂商修改了SquashFS魔数或压缩参数,使用binwalk -A强制扫描,或直接尝试sasquatch解包。
  • sasquatch编译失败:确认已安装zlib1g-dev、liblzma-dev、liblzo2-dev依赖。
  • 解包后文件系统为空:检查固件是否加密或包含多个文件系统镜像,使用binwalk -W对比熵值确认。