极品分享

ecshop支付宝接口SQL注入漏洞 includes/modules/payment/alipay.php详解

1. 漏洞描述

ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/modules/payment/alipay.php文件中,该文件是ECshop的支付宝插件。由于ECShop使用了str_replace函数做字符串替换,黑客可绕过单引号限制构造SQL注入语句。只要开启支付宝支付插件就能利用该漏洞获取网站数据,且不需要注册登入。GBK与UTF-8版本ECshop均存在此漏洞

2. 漏洞代码分析

/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注入


3. 修复方法

/includes/modules/payment/alipay.php

$order_sn = trim($order_sn);
//将该段代码修改成
$order_sn = trim(addslashes($order_sn));



补丁下载:

ecshop的category注入漏洞补丁

ecshop支付宝接口注入漏洞补丁

ecshop的lib_api注入漏洞补丁

ecshop的edit_languages代码注入漏洞补丁

ecshop的category注入漏洞补丁+ecshop支付宝接口注入漏洞补丁+ecshop的lib_api注入漏洞补丁+ecshop的edit_languages代码注入漏洞补丁.rar



2016-07-12 0 /
PHP学习
/
标签: 

评论回复

回到顶部