乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2014-03-18: 细节已通知厂商并且等待厂商处理中 2014-03-26: 厂商已经确认,细节仅向厂商公开 2014-03-29: 细节向第三方安全合作伙伴开放 2014-05-20: 细节向核心白帽子及相关领域专家公开 2014-05-30: 细节向普通白帽子公开 2014-06-09: 细节向实习白帽子公开 2014-06-16: 细节向公众公开
过滤不严。
PHPMyWind\data\alipay\notify_url.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']; //交易状态 $trade_status = $_POST['trade_status']; if($_POST['trade_status'] == 'TRADE_FINISHED') { //更新订单状态 $r = $dosql->GetOne("SELECT * FROM `#@__goodsorder` WHERE `id`=$out_trade_no"); if(isset($r) && is_array($r)) { $checkinfo = explode(',',$r['checkinfo']); if(!in_array('payment',$checkinfo)) { $sql = "UPDATE `#@__goodsorder` SET checkinfo='".$r['checkinfo'].',payment'."' WHERE `id`=$out_trade_no"; $dosql->ExecNoneQuery($sql); } }
首先要注入的话 肯定要先通过这个验证。
function verifyNotify(){ if(empty($_POST)) {//判断POST来的数组是否为空 return false; } else { //生成签名结果 $isSign = $this->getSignVeryfy($_POST, $_POST["sign"]); //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) $responseTxt = 'true'; if (! empty($_POST["notify_id"])) {$responseTxt = $this->getResponse($_POST["notify_id"]);} //写日志记录 //if ($isSign) { // $isSignStr = 'true'; //} //else { // $isSignStr = 'false'; //} //$log_text = "responseTxt=".$responseTxt."\n notify_url_log:isSign=".$isSignStr.","; //$log_text = $log_text.createLinkString($_POST); //logResult($log_text); //验证 //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 if (preg_match("/true$/i",$responseTxt) && $isSign) { return true; } else { return false; } } }
只要两个变量都匹配出true 就通过验证。responseTxt 为true 这个就不用看了 看另外一个
function getSignVeryfy($para_temp, $sign) { //除去待签名参数数组中的空值和签名参数 $para_filter = paraFilter($para_temp); //对待签名参数数组排序 $para_sort = argSort($para_filter); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 $prestr = createLinkstring($para_sort); $isSgin = false; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "MD5" : $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); break; default : $isSgin = false; } return $isSgin; }
function md5Verify($prestr, $sign, $key) { $prestr = $prestr . $key; $mysgin = md5($prestr); if($mysgin == $sign) { return true; } else { return false; }}?>
只要相等的话就会返回True了。那来注入把。
注入成功 有图 有真相。
无尽的过滤。
危害等级:低
漏洞Rank:5
确认时间:2014-03-26 17:12
该文件为支付宝官方提供文件,漏洞存在。
暂无