Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2023-27216 — 新手固件黑客方法 | Kitploit
工具/GitHubGitHub/hoangrealer/cve-2023-27216
嵌入式系统安全物联网安全漏洞分析逆向工程调试器硬件黑客学习与教育固件分析二进制利用
GitHubhoangrealer/cve-2023-27216

CVE-2023-27216

新手固件黑客方法

3172年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CVE-2023-27216 - DLink 路由器

本文档记录了我——一名固件逆向与漏洞利用新手——的个人经验。 固件在哪??

范围

为了演示,我们将分析并复现 CVE-2023-27216。

  • CVE 编号: CVE-2023-27216
  • 漏洞描述: D-Link DSL-3782 v.1.03 中存在的一个问题允许远程认证用户通过网络设置页面以 root 身份执行任意代码。
  • 设备型号: D-Link DSL-3782
  • 固件版本: DSL-3782_A1_EU_1.01
  • 制造商官网: http://www.dlink.com.cn/
  • 固件地址: https://media.dlink.eu/support/products/dsl/dsl-3782/driver_software/dsl-3782_a1_eu_1.01_07282016.zip

任务

为了利用任何固件,需要执行以下步骤:

  • 获取固件。有两种方式:直接从硬件(摄像头、路由器、打印机等)中提取,或者从制造商网站获取。这将在另一篇文档中讨论。
  • 分析固件并查找任何漏洞
  • 模拟固件。
  • 静态构建 gdbserver 以便进行调试。

固件分析

通常,固件二进制文件包含引导加载程序(uBoot)、内核文件、引导加载程序的内核头(uImage)、压缩的文件系统(通常为 SquashFS 格式)、CRC/MD5 表(用于验证文件完整性)以及其他杂项文件。

首先找一种分析固件的方法,做一些研究后,我得到了一些资源:

  • 使用 Binwalk 分析、提取固件
  • 如何模拟:https://boschko.ca/qemu-emulating-firmware/ Binwalk 检查签名

提取重要文件

使用 binwalk 提取固件:binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin Binwalk 提取

得到了提取出的 squashfs-root 文件夹和一些奇怪的文件。 提取出的文件

额外提示: 如果你没有看到 squashfs-root 文件夹,可以对看到的任何 .squashfs 文件使用 unsquashfs。它们就像 zip 文件一样 😅。

分析固件的工作原理

检查固件的架构和字节序。可以通过检查从固件中提取的一些二进制文件来确认。检查架构和固件:file <binary> 固件架构

这里我们几乎可以确认该固件运行在 MIPS 32 位 MSB 架构上。之所以说“几乎”,是因为有些固件可能运行在具有 MIPS 兼容 能力的不同架构上,例如 Lexra。

检查 squashfs-root 文件夹后发现一些有趣的文件:

  • usr/etc/init.d/rcS => 这是固件启动时运行的脚本
  • usr/etc/passwd => 这是包含用户信息的文件
  • userfs/romfile.cfg => 其中有一组凭据 admin:admin

检查 rcS 文件后发现一些有趣的代码:

echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
  • 这段代码用于将用户信息写入 passwd 文件
  • 运行一个名为 boa server 的 Web 服务器。Boa 是一个古老的 Web 服务器,主要用于 2000 年代的路由器等嵌入式设备。然而,boa server 早在 2005 年就停止了开发!尽管 Boa 服务器已经死掉近 20 年,但多亏了我们的厂商,它至今仍然存活。 Boa 启动

全系统固件模拟

我建议使用基于 Debian 的操作系统进行模拟,例如 Ubuntu 或 Kali。还有一个专注于固件黑客攻击的操作系统叫 AttifyOS。在本文中,我使用的是 Kali Linux。开始模拟过程,有两个工具:

  • QEMU => 不要重复发明轮子 🙏 🛐
  • FAT- Firmware-analysis-toolkit => 它确实有效,你可以阅读源代码来了解它的作用。

坚持下去

让我们看看如何使用 FAT 完全模拟一个固件。首先,我们将仓库从 GitHub 克隆到你的 Kali 机器上,然后进行设置过程。你还需要修改 fat.config 文件,否则它无法正常工作。

git clone https://github.com/attify/firmware-analysis-toolkit.git

cd firmware-analysis-toolkit

./setup.sh

vi fat.config # Modify to your sudo password.

然后,我们将固件二进制文件(即从制造商处下载的那个)复制到 Kali 机器上 FAT 的文件夹中,并运行它。

./fat.py DSL-3782_A1_EU_1.01_07282016.bin

注意:在 FAT 的设置过程中,我们可能会遇到错误。它可能会提示缺少 libmagic。 FAT 运行失败

只需运行

pip unistall python-magic
pip install python-magic

这应该可以解决你的问题,然后我们再次运行构建命令。现在应该会很顺利。

FAT 运行良好

按 Enter 键运行。模拟过程应该会顺利工作,你可以在(Kali 机器上)浏览 http://192.168.1.1 来检查是否正常运行。

路由器主页

