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

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

缺陷编号:wooyun-2015-0136346

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

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

漏洞作者: xfkxfk

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

修复时间:2015-11-25 09:18

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

漏洞类型:文件包含

危害等级:高

自评Rank:15

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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:

<?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:

$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:

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


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

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

最新状态:

暂无