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));