ecshop /includes/modules/payment/alipay.php SQL Injection Vul

Andrew.Hann發表於2015-05-23

catalog

1. 漏洞描述
2. 漏洞觸發條件
3. 漏洞影響範圍
4. 漏洞程式碼分析
5. 防禦方法
6. 攻防思考

 

1. 漏洞描述

ECSHOP支付外掛存在SQL隱碼攻擊漏洞,此漏洞存在於/includes/modules/payment/alipay.php檔案中,該檔案是ECshop的支付寶外掛。由於ECShop使用了str_replace函式做字串替換,黑客可繞過單引號限制構造SQL隱碼攻擊語句。只要開啟支付寶支付外掛就能利用該漏洞獲取網站資料,且不需要註冊登入。GBK與UTF-8版本ECshop均存在此漏洞

Relevant Link:

http://sebug.net/vuldb/ssvid-60643


2. 漏洞觸發條件
3. 漏洞影響範圍
4. 漏洞程式碼分析

/includes/modules/payment/alipay.php

function respond()
{
    if (!empty($_POST))
    {
        foreach($_POST as $key => $data)
        {
        $_GET[$key] = $data;
        }
    }
    $payment  = get_payment($_GET['code']);
    $seller_email = rawurldecode($_GET['seller_email']);
    $order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);
    //未對$order_sn進行有效注入過濾
    $order_sn = trim($order_sn);  
    ..

ECShop在/includes/init.php中有段程式碼會將外界傳入的資料進行轉義,比如單引號;同樣在/includes/modules/payment/alipay.php中外界傳入的$_GET['subject']和$_GET['out_trade_no']也是被轉義過的,但是在該檔案的str_replace()函式會將$_GET['out_trade_no']中的$_GET['subject']過濾掉(黑客輸入轉義符號,將轉義符本身過濾叼),最後經過str_replace()函式處理後引入單引號,使閉合單引號重新獲得攻擊能力,觸發SQL隱碼攻擊

Relevant Link:

http://sebug.net/vuldb/ssvid-61150


5. 防禦方法

/includes/modules/payment/alipay.php

function respond()
{
    if (!empty($_POST))
    {
        foreach($_POST as $key => $data)
        {
        $_GET[$key] = $data;
        }
    }
    $payment  = get_payment($_GET['code']);
    $seller_email = rawurldecode($_GET['seller_email']);
    $order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);
    /* 對$order_sn進行有效過濾 */
    $order_sn = trim(addslashes($order_sn));
    /* */
    ..

Relevant Link:

http://bbs.ecshop.com/viewthread.php?tid=1125380&extra=page=1&orderby=replies&filter=172800


6. 攻防思考

Copyright (c) 2015 LittleHann All rights reserved

 

相關文章