### 简要描述:
phpshe任意修改订单状态+鸡肋注入1枚
### 详细说明:
先来看看如何修改订单状态,在/include/plugin/payway/alipay/notify_url_sgn.php
就像 [WooYun: phpshe最新版sql注入一枚](http://www.wooyun.org/bugs/wooyun-2015-0103612) 中说的,厂商一直在确认,但是还是没在根本上解决,这里引起了任意修改订单状态,又可以不花钱买东西了~~
可以对订单状态任意修改,这里以“把订单由未付款改为已付款,等待发货”为例进行说明。
```
include('../../../../common.php');
require_once("alipay.config.php");
require_once("lib/alipay_notify.class.php");
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
//验证成功
if ($verify_result) {
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
$info = $db->pe_select('order', array('order_id'=>$out_trade_no));
//该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
echo "success"; //请不要修改或删除
}
//该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货
elseif ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
if ($info['order_state'] == 'notpay') {
$order['order_outid'] = $trade_no;
$order['order_payway'] = 'alipay_db';
$order['order_state'] = 'paid';
$order['order_ptime'] = time();
$db->pe_update('order', array('order_id'=>$out_trade_no), $order);
}
echo "success"; //请不要修改或删除
}
//该判断表示卖家已经发了货,但买家还没有做确认收货的操作
elseif ($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') {
if ($info['order_state'] == 'paid') {
$order['order_state'] = 'send';
$order['order_stime'] = time();
$db->pe_update('order', array('order_id'=>$out_trade_no), $order);
}
echo "success"; //请不要修改或删除
}
//该判断表示买家已经确认收货,这笔交易完成
elseif ($_POST['trade_status'] == 'TRADE_FINISHED') {
if ($info['order_state'] == 'notpay') {
$order['order_outid'] = $trade_no;
$order['order_payway'] = 'alipay_js';
$order['order_state'] = 'paid';
$order['order_ptime'] = time();
$db->pe_update('order', array('order_id'=>$out_trade_no), $order);
}
elseif ($info['order_state'] == 'send') {
$order['order_state'] = 'success';
$db->pe_update('order', array('order_id'=>$out_trade_no), $order);
}
echo "success"; //请不要修改或删除
}
//其他状态判断
else {
echo "success";
}
}
```
wooyun在多个漏洞中提到了如何绕过if ($verify_result) ,因为key默认,alipay_key = esfsclzgahxncgzi3bbe7giwa2ywxyv3,因此,可以计算得到sign,这里可以绕过的。
当$_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS'时,如上面代码,会把订单的状态UPDATE为paid,如下图
[<img src="https://images.seebug.org/upload/201506/0923512951ee194cf1a2380767f502bf37d63b6a.jpg" alt="修改订单状态过程副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/0923512951ee194cf1a2380767f502bf37d63b6a.jpg)
修改前:
[<img src="https://images.seebug.org/upload/201506/0923514656fe3af87b0548ff5a1ffce8cd099f70.jpg" alt="修改前副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/0923514656fe3af87b0548ff5a1ffce8cd099f70.jpg)
修改后:
[<img src="https://images.seebug.org/upload/201506/09235157539035ddd8e0691883c54a38780b0129.jpg" alt="修改后副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/09235157539035ddd8e0691883c54a38780b0129.jpg)
再来说下注入,还是在/include/plugin/payway/alipay/notify_url_sgn.php 为什么说鸡肋呢,就像上面说的,执行一次订单的状态就变了,所以每执行一次,就要换个订单号,我是真的够了~~
在 [WooYun: phpshe最新版sql注入一枚](http://www.wooyun.org/bugs/wooyun-2015-0103612) 中,提了$out_trade_no ,我这次说下$trade_no
```
include('../../../../common.php');
require_once("alipay.config.php");
require_once("lib/alipay_notify.class.php");
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
//验证成功
if ($verify_result) {
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
$info = $db->pe_select('order', array('order_id'=>$out_trade_no));
//该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
echo "success"; //请不要修改或删除
}
//该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货
elseif ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
if ($info['order_state'] == 'notpay') {
$order['order_outid'] = $trade_no;
$order['order_payway'] = 'alipay_db';
$order['order_state'] = 'paid';
$order['order_ptime'] = time();
$db->pe_update('order', array('order_id'=>$out_trade_no), $order);
}
echo "success"; //请不要修改或删除
}
```
没有防注的措施,这里就简单的证明注入的存在吧,一起修复吧。如下图
[<img src="https://images.seebug.org/upload/201506/09235231242e46eaeedd7fe6f2ab76dd99c9cf80.jpg" alt="注入证明副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/09235231242e46eaeedd7fe6f2ab76dd99c9cf80.jpg)
### 漏洞证明:
见 详细说明
暂无评论