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

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

缺陷编号:wooyun-2013-020759

漏洞标题:Espcms v5.6 暴力注入

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

漏洞作者: Yaseng

提交时间:2013-03-28 11:01

修复时间:2013-04-02 11:02

公开时间:2013-04-02 11:02

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-03-28: 细节已通知厂商并且等待厂商处理中
2013-04-02: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

Espcms 某处挺有意思的注入,虽然对传值有加密并且随机key,但可以逆向重举这个弱伪随机数来控制sql任意参数,导致系统注入

详细说明:

interface\membermain.php 第 33行

$db_sql = "SELECT * FROM $db_table1 LEFT JOIN $db_table2 ON a.userid = b.userid  WHERE a.userid = $this->ec_member_username_id ";


ec_member_username_id 直接从cookies的ecisp_member_info
系统对cookie进行特定的加密 并且随机出key
加密函数:
public\class_function.php 第179 行

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%') {
$result = '';
if ($operation == 'ENCODE') {
for ($i = 0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key)) - 1, 1);
$char = chr(ord($char) + ord($keychar));
$result.=$char;
}
$result = base64_encode($result);
$result = str_replace(array('+', '/', '='), array('-', '_', ''), $result);
} elseif ($operation == 'DECODE') {
$data = str_replace(array('-', '_'), array('+', '/'), $string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
$string = base64_decode($data);
for ($i = 0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key)) - 1, 1);
$char = chr(ord($char) - ord($keychar));
$result.=$char;
}
}
return $result;
}


key的生成:
install\fun_center.php 第 238 行

$pscode = rand('99', '999');
$config .= "define('db_pscode', '" . md5(md5($pscode)) . "');\r\n";


额 两次md5 随机值
在围观下 cookies中 ecisp_member_info的生成吧
interface\member.php 第 110 行

$this->fun->setcookie('ecisp_member_info', $this->fun->eccode("$memberread[userid]|$memberread[alias]|$memberread[integral]|$memberread[mcid]|$memberread[email]|$memberread[lastip]|$ipadd|" . md5($_SERVER['HTTP_USER_AGENT']) . '|' . md5(admin_ClassURL), 'ENCODE', db_pscode));


用户id 名称 邮箱 等等信息,这些对于攻击者都是可知的,那不是可以重举99到999 的key来匹配这些信息
简单计算出key之后,即可以操作cookie,传入任意sql语句
例如 官方演示站

5.jpg


key为 95e87f86a2ffde5110e93c2823634927
查看当前语句
把member_info 明文为
1 and 1=2 union select 1,2,3,user(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
eccode 之后修改cookie值即可查询出mysql 当前用户

6.jpg


漏洞证明:

通过一系列编码cookie操作可以获取管理员用户名 密码

3.jpg


登陆系统后台 可在模板编辑处 getshell,从而拿下权限

10.jpg


修复方案:

过滤
使用mt_rand
改变算法

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


漏洞回应

厂商回应:

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

忽略时间:2013-04-02 11:02

厂商回复:

漏洞Rank:16 (WooYun评价)

最新状态:

2013-04-23:此漏洞已经过官方修正,下载最新包即可!