ecshop最新注入0day漏洞分析报告-2013-02-20

更新时间:2013-04-23 点击量:2149

 今天习惯性的到处逛,看看文章。看到了360爆的一个ecshop 支付宝支付插件的注入漏洞,照例的分析下,360的团队还是挺赞的。
 
由于漏洞源于ecshop的支付宝支付插件,所有利用前提是站点安装此插件,利用不受GPC影响。
 
漏洞核心代码在\includes\modules\payment\alipay.php 文件 respond()函数,第215行。
 
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 = trim($order_sn);
             
        /* 检查支付的金额是否相符 */
        if (!check_money($order_sn, $_GET['total_fee']))
        {
       /*----省略----*/
 
 
$order_sn变量由str_replace($_GET['subject'], '', $_GET['out_trade_no']);控制,我们可以通过$_GET['subject']参数来替换掉$_GET['out_trade_no']参数里面的反斜杠\。
最终$order_sn被带入check_money()函数。我们跟进看一下
 
在include\lib_payment.php文件中109行.
 
function check_money($log_id, $money)
{
    $sql = 'SELECT order_amount FROM ' . $GLOBALS['ecs']->table('pay_log') .
              " WHERE log_id = '$log_id'";
    $amount = $GLOBALS['db']->getOne($sql);
 
    if ($money == $amount)
    {
    /*----省略----*/
 
 
此处就是漏洞现场。原来的$order_sn被带入了数据库
 
 
利用实践:
首先我们要通过str_replace来达到我们想要的效果,%00是截断符,即也

支付宝扫码打赏 微信打赏

如果文章对您有帮助,就打赏一个吧

在线客服

客户服务

热线电话:

0755-36656507 15889489919 服务时间:

周一到周六:9:00-18:00

在线QQ客服

在线微信客服

关于我们 常见问题

支付方式 加盟合作

提交需求
优惠红包 购物车0 反馈留言 返回顶部