ECShop 2.x.x 漏洞修复

主要在 模板堂 ECSHOP 合集版 的基础上修复了十来个漏洞。

/api/client/api.php 漏洞

ECShop 存在一个盲注漏洞,问题存在于/api/client/api.php 文件中,提交特制的恶意 POST 请求可进行 SQL 注入攻击,可获得敏感信息或操作数据库。 路径:/api/client/includes/lib_api.php 参照以下修改:

function API_UserLogin($post)
{
    /* SQL注入过滤 */
    if (get_magic_quotes_gpc()) 
    {     
        $post['UserId'] = $post['UserId']     
    } 
    else 
    {     
        $post['UserId'] = addslashes($post['UserId']);     
    }
    /* end */
    $post['username'] = isset($post['UserId']) ? trim($post['UserId']) : '';

/admin/shophelp.php 漏洞

大概在第 81、105、133、155 行,4 个地方修复方式都一样

admin_priv('shophelp_manage');

修改为

admin_priv('shophelp_manage');
$_POST['id'] = intval($_POST['id']);

/admin/shopinfo.php 漏洞

ecshop 的后台编辑文件/admin/shopinfo.php 中,对输入参数 id 未进行正确类型转义,导致整型注入的发生。 路径: /admin/shopinfo.php 参照以下修改(53-71-105-123 行): 源代码:

admin_priv('shopinfo_manage');

改为:

admin_priv('shopinfo_manage');
$_REQUEST['id'] = intval($_REQUEST['id']);

/admin/affiliate_ck.php 漏洞

文件/admin/affiliate_ck.php 中,对输入参数 auid 未进行正确类型转义,导致整型注入的发生。 参照以下修改(31 行和 51 行):

源代码:

$logdb = get_affiliate_ck();

改成:

$_GET['auid'] = intval($_GET['auid']);
$logdb = get_affiliate_ck();

/admin/comment_manage.php 漏洞

ecshop 的/admin/comment_manage.php 中,对输入参数 sort_by、sort_order 未进行严格过滤,导致 SQL 注入。 参照以下修改:

$filter['sort_by']      = empty($_REQUEST['sort_by']) ? 'add_time' : trim(htmlspecialchars($_REQUEST['sort_by']));  
$filter['sort_order']   = empty($_REQUEST['sort_order']) ? 'DESC' : trim(htmlspecialchars($_REQUEST['sort_order']));

/admin/integrate.php 漏洞

ecshop 没有对会员注册处的 username 过滤,保存重的用户信息时,可以直接写入 shell。 路径:/admin/integrate.php 大概 109 行,参照以下修改:

$code = empty($_GET['code']) ? '' : trim(addslashes($_GET['code']));

大概 601 行,参照以下修改:

@file_put_contents(ROOT_PATH . 'data/repeat_user.php', $json->encode($repeat_user));

修改成:

@file_put_contents(ROOT_PATH.'data/repeat_user.php','<?php die();?>'.$json->encode($repeat_user));

/admin/edit_languages.php 漏洞

ecshop 后台模版编译导致黑客可插入任意恶意代码。 路径:/admin/edit_languages.php 大概在第 120 行

$dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";';

修改为

$dst_items[$i] = $_POST['item_id'][$i] .' = '. '\'' .$_POST['item_content'][$i]. '\';';

/category.php 漏洞

ecshop 过滤不严导致 SQL 注入漏洞。 路径:/category.php 、 /ecsapi/category.php 修改方法:https://www.cnblogs.com/LittleHann/p/4524161.html 这个漏洞合集版已经修复

/includes/lib_insert.php 漏洞

ecshop 的/includes/lib_insert.php 文件中,对输入参数未进行正确类型转义,导致整型注入的发生。 有 $arr[’num’] 、$ arr[‘id’]、$arr[’type’]这些参数的,在函数开头加上:

//大概289行加上:
$arr['num'] = intval($arr['num']);
$arr['id'] = intval($arr['id']);
//大概454行加上:
$arr['id'] = intval($arr['id']);
$arr['type'] = addslashes($arr['type']);
//大概495行加上:
$arr['id'] = intval($arr['id']);

/includes/modules/payment/alipay.php 漏洞

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

搜索代码

$order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);

将下面一句改为:

$order_sn = trim(addslashes($order_sn));

2018 年六月份最新 0Day 漏洞

已经在第 8 条修复,参见 这篇博文 (已保存到 互联网档案馆 )