使用预修补组件简化D-Link DCS-932L固件模拟,并包含针对CVE-2024-37606的概念验证漏洞利用。

欢迎!本仓库提供了用于仿真 D-Link DCS-932L 固件并演示 CVE-2024-37606 漏洞的工具和环境。它包含了预补丁的二进制文件和必要的库,简化了仿真设置,因此您无需手动使用 Ghidra 等工具进行修补。
本项目包含一个针对 CVE-2024-37606 的概念验证漏洞利用脚本(CVE-2024-37606-DCS932L.py)。该漏洞涉及 alphapd 服务中的缓冲区溢出。请负责任地使用,仅用于教育目的。
点击图片观看视频

为增强固件仿真环境的功能和易用性,进行了以下几项修改:
startup.sh)以简化仿真。libnvram.so 中移除了第 338 至 342 行,以确保 NVRAM 仿真器的正常运行。已包含修改后的文件(firmadyne/libnvram.so)。alphapd 二进制文件,以解决仿真期间无法从 sysinfo 获取 IP 的错误。qemu-mipsel-static 用于 MIPS 小端仿真。按照以下步骤设置仿真环境并运行漏洞利用脚本。
gitqemu-user-staticpython3 和 pipgit clone https://github.com/itwizardo/DCS932L-Emulation-CVE-2024-37606-Attack DCS932L-CVE
cd DCS932L-CVE
sudo apt update
sudo apt install qemu-user-static
brew install qemu
# 通过 Homebrew 安装 QEMU 包含用户模式静态二进制文件。
choco install qemu
将 QEMU 静态二进制文件复制到固件的文件系统中:
sudo cp /usr/bin/qemu-mipsel-static ./usr/bin/
对 web 目录设置不可变属性。这可以防止修改仿真和漏洞利用正常运行所需的关键 Web 服务器文件:
sudo chattr +i etc_ro/web/
Set-ItemProperty -Path ./etc_ro/web -Name IsReadOnly -Value $true
# 注意:这会将目录设置为只读,防止意外更改。
# 要使内容也变为只读,请使用 -Recurse 参数配合 Get-ChildItem:
# Get-ChildItem -Path ./etc_ro/web -Recurse | Set-ItemProperty -Name IsReadOnly -Value $true
sudo chflags schg etc_ro/web/
使用 MIPS 小端 QEMU 二进制文件进入 chroot 环境:
sudo chroot . /usr/bin/qemu-mipsel-static /bin/sh
在 chroot shell 中,运行启动脚本并启动 Web 服务器:
# 执行启动任务(网络设置等)
./startup.sh
# 为 nvram 仿真设置环境变量
export LD_PRELOAD=/firmadyne/libnvram.so
export HOME=.
export RANDFILE=$HOME/.rnd
# 启动易受攻击的 Web 服务器(绑定到 0.0.0.0,完全初始化可能需要 1-2 分钟)
alphapd
保持此终端运行。仿真设备的服务将可通过主机访问,使用 startup.sh 配置的 IP 地址(通常为 192.168.0.1)。
在主机的 新终端窗口 中(在 chroot 环境外部)。
在新终端中:
cd /path/to/DCS932L # 必要时调整路径
(可选)如果脚本需要,安装必要的 Python 包(例如 requests):
# pip3 install requests # 如果需要,取消注释
执行漏洞利用脚本。它会自动针对本地仿真环境(由 startup.sh 设置的 192.168.0.1):
python3 CVE-2024-37606-DCS932L.py
要针对不同的 IP 地址,请使用 --ip 参数:
# 示例:python3 CVE-2024-37606-DCS932L.py --ip <target_ip>
跟随脚本的输出查看漏洞利用过程。
qemu-mipsel-static。qemu-mips-static(大端序)将导致 Invalid ELF image 错误。alphapd 服务在 chroot 环境内绑定到 0.0.0.0,执行后可能需要 1-2 分钟 才能完全响应。startup.sh 脚本可能会设置一个网络接口(例如 tap0),IP 为 192.168.0.1。如果漏洞利用脚本无法连接,请验证此项。/lib/ld-uClibc.so.0)存在于 chroot 环境的 /lib 目录中。本项目仅用于教育和研究目的。它演示了一个已知的漏洞(CVE-2024-37606)。作者不对任何滥用本信息或代码的行为负责。请负责任且合乎道德地使用此环境和漏洞利用脚本。
本项目是作为 Novi Hogeschool 学校项目的一部分开发的。
Georgio T. - itwizardo
欢迎为此项目做出贡献,并改进用于固件逆向工程和安全分析的工具!