WooYun-2014-55026:Destoon Sql注入漏洞2(有条件)
漏洞作者: ′雨。
来源:http://www.wooyun.org/bugs/wooyun-2014-055026
简要描述
过滤不严。
详细说明
上次是alipay 这次来个paypal的。 当然 tenpay也有这洞
paypal 和 tenpay的一起说了。
api\pay\paypal\notify.php中
require '../../../common.inc.php';
$_POST = $_DPOST;
if(!$_POST) exit('fail');
$bank = 'paypal';
$PAY = cache_read('pay.php');
if(!$PAY[$bank]['enable']) exit('fail'); //得开启这种支付方式。
if(!$PAY[$bank]['partnerid']) exit('fail');
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$charge_status = 0;
$sql="SELECT * FROM {$DT_PRE}finance_charge WHERE itemid='$item_number' AND status=0";
$r = $db->get_one("SELECT * FROM {$DT_PRE}finance_charge WHERE itemid='$item_number' AND status=0");
paypal无过滤。 连验证都没验证。
直接注入
————————————————————————————————————————
tenpay
if($resHandler->isTenpaySign()) {
//通知id
$notify_id = $resHandler->getParameter("notify_id");
//通过通知ID查询,确保通知来至财付通
//创建查询请求
$queryReq = new RequestHandler();
$queryReq->init();
$queryReq->setKey($key);
$queryReq->setGateUrl("https://**.**.**.**/gateway/simpleverifynotifyid.xml");
$queryReq->setParameter("partner", $partner);
$queryReq->setParameter("notify_id", $notify_id);
//通信对象
tenpay里面多了个验证 不过可以轻松通过。、
$transaction_id = $resHandler->getParameter("transaction_id");
//金额,以分为单位
$total_fee = $resHandler->getParameter("total_fee");
//如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
$discount = $resHandler->getParameter("discount");
//------------------------------
//处理业务开始
//------------------------------
//处理数据库逻辑
//注意交易单不要重复处理
//注意判断返回金额
$total_fee = ($total_fee+$discount)/100;
$r = $db->get_one("SELECT * FROM {$DT_PRE}finance_charge WHERE itemid='$out_trade_no'");
然后带入查询。
漏洞证明
看看所执行的语句。
修复方案
过滤。