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

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

缺陷编号: WooYun-2015-136346

漏洞标题: AfterLogic WebMail最新版任意文件包含

相关厂商: cncert国家互联网应急中心

漏洞作者: xfkxfk认证白帽子

提交时间: 2015-08-25 19:44

公开时间: 2015-11-25 09:18

漏洞类型: 文件包含

危害等级: 高

自评Rank: 15

漏洞状态: 已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签: php源码审核 文件包含漏洞

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

AfterLogic WebMail任意文件包含,包括最新版,和老版本都存在这个问题,无需登录。

详细说明:

AfterLogic WebMail最新版7.6.0的版本为例进行测试



AfterLogic WebMail在安装后默认是不会删除install目录的



所以这里你也可以重装,设置自己的mailserver,进行各种操作



在安装过程中存在设计缺陷导致无需登录,即可进行任意文件包含



文件/install/index.php:

code 区域
<?php

/*
* Copyright 2004-2015, AfterLogic Corp.
* Licensed under AGPLv3 license or AfterLogic license
* if commercial version of the product was purchased.
* See the LICENSE file for a full license statement.
*/


defined('WM_INSTALLER_PATH') || define('WM_INSTALLER_PATH', (dirname(__FILE__).'/'));

include WM_INSTALLER_PATH.'installer.php';

$oInstaller = new CInstaller();
$oInstaller->Run();





跟进/install/installer.php:

code 区域
$this->_sState = isset($_GET['step']) ? $_GET['step'] : 'index';
$this->_aMenu = array(
'compatibility', 'license', 'license-key', 'db',
'dav', 'admin-panel', 'email-server-test', 'completed'
);

function Run()
{
if (isset($_GET['post']))
{
$this->Post();
exit();
}

if ('index' === $this->_sState)
{
$_SESSION['checksessionindex'] = true;
header('Location: index.php?step=compatibility');
exit();
}

$sState = in_array($this->_sState, $this->_aMenu) ? $this->_sState : 'compatibility';



当这里是POST请求时会调用POST函数

如果是GET的话就会判断这里的$this->_sState:

code 区域
$sState = in_array($this->_sState, $this->_aMenu) ? $this->_sState : 'compatibility';



所以这里参数$this->_sState被限制,没办法利用,我们看看POST方法:

code 区域
function Post()
{
$sState = empty($_POST['state']) ? '' : $_POST['state'];
if (isset($_POST['back_btn']))
{
header('Location: '.'index.php?step='.$this->getBackStep($sState));
}
else
{
$oStepObject = null;
if (@file_exists(WM_INSTALLER_PATH.'steps/'.$sState.'.php'))
{
include_once WM_INSTALLER_PATH.'steps/'.$sState.'.php';
$oCurrentStateStepClass = 'C'.ucfirst(preg_replace('/[^a-z]/', '', $sState)).'Step';
$oStepObject = new $oCurrentStateStepClass;

$sUrl = 'index.php?step='.$sState;
if ($oStepObject->DoPost())
{
$sUrl = 'index.php?step='.$this->getNextStep($sState);
}

header('Location: '.$sUrl);
}
else
{
echo 'State error';
}
}
}



可以看到这里$sState = empty($_POST['state']) ? '' : $_POST['state'];

然后判断文件是否存在,如果存在就include_once这个文件

在进入include_once的文件中带入了我们可控的变量$sState

所以导致存在包含漏洞

但是这里有点鸡肋,就是需要截断,在5.3.4后的php版本就没办法进行截断了

漏洞证明:

1.png





当然这里可以利用重装,然后登陆上传文件拿到shell

修复方案:

安装文成后自动删除install,或者进行instal.lock判断

版权声明:转载请注明来源 xfkxfk@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-08-27 09:17

厂商回复:

CNVD确认并复现所述情况,根据实测案例,暂未发现国内政府和重要部门用户案例,由于未建立与该厂商的直接处置渠道,待认领.

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2016-01-23 15:05 | BeenQuiver ( 普通白帽子 | Rank:103 漏洞数:27 | 专注而高效,坚持好的习惯千万不要放弃)
    0

    来过路过

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