2014-06-17: 细节已通知厂商并且等待厂商处理中 2014-06-17: 厂商已经确认,细节仅向厂商公开 2014-06-20: 细节向第三方安全合作伙伴开放 2014-08-11: 细节向核心白帽子及相关领域专家公开 2014-08-21: 细节向普通白帽子公开 2014-08-31: 细节向实习白帽子公开 2014-09-15: 细节向公众公开
来了个新厂商。 挖一下把。 开放+封闭源代码封闭源代码,普通用户使用加密后的代码,付费用户使用开放的源代码,使商城更安全对于我这种屌丝只能用免费版 就是zend后的代码。不过还是有几个文件没zend。 就只看这几个文件了。
第五处kuaiqian/receive_mall.php中
$dealTime=trim($_REQUEST['dealTime']);//获取实际支付金额///单位为分///比方 2 ,代表0.02元$payAmount=trim($_REQUEST['payAmount']);//获取交易手续费///单位为分///比方 2 ,代表0.02元$fee=trim($_REQUEST['fee']);//获取扩展字段1$ext1=trim($_REQUEST['ext1']);//获取扩展字段2$ext2=trim($_REQUEST['ext2']);//获取处理结果///10代表 成功; 11代表 失败///00代表 下订单成功(仅对电话银行支付订单返回);01代表 下订单失败(仅对电话银行支付订单返回)$payResult=trim($_REQUEST['payResult']);//获取错误代码///详细见文档错误代码列表$errCode=trim($_REQUEST['errCode']);//获取加密签名串$signMsg=trim($_REQUEST['signMsg']);//生成加密串。必须保持如下顺序。 $merchantSignMsgVal=appendParam($merchantSignMsgVal,"merchantAcctId",$merchantAcctId); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"version",$version); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"language",$language); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"signType",$signType); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"payType",$payType); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"bankId",$bankId); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"orderId",$orderId); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"orderTime",$orderTime); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"orderAmount",$orderAmount); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"dealId",$dealId); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"bankDealId",$bankDealId); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"dealTime",$dealTime); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"payAmount",$payAmount); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"fee",$fee); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"ext1",$ext1); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"ext2",$ext2); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"payResult",$payResult); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"errCode",$errCode); $merchantSignMsgVal=appendParam($merchantSignMsgVal,"key",$key);$merchantSignMsg= md5($merchantSignMsgVal);//echo $merchantSignMsg;//初始化结果及地址$rtnOk=0;$rtnUrl=""; define("_UL_", $_SERVER['SERVER_NAME']);//商家进行数据处理,并跳转会商家显示支付结果的页面///首先进行签名字符串验证if(strtoupper($signMsg)==strtoupper($merchantSignMsg)){ switch($payResult){ case "10": /* ' 商户网站逻辑处理,比方更新订单支付状态为成功 ' 特别注意:只有strtoupper($signMsg)==strtoupper($merchantSignMsg),且payResult=10,才表示支付成功! */ mysql_connect($arr["DB_HOST"].":".$arr["DB_PORT"],$arr["DB_USER"],$arr["DB_PWD"]); mysql_select_db($arr["DB_NAME"]); $sql="update ".$arr["DB_PREFIX"]."m_pay set paystate=1,trade_no='".$dealId."',payallmoney=payallmoney+paymoney,gettime='".date('Y-m-d H:i:s')."' where ordernum='".$orderId."'"; mysql_query($sql); $sql3="select * from ".$arr["DB_PREFIX"]."m_pay where ordernum='".$orderId."'"; $result=mysql_query($sql3); $rs=mysql_fetch_array($result); $sql2="update ".$arr["DB_PREFIX"]."m_member set money=money+".$rs["paymoney"]." where username='".$rs["username"]."'"; mysql_query($sql2);
这个又是只验证了一下md5。。
—————————————————————————————————————————第六处kuaiqian/receive_store.php中跟第五处一样的。不多说了。__________________________________________________________________________第七处 在tenpay/return_url.php中
$resHandler = new PayResponseHandler();$resHandler->setKey($key);//判断签名if($resHandler->isTenpaySign()) { //交易单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //支付结果 $pay_result = $resHandler->getParameter("pay_result"); //商户交易号 $sp_billno=$resHandler->getParameter("sp_billno"); if( "0" == $pay_result ) { //------------------------------ //处理业务开始 //------------------------------ @mysql_connect($arr["DB_HOST"].":".$arr["DB_PORT"],$arr["DB_USER"],$arr["DB_PWD"]); @mysql_select_db($arr["DB_NAME"]); $sql="select * from ".$arr["DB_PREFIX"]."m_pay where ordernum=".$sp_billno; $result=mysql_query($sql); //-------- $rss=mysql_fetch_array($result); if($rss["paystate"]==0) { $sql1="update ".$arr["DB_PREFIX"]."m_pay set trade_no='".$transaction_id."',payallmoney=paymoney+payallmoney,gettime='".date('Y-m-d H:i:s')."',paystate=1 where ordernum='".$sp_billno."'"; mysql_query($sql1); //-----
用了个函数来验证 这个函数跟之前 验证alipay的那个基本一样。第八处 tenpay/return_stor_url.php
见上面。
对这些intval一次把。
危害等级:高
漏洞Rank:20
确认时间:2014-06-17 15:31
你上次提交的1-4和这个是一个类型的,都是支付接口没有添加禁用代码的问题,上次那个问题在这里补偿你了:)
暂无