Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何用0day漏洞黑掉西部数据NAS存储设备

如何用0day漏洞黑掉西部数据NAS存储设备

作者头像
FB客服
发布于 2018-02-23 08:55:52
发布于 2018-02-23 08:55:52
1.5K0
举报
文章被收录于专栏:FreeBufFreeBuf

我们以入侵和破解设备为乐,今天,要向大家展示的是近期我们对西部数据(Western Digital )网络存储设备(NAS)的漏洞发现和入侵利用过程。点击阅读原文观看入侵视频。

漏洞发现

去年年中,我打算入手一台支持硬件解码的NAS存储来搭建Plex流媒体服务平台,经过一番比较,在一位朋友的推荐下,我选择了西部数据(Western Digital )的MyCloud PR4100,该存储设备完全满足我所有的功能需求。把该设备添加进网络之后,可以通过一个Web界面访问登录,由于我对使用设备有安全洁癖,所以在登录开启SSH连接之后,我开始对其网页服务功能进行了安全审计,并发现了以下存在漏洞:

登录验证绕过漏洞

很惊讶,我很快发现了一个用cookie和PHP session进行登录检查的bug。虽然使用cookie认证并不都是坏事,但该设备的使用方式存在问题,请看以下脚本:

/lib/login_checker.php

function login_check() { $ret = 0; if (isset($_SESSION['username'])) { if(isset($_SESSION['username']) && $_SESSION['username'] != "") $ret = 2; //login, normal user if ($_SESSION['isAdmin'] == 1) $ret = 1; //login,admin } else if (isset($_COOKIE['username'])) { if (isset($_COOKIE['username'])&& $_COOKIE['username'] != "") $ret = 2; //login, normaluser if ($_COOKIE['isAdmin'] == 1) $ret = 1; //login,admin } return $ret; }

代码包含一个名为 “login_check”的函数,后台PHP脚本通过调用该函数对预登录用户进行认证校验。函数代码显示,可以通过两种方式进行认证,一种是session方式的“username”“isAdmin”判断,另一种是cookie方式的判断。由于cookie由用户执行产生,所以攻击者同样可以构造满足脚本调用的恶意请求。上述代码认证方式可以归纳为以下方式:

当存在“username” 变量且不为空时,用户作为正常权限用户登录; 当存在“isAdmin”变量且不为空时,用户作为管理员登录;

这意味着,只要使用php脚本进行登录验证时,攻击者就可以构造特殊cookie变量绕过验证。

补丁更新导致新的漏洞

然而,就在我的研究过程中,该存储设备的一个固件更新释出对上述bug的修复补丁。但更不可思议的是,该补丁却导致了另外一种方式的验证绕过漏洞。以下是更新后的登录验证脚本:

/var/www/web/lib/login_checker.php

function login_check() { $ret = 0; if (isset($_SESSION['username'])) { if(isset($_SESSION['username']) && $_SESSION['username'] != "") $ret = 2; //login, normal user if ($_SESSION['isAdmin'] == 1) $ret = 1; //login,admin } else if (isset($_COOKIE['username'])) { if(isset($_COOKIE['username']) && $_COOKIE['username'] != "") $ret = 2; //login, normal user if ($_COOKIE['isAdmin'] == 1) $ret = 1; //login, admin if(wto_check($_COOKIE['username']) === 0) //wto check fail $ret = 0; } return $ret; } ?>

更新后的代码第40行,增加了对用户验证的 “wto_check()”方法,用户名和IP地址都是该方法的参数。当前登入用户保持操作状态,则返回1,超时则返回0。“wto_check()”实现代码如下:

/var/www/web/lib/login_checker.php

/* return value: 1: Login, 0: No login */ function wto_check($username) { if (empty($username)) return 0; exec(sprintf("wto -n \"%s\" -i '%s' -c",escapeshellcmd($username), $_SERVER["REMOTE_ADDR"]), $login_status); if ($login_status[0] === "WTO CHECK OK") return 1; else return 0; } /*ret: 0: no login, 1: login, admin, 2: login, normal user */

上述代码第11行中,用户名和IP地址被初始化为wto变量参数,而问题就出在用来处理整个命令字符串的方法“escapeshellcmd()”,该方法不会对-n参数中配对的引号进行转义,这就给了攻击者重新构造或绕过验证的可能,因此,我们可以添加新的参数绕过验证并执行任意用户登录。

Freebuf百科:escapeshellcmd()对字符串中可能会欺骗shell命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec()或 system()函数,或者执行操作符之前进行转义。反斜线(\)会在以下字符之前插入: #&;`|*?~<>^()[]{}$\, \x0A 和 \xFF。 而' 和 " 仅在不配对的时候被转义,在 Windows 平台上,所有这些字符以及 % 都会被前缀 ^ 来转义。(详细请参考 php.net相关说明)

这里,最好使用Escapeshellarg方法函数,Escapeshellarg()会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令绕过或注入攻击的目的。

命令注入漏洞

大多数的西部数据MyCloud设备Web界面,实际上是由CGI脚本来实现的,这些脚本中大部分二进制文件都存在着相同的功能模式,如从请求包中获取post/get/cookie值,然后应用这些值执行相关命令。然而,大多数情况下,这些命令会使用到用户提交的一些未经安全处理的恶意数据。例如,以下设备中存在的代码:

php/users.php

15 $username = $_COOKIE['username']; 16 exec("wto -n\"$username\" -g", $ret);

代码把包含cookie值的全局变量数组$_COOKIE命名为”$username”,之后,该”$username”作为后续“exec()”命令执行的调用参数。因为没有任何过滤措施,可以这样更改一下,把username值设为:

username=$(touch /tmp/1)

那么执行命令将会变为:

wto -n "$(touch /tmp/1)" -g

很容易就执行了用户的自定义命令。

由于命令行参数被双引号封装,在执行“$(COMMANDHERE)”语法时,命令“touch /tmp/1”先于wto前就已经执行,并把返回结果作为-n参数。这种web接口对内置脚本的交互调用模式,明显会导致命令注入漏洞。而且,使得注意的是,所有通过web端构造的命令都会被以root权限执行。

其它Bug

除了以上两个高危漏洞之外,该设备在web服务方面还存在其它一些严重Bugs,比如以下文件中正常登录验证行为被错误地注释掉:

6 //include("../lib/login_checker.php"); 7// 8///* login_check() return 0: no login, 1: login, admin, 2: login, normal user*/ 9//if (login_check() == 0) 10//{ 11// echo json_encode($r); 12// exit; 13//}

而以下上传功能文件可以针对设备系统,执行无需用户验证的,任意目录位置的任意文件上传:

addons/upload.php

2 //if(!isset($_REQUEST['name'])) throw newException('Name required'); 3//if(!preg_match('/^[-a-z0-9_][-a-z0-9_.]*$/i', $_REQUEST['name'])) throw newException('Name error'); 4// 5//if(!isset($_REQUEST['index'])) throw new Exception('Index required'); 6//if(!preg_match('/^[0-9]+$/', $_REQUEST['index'])) throw new Exception('Indexerror'); 7// 8//if(!isset($_FILES['file'])) throw new Exception('Upload required'); 9//if($_FILES['file']['error'] != 0) throw new Exception('Upload error');

10 11$path = str_replace('//','/',$_REQUEST['folder']); 12$filename = str_replace('\\','',$_REQUEST['name']); 13$target = $path . $filename . '-' .$_REQUEST['index']; 14 15//$target = $_REQUEST['folder'] .$_REQUEST['name'] . '-' . $_REQUEST['index'];

16 17move_uploaded_file($_FILES['file']['tmp_name'], $target); 18 19 20//$handle = fopen("/tmp/debug.txt", "w+"); 21//fwrite($handle, $_FILES['file']['tmp_name']); 22//fwrite($handle, "\n"); 23//fwrite($handle, $target); 24//fclose($handle);

25 26// Might execute too quickly. 27sleep(1);

除此之外,我们还发现了另外一个个远程命令执行漏洞(RCE)和身份验证命令执行漏洞,在此就不作公开。由于这些漏洞在此之前,没人发现或爆料过,可以算是西部数据NAS设备的0day漏洞。

漏洞总结

1 x 登录验证绕过漏洞 1 x 任意文件上传漏洞 1 x 无需用户验证的远程代码执行漏洞 1x 身份验证命令执行漏洞

漏洞影响范围

涉及西部数据以下型号系列的NAS设备

My Cloud My Cloud Gen 2 My Cloud Mirror My Cloud PR2100 My Cloud PR4100 My Cloud EX2 Ultra My Cloud EX2 My Cloud EX4 My Cloud EX2100

后续的补丁更新和相关情况,请继续关注我们的Twitter @exploiters

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
攻击LNMP架构Web应用的几个小Tricks
农历新年初一,我在代码审计知识星球分享了一个红包,但领取红包的条件是破解我出的一道代码审计相关题目,题干如下:
phith0n
2020/10/15
7380
西部数据My Cloud存储设备被曝可提权认证绕过漏洞
近期,网络设备漏洞研究团队exploitee.rs公布,西部数据 My Cloud 网络存储设备存在一个认证绕过漏洞( CVE-2018-17153),未授权的远程或本地网络攻击者可以利用该漏洞,无需密码就能提权成为admin管理员身份,获取对 My Cloud设备的完全控制权。
FB客服
2018/10/25
6620
西部数据My Cloud存储设备被曝可提权认证绕过漏洞
希捷网络存储(NAS)设备上存在0day漏洞,Metasploit已更新漏洞利用程序
希捷科技(Seagate)成立于1979年,是著名的硬盘和存储解决方案供应商。最近安全专家在希捷网络附加存储(NAS)设备上发现了一个高危0day漏洞,攻击者可以未经授权远程执行恶意代码,获得设备Root权限。 安全研究人员OJ Reeves发现无论是在家庭网络还是在公司网络中,希捷网络附加存储(NAS)设备都会受0day远程代码执行漏洞的影响。目前已经有超过2500台设备暴露在了危险之中。 漏洞详情 希捷的网络附加存储(NAS)设备是一种网络管理应用程序,管理员通常会用它添加用户、设置访问权限、管理文
FB客服
2018/02/05
1.2K0
希捷网络存储(NAS)设备上存在0day漏洞,Metasploit已更新漏洞利用程序
2018 全国大学生软件测试大赛——安恒杯Web测试大赛全国总决赛部分Writeup
将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入shell函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell函数包含exec()【http://php.net/manual/zh/function.exec.php】,system()【http://php.net/manual/zh/function.system.php】和执行运算符【http://php.net/manual/zh/language.operators.execution.php】。
安恒网络空间安全讲武堂
2018/12/18
2.9K0
西部数据My Cloud NAS设备曝大量高危漏洞
“用指尖改变世界” 安全研究人员在西部数据公司(Western Digital)的My Cloud NAS设备中发现了几个严重的漏洞和一个采用硬编码的后门程序,这些漏洞可能允许远程攻击者无限制地访问设备。 西部数据的My Cloud(WD My Cloud)系列NAS设备是最受欢迎的网络连接存储设备之一,个人和企业正在使用它来托管他们的文件,并自动备份和同步他们的各种云和基于Web的服务。 该设备不仅可以让用户共享家庭网络中的文件,而且私有云功能还允许用户随时随地访问他们的数据。 由于这些设备被设计为通
企鹅号小编
2018/02/08
1.9K0
西部数据My Cloud NAS设备曝大量高危漏洞
看代码学渗透 Day5 - escapeshellarg与escapeshellcmd使用不当
-----------------------------------------------------------------------------------------
用户1631416
2018/09/14
2K0
看代码学渗透 Day5 - escapeshellarg与escapeshellcmd使用不当
浅析漏洞防范
SQL注入漏洞:在编写操作数据库的代码时,将外部变量直接拼接到SQL语句中且没有经过任何过滤机制就放入数据库中执行。
字节脉搏实验室
2020/09/25
1.6K0
浅析漏洞防范
西部数据网盘又爆惊天漏洞!NAS存储可被瞬间清零
1亿像素、4k甚至是8k视频拍摄屡见不鲜。但是在这背后就是数据的爆炸:一张一亿像素的照片最高可能达到20MB,一分钟的8k视频需要吞掉2GB的存储空间。
新智元
2021/07/06
1K0
2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (1)———— 作者:LJS
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系 统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后 台数据库乃至整个应用系统的入侵
盛透侧视攻城狮
2024/10/22
2050
2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (1)———— 作者:LJS
DVWA笔记(二)----Brute Force
相信大家看过之前的教程已经成功搭建起我们的渗透测试环境啦!那么,在这篇文章中一起开启web渗透测试的第一篇吧!爆破什么的最爽了!
用户5878089
2019/07/25
1.3K0
DVWA笔记(二)----Brute Force
seacms 最新版前台注入漏洞
海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,采用的是 php5.X+mysql 的架构,使用 fofa 搜索可以看到存在 400+的记录:
p4nda
2023/01/03
2.3K0
seacms 最新版前台注入漏洞
0CTF/TCTF2018 Final Web Writeup
这是一道tomato师傅出的不完整的java题,java…,java…我恨java┑( ̄Д  ̄)┍
LoRexxar
2023/02/21
5250
渗透专题丨web Top10 漏洞简述(2)
程序在引用文件的时,引用的文件名,用户可控的情况,传入的文件名校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入。这是因为程序开发时候会把重复使用的函数写到归档在一起,用到哪个函数就可以直接进行调用,而为了代码更灵活,包含的文件会被设置为变量动态调用,这里就容易造成文件包含漏洞。
极安御信安全研究院
2023/06/14
3650
渗透专题丨web Top10 漏洞简述(2)
2017 LCTF WriteUp 4篇
周末刚刚结束的LCTF,我们队一共做出了4道web,一道misc还有一道问卷调查(好气啊没抢到一血换pwnhub邀请码),感谢吃饭去大佬带飞~ 前言 对本渣渣而言,本次比赛质量还是不错的,我们队做出的四道web就涉及到了CBC字节翻转攻击、PaddingOracle攻击、sprintf格式化注入、sql报错注出库名表名、join注入出列名、orderby无表名注入数据、SSRF绕过、条件竞争、7个字符内getshell等知识,收获颇丰。下面是4道web的题目和WriteUp: Simple blog “他
安恒网络空间安全讲武堂
2018/02/06
1.4K0
2017 LCTF WriteUp 4篇
西部数据NAS设备被曝存在硬编码后门和未授权文件上传高危漏洞
近日,GulfTech公司安全研究员James Bercegay发现,西部数据(Western Digital)旗下多个MyCloud系列网络存储设备(WDMyCloud NAS)存在未限制文件上传、硬编码后门、CSRF、命令注入等多个高危漏洞,攻击者可以利用这些漏洞,对MyCloud NAS设备植入恶意代码,远程登录或获得设备控制权限(漏洞利用exploit)。而且,WDMyCloud竟然还与D-Link存在代码共用情况! 漏洞概述和受影响设备 西部数据MyCloud系列(WDMyCloud )广泛应用于
FB客服
2018/02/24
1.8K0
【网鼎杯充电站】HITCON 2017-writeup整理
在上次推送中,我们总结了17年广东省强网杯Web部分的write-up,在这篇文章中我们来学习2017年HITCON的write-up。继续加油,奥力给!
用户5836910
2022/06/02
7670
【网鼎杯充电站】HITCON 2017-writeup整理
PHP 邮件漏洞小结
PHP中,mail的函数在底层是写好的,调用linux的sendmail程序来发送邮件,在额外参数中,sendmail还支持其他三个选项。
安恒网络空间安全讲武堂
2019/05/28
2.4K0
PHP SECURITY CALENDAR Writeup
这是文件上传中常用的一个函数,文件被上传结束后,默认地被存储在了临时目录中,这时必须将它从临时目录中移动到其它地方,因为脚本执行完后,临时目录里的文件会被删除。所以要在删除之前用 PHP 的 copy() 或者 move_upload_file() 函数将它复制或者移动到其它位置,到此,才算完成了上传文件过程。
wywwzjj
2023/05/09
2.1K0
PHP SECURITY CALENDAR Writeup
程序员疫苗:代码注入
“eval“的参数将会视同PHP处理,所以额外的命令可被添加。例如:如果”arg”如果被设成”10; system('rm -rf /')“,后面的”system('rm -rf /')“代码将被运行,这等同在服务器上运行开发者意料外的程序。(关于rm -rf /,你懂的,可参看“一个空格引发的悲剧”)
洛米唯熊
2019/07/25
7760
2018红帽杯线下攻防赛Web总结
这次的红帽杯线下赛,两个Web被打的一头雾水,不知道怎么回事... 于是赛后进行了漏洞发现和总结,有了这篇文。 漏洞发现方式 赛后为了可以找到绝大数主办方留下的漏洞,我选择下载官方对应版本的cms,然
安恒网络空间安全讲武堂
2018/06/22
1.8K0
推荐阅读
相关推荐
攻击LNMP架构Web应用的几个小Tricks
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档