如果你有凭据,也可以登录控制台。这里是 admin:admin。

控制台登录

如果你决定关闭模拟的固件,只需按 Ctrl+A X。当需要再次运行时,不要再次运行 fat.py,因为固件已经被构建成镜像。你只需运行已经生成的脚本。

cd firmadyne/scratch/<Image-ID>
./run.sh

重新运行镜像

调试器

为调试目的构建 gdbserver。有很多方法可以构建 gdbserver。你也可以下载静态构建好的服务器。这个仓库 存储了一些静态构建的版本。不过,我更倾向于自己构建 gdbserver,因为 GitHub 仓库中的那些版本比较旧,可能会遇到一些兼容性问题。

可参考这篇博客文章:https://sheran.sg/blog/cross-compile-gdb-for-mips/。该博客发布于 2024 年 7 月 30 日,正好在这个项目之前,所以它完美适用。 注意:该博客是为 MIPS x32 LSB 构建的,但我们需要 MIPS x32 MSB。我们需要将 mipsel-linux-gnu 改为 mips-linux-gnu。

构建步骤

我们需要为 MIPS 安装工具链。幸运的是,Debian 软件包中已经包含了它。

**apt update && apt upgrade -y
apt install -y build-essential m4 gcc-mips-linux-gnu g++-mips-linux-gnu**

要为 MIPS 构建 gdbserver,我们需要构建并安装一些软件包。以下是我获取源码的地方。

  1. gdb 15.1 - https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
  2. GNU GMP lib v6.3.0 - https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
  3. GNU MPFR lib v4.2.1 - https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

获取源码

wget https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
wget https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

使用工具链构建库 在构建这些库时,拥有 root 权限至关重要。我们必须先构建 GMP,因为它是构建 MPFR 时的依赖项。

tar xvf gmp-6.3.0.tar.xz && cd gmp-6.3.0
./configure --host=mips-linux-gnu
make -j$((`nproc`+1))
make install
cd ..

然后我们构建 MPFR:

tar xvf mpfr-4.2.1.tar.xz && cd mpfr-4.2.1
./configure --host=mipsel-linux-gnu --with-gmp-build=<YOUR-FOLDER>/gmp-6.3.0
make -j$((`nproc`+1))
make install
cd ..

现在我们可以最终构建 gdbserver 了:

tar xvf gdb-15.1.tar.xz && cd gdb-15.1
./configure --host=mipsel-linux-gnu --with-gmp-lib=/usr/local/lib --with-mpfr-lib=/usr/local/lib --with-gmp-include=<YOUR-FOLDER>/gmp-6.3.0 --with-mpfr-include=<YOUR-FOLDER>/mpfr-4.2.1/src
make -j$((`nproc`+1)) LDFLAGS=-static

构建出的二进制文件 gdbserver 应该位于 gdb-15.1/gdbserver 文件夹中。

将 gdbserver 推送到固件镜像中

模拟的固件没有 wget、nc、curl、/dev/tcp 等。我们无法托管 Python HTTP 服务器来传输文件。我们也没有 ssh。但是,我们仍然可以通过挂载镜像将 gdbserver 放入模拟的机器中。

  • sudo ./scripts/mount.sh 1
  • 将 静态 构建的 gdbserver 复制到挂载文件夹中的任意位置。
  • sudo ./scripts/umount.sh 1
  • 重启 qemu(再次执行 ./run.sh 以确保万无一失)。

将 gdbserver 推送到镜像

测试 gdbserver

端口转发

从现在起,你可以在 Kali 机器内进行调试和黑客攻击。不过,我们还可以更进一步,将模拟机器端口转发到宿主机(Windows 或 Mac)。

检查我们的网络

首先让我们使用 ifconfig 检查网络。 ifconfig

结果告诉我们有 2 个接口:eth0 和 tap1_0。据我们所知,eth0 是宿主机共享网络的接口,而 tap1_0 是模拟固件机器的接口。

为了更容易理解,eth0 的网络就像公共网络,我们可以从宿主机访问 Kali 机器。tap1_0 则像私有网络,只能从 Kali 机器访问。我们需要将来自 eth0 的连接转发到 tap1_0 接口上的 192.168.1.1:80 端口。

允许端口转发

有很多工具可以帮助我们实现这一点。不过,iptables 似乎效果最好——当然,前提是你知道如何配置。

我们必须先允许端口转发。运行以下命令:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

这仅在一次会话中有效。如果你想永久生效,请修改 /etc/sysctl.conf 的内容。

net.ipv4.ip_forward=1 # Find this line, uncomment it.

完成后保存并关闭文件。

然后应用此文件中的设置。运行以下命令:

sudo sysctl -p
sudo sysctl --system

使用 iptables 进行端口转发

通常,我们可以运行一堆 iptables 命令。但这太繁琐了 😵‍💫。我们可以安装一个工具 iptables-persistent。它允许你编写配置文件、加载到文件或提取链到文件。所有这些都可以快速完成。

apt install iptables-persistent
下载工具