Files
Penetration_Testing_POC/iot/手把手带你分析mips架构下固件分析与漏洞挖掘.md
T
CopilotandMr-xn 2b0f5a5e19 Move newly added IoT docs into /iot and update README links (#96)
* Move IoT docs into root iot directory

Co-authored-by: Mr-xn <[email protected]>

* Append missing IoT README entries

Co-authored-by: Mr-xn <[email protected]>

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: Mr-xn <[email protected]>
2026-10-15 09:25:15 -04:00

7.0 KiB
Raw Blame History

手把手带你分析mips架构下固件分析与漏洞挖掘

meigui 来源:https://www.iotsec-zone.com/article/503

固件分析和解包

拿到固件后,第一步是对其进行解包分析。我们通常查找 busybox 可执行文件来判断固件的 CPU 架构(如 MIPS、ARM)、端序(大端或小端),以及是否开启了安全机制(如堆栈保护、NX)。busybox 一般位于 /bin 目录中。通过如下命令我们可以快速获取架构信息,本例中结果显示为 MIPS32 小端架构。

binwalk -Me WN579A3-WAVLINK-WO-2022-03-23-854d73f.bin

0.png

file busybox

用于识别可执行文件类型。通过这个命令我们可以判断 busybox 是哪种架构(如 MIPS、ARM)、位数(32/64位),以及是否为静态或动态链接。本例结果显示为:MIPS、32位、小端、静态链接的 ELF 可执行文件。

file busybox

1.png

readelf -h busybox

查看 ELF 文件头,进一步确认架构信息、字节序、入口点等关键信息。比如:

  • Class 显示是 ELF32
  • Data 显示是 Little endian(小端)
  • Machine 显示是 MIPS
    这确认了我们之前用 file 得出的结论。
readelf -h busybox

2.png

checksec busybox

用于检查二进制文件的安全特性是否开启,例如:

  • NX(No eXecute,是否启用不可执行栈)
  • PIE(位置无关执行)
  • Stack Canary(堆栈保护)
    这些信息可以帮助我们判断程序是否容易受到缓冲区溢出等攻击。本例中,大多数保护机制未启用,表明存在潜在的利用空间。
checksec busybox

3.png

我们使用自动化工具firmAE起不来考虑系统模拟或者用户模拟

4.png

系统模拟

启动项分析

启动项是指设备启动后自动执行的程序或脚本,通常用于初始化系统服务或前后端程序。我们一般在 /etc/init.d/ 目录中查找这些启动脚本(以 .sh 为后缀)。在嵌入式设备中,常见的 Web 服务启动程序有 httpd、lighttpd、mini_httpd 等。发现相关脚本后,应进一步检查其配置文件路径和依赖项。

5.png

6.png

7.png

8.png

我们在进行mips系统模拟前需要先配置我们的网卡

创建虚拟网卡
sudo tunctl -t tap0 -u `whoami`
sudo ifconfig tap0 192.168.100.1/24 up

接下来运行我们mips系统模拟脚本

#!/bin/sh
qemu-system-mipsel \
-M malta \
-kernel /home/iotsec-zone/Tools/qemu-images/mipsel/vmlinux-3.2.0-4-4kc-malta \
-hda //home/iotsec-zone/Tools/qemu-images/mipsel/debian_wheezy_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=ttyS0"  \
-nographic \
-net nic -net tap,ifname=tap0,script=no,downscript=no

我们传输我们解密的文件系统squashfs-root到我们qemu系统模拟中

打包squashfs-root文件
tar -cvf s.tar.gz  squashfs-root

开启7878端口让qemu下载squashfs-root
cd squashfs-root
python -m http.server 7878

qemu模拟
wget http://192.168.100.1:7878/s.tar.gz
解压
tar -zvxf s.tar.gz

9.png

10.png

11.png 我们需要去配置系统环境

目录挂载
mount --bind /proc/ proc/
mount --bind /sys/ sys/
mount --bind /dev/ dev/

qemu虚拟机配置网卡:
ip link add br0 type dummy
ifconfig eth0 192.168.100.2/24
ifconfig br0 192.168.100.3/24

进入模拟系统后尝试使用 bash,但报出非法指令错误,通常是因为 CPU 架构不兼容。我们更换 QEMU 使用的 CPU 为 74Kf(支持更多指令集),重新运行脚本后问题解决

12.png

#!/bin/sh
qemu-system-mipsel \
-M malta \
-cpu 74Kf \
-kernel /home/iotsec-zone/Tools/qemu-images/mipsel/vmlinux-3.2.0-4-4kc-malta \
-hda //home/iotsec-zone/Tools/qemu-images/mipsel/debian_wheezy_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=ttyS0"  \
-nographic \
-net nic -net tap,ifname=tap0,script=no,downscript=no

13.png

我们运行lighttpd程序出现报错,需要去解决错误,我们去我们之前解包的文件系统里面去搜索

14.png

发现lib目录下有functions.sh,我们先运行这个

15.png

16.png 我们继续运行./lighttpd,继续解决报错,发现在/rom/etc/lighttpd/没有这文件lighttpd.conf,那我们手动创建一个就行。

17.png

我们继续运行./lighttpd,没有报错。

18.png 需要注意,这个ip是我们本机配的192.168.100.2,我们需要配置host,关联相关域名。

19.png

20.png

未授权漏洞(0day)

1.我们使用burp的intruder功能进行快速的寻找漏洞点,我们复制里面文件在web进行拼接

21.png

我们先弄成全部的文件名。

22.png

23.png 我们在请求头路径上打点,在payloads复制我们的文件名。点击attack就行。

24.png

25.png

我们可以看到有个803f5d.txt信息泄露

26.png 通过爆破结果可以发现存在信息泄露文件,如 803f5d.txt,该文件可能包含敏感的配置、日志或用户信息,需进一步分析文件内容

27.png