Dlink设备中的HNAP分析
字数 1499 2025-08-06 20:12:39
D-Link设备HNAP协议漏洞分析教学文档
0x01 HNAP协议概述
HNAP(Home Network Administration Protocol)是D-Link设备使用的一种家庭网络管理协议,基于SOAP实现,用于设备远程管理。
0x02 CVE-2020-8864漏洞分析
2.1 漏洞定位方法
-
使用grep搜索关键字符串定位漏洞程序:
- 关键程序:
/bin/prog.cgi - 关键函数:
sub_42141C(包含登录逻辑判断)
- 关键程序:
-
逆向分析技巧:
- 从响应包内容入手,搜索如"LoginPassword"等字符串
- 交叉引用
bin/prog.cgi和bin/prog-cgi程序 - 关键函数调用链:
websSecurityHandler:HNAP认证入口sub_423DF4:主要认证函数sub_424090:响应包生成函数
2.2 漏洞原理
漏洞出现在sub_42141C函数的登录逻辑中:
- 使用
nvram获取登录状态 - 使用
strncmp比较密码:strncmp(x, y, strlen(y)) - 漏洞模式:
- 当输入密码为
\x00时,strlen(y)返回0 strncmp比较前0个字符,总是返回0(表示匹配)- 导致非预期的登录成功
- 当输入密码为
2.3 调试方法
CGI调试建议:
- 使用shell脚本设置环境变量
- 在qemu环境中开启调试
0x03 CVE-2020-8863漏洞分析
3.1 漏洞原理
-
关键比较逻辑:
- 检查
privatelogin节点前8字节是否为"Username" - 如果是,将传入的username当作password使用
- 否则,通过
nvram从http_passwd获取密码
- 检查
-
密码处理流程:
- 密码被用于加密
- 最终结果传递到变量a4
- 函数调用链:
sub_41EA9C(a1, (int)v23):将v23指针赋给a1+212sub_424090(a1, 0):生成challenge等认证数据
-
关键发现:
public_key由http_passwd生成- 通过控制
private_login可自行构造响应数据包 - 允许用户构造认证响应,完成登录
3.2 漏洞特征
- 类似预留后门,非典型代码失误
- 与CVE-2020-8864不同点:
- 不依赖
strncmp的截断特性 - 通过特殊逻辑分支实现认证绕过
- 不依赖
0x04 漏洞对比与总结
| 特征 | CVE-2020-8864 | CVE-2020-8863 |
|---|---|---|
| 类型 | strncmp截断漏洞 | 逻辑设计缺陷 |
| 触发条件 | 输入\x00密码 | 构造privatelogin节点 |
| 影响 | 认证绕过 | 认证绕过 |
| 修复难度 | 简单(修改比较逻辑) | 复杂(需重构认证流程) |
0x05 扩展分析
-
安全编码建议:
- 避免使用
strncmp(x, y, strlen(y))模式 - 敏感比较应使用固定长度或安全比较函数
- 认证逻辑应避免特殊分支
- 避免使用
-
HNAP协议安全建议:
- 实现完整的加密认证流程
- 避免硬编码或特殊逻辑路径
- 对输入进行严格验证
-
相关漏洞:
- 文中提到设备还存在多个命令注入漏洞
- 建议对用户输入进行全面过滤
0x06 研究价值
-
展示了嵌入式设备中常见的两类漏洞:
- 低级编程错误导致的漏洞
- 设计缺陷导致的后门类漏洞
-
逆向工程技巧:
- 字符串搜索定位关键代码
- 函数调用链分析
- 关键变量跟踪技术
-
漏洞利用思路:
- 从协议处理流程中寻找薄弱环节
- 关注认证逻辑的特殊分支
- 注意内存/字符串处理函数的使用方式