ecshop漏洞修复整理

2023-11-05

1、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']) : '';

2、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']);

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

源代码:
$logdb = get_affiliate_ck();
改成:
$_GET['auid'] = intval($_GET['auid']);
$logdb = get_affiliate_ck();

注:好像按上面改了阿里云还是会提示这个漏洞,然后我在文件顶部处添加以下代码就可以了:

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

4、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']));

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

注:好像按上面改了阿里云还是会提示这个漏洞,然后我在文件顶部处添加以下代码就可以了:

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

6、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]. '\';';

7、ecshop过滤不严导致SQL注入漏洞。
路径:/category.php 、 /ecsapi/category.php
修改方法:https://www.cnblogs.com/LittleHann/p/4524161.html

8、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']);

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

Ecshop后台模版编辑漏洞
详情描述参考:https://www.cnblogs.com/LittleHann/p/4272255.html

漏洞文件:/admin/mail_template.php 和 /includes/cls_template.php
/admin/mail_template.php文件添加以下代码(过滤了部分php关键词)

/*------------------------------------------------------ */
//-- 保存模板内容
/*------------------------------------------------------ */

elseif ($_REQUEST['act'] == 'save_template')
{ 
    if (empty($_POST['subject']))
    {
       sys_msg($_LANG['subject_empty'], 1, array(), false);
    }
    else
    {
        $subject = trim($_POST['subject']);
    }

    if (empty($_POST['content']))
    {
       sys_msg($_LANG['content_empty'], 1, array(), false);
    }
    else
    {
        $content = trim($_POST['content']);
    }

    $type   = intval($_POST['is_html']);
    $tpl_id = intval($_POST['tpl']);

    /*过滤了部分php关键词*/    
    $temp_check = preg_replace("/([^a-zA-Z0-9_]{1,1})+(extract|parse_str|str_replace|unserialize|ob_start|require|include|array_map|preg_replace|copy|fputs|fopen|file_put_contents|file_get_contents|fwrite|eval|phpinfo|assert|base64_decode|create_function|call_user_func)+( |\()/is", "", $content);
    $temp_check = preg_replace("/<\?[^><]+(\?>){0,1}|<\%[^><]+(\%>){0,1}|<\%=[^><]+(\%>){0,1}|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*(<\/script\s*>){0,1}/iU", "", $temp_check); 
    $content = $temp_check;
    /*过滤了部分php关键词*/

    $sql = "UPDATE " .$ecs->table('mail_templates'). " SET ".
                "template_subject = '" .str_replace('\\\'\\\'', '\\\'', $subject). "', ".
                "template_content = '" .str_replace('\\\'\\\'', '\\\'', $content).  "', ".
                "is_html = '$type', ".
                "last_modify = '" .gmtime(). "' ".
            "WHERE template_id='$tpl_id'";

    if ($db->query($sql, "SILENT"))
    {
        $link[0]=array('href' => 'mail_template.php?act=list', 'text' => $_LANG['update_success']);
        sys_msg($_LANG['update_success'], 0, $link);
    }
    else
    {
         sys_msg($_LANG['update_failed'], 1, array(), false);
    }
}

/includes/cls_template.php文件替换函数(fetch_str()):

function fetch_str($source)
    { 
        if (!defined('ECS_ADMIN'))
        {
            $source = $this->smarty_prefilter_preCompile($source);
        }
        $source=preg_replace("/([^a-zA-Z0-9_]{1,1})+(copy|fputs|fopen|file_put_contents|fwrite|eval|phpinfo)+( |\()/is", "", $source);
        $source=preg_replace("/<\?[^><]+\?>|<\%[^><]+\%>|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*<\/script\s*>/iU", "", $source);
        return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
        //return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);//修饰符 /e 在 PHP5.5.x 中已经被弃用了
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ecshop漏洞修复整理 的相关文章

  • PHP邮件功能有时可以工作

    我正在编写一个脚本 需要通过PHP邮件功能发送电子邮件 如下所示 它在向 gmail 帐户发送电子邮件时有效 但在我的域中的帐户却无效 我们正在运行 Exchange 服务器 截至目前 电子邮件是从 www server 发送的 有谁知道
  • php 打印 aa aaa ab aab 直到 zzz 的算法

    你好 我需要打印从 a 到 zzz 最多 3 个字母 例如我的输出应该是 A B Z AA AB AZ BA BB ZZ AAA AAB ZZZ 我在过去的 5 个小时里努力尝试 我找不到任何逻辑 我尝试了下面的代码 PHP 有一个方便的功
  • 很好地阻止了齿轮工人

    我有许多 Gearman 工作人员不断运行 保存用户页面浏览记录等内容 偶尔 我会更新 Gearman 工作人员使用的 PHP 代码 为了让工作人员切换到新代码 我杀死并重新启动了工作人员的 PHP 进程 有什么更好的方法来做到这一点 据推
  • 根据数组计数填充复选框

    我是新来的php我已经使用了它的开发php array 我想填充checkboxes根据数组计数 为了做到这一点 我尝试了以下方式 它对我不起作用 有什么方法可以做到这一点 在我的例子中 数组计数 5 所以我相应地需要 5 个复选框
  • 使用 PDO 准备语句使用搜索字段中的多个关键字进行 LIKE 查询

    网站用户使用搜索表单来查询产品数据库 输入的关键字在数据库中搜索产品的标题 public function startSearch keywords keywords preg split s keywords totalKeywords
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • 如何让 shell_exec 在 IIS 6.0 上运行

    问题 我有一个 PHP 脚本 它使用shell exec运行 pdf 到文本转换器 为了简化问题 我创建了一个简短的脚本 使用shell exec只是回显的输出dir命令 当我在 Apache 服务器上运行它时 一切都按预期运行 当我切换到
  • 访问 public_html 级别之外/以下的文件

    如何通过 url 访问文件 home uzair etc index php 即使我运行域 something com 它显示了 home uzair public html index php 这个文件 任何人请帮助我如何访问放置在 ho
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • Facebook Graph API v3.1 开发人员访问令牌权限限制

    如您所知 Facebook 将其 API 升级到了 V3 1 现在正在慢慢地淘汰旧的 API 和应用程序 因此我们必须迁移到新的 API 他们做出了一些艰难的决定 这对垃圾邮件网站来说是好事 但对开发人员来说也很难 提醒 Graph API
  • 访客客户检查 Woocommerce 订单账单电子邮件时可享受首单折扣

    通过对照正在处理和已完成的订单检查来宾客户的电子邮件地址 如果电子邮件没有订单 我想给来宾 首单折扣 如果这能在客人输入电子邮件时发生 那就太好了 我想我已经成功制作了折扣代码 现在我请求帮助合并这两个代码 使其一切正常 这是折扣代码 ad
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • laravel 5.4 在请求验证之前修改数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有我的自定义请求 它扩展了 Backpack CrudController 现在我想重写 ValidatesWhenResolv
  • 隐藏产品价格和添加到购物车按钮,但不隐藏 WooCommerce 中未注册用户的变体

    在我的 WooCommerce 商店中 我想隐藏价格 直到客户登录为止 我有以下代码可以实现这一点 add action init hide price function hide price if is user logged in re
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp

随机推荐

  • 为什么很多技术都觉得前端很简单?

    多年前都没有前端这个岗位 都是后端大包大揽 今天从前端的技术发展 和复杂程度聊聊前端到底简单不简单 一 前端的深度和广度 1 复杂度 前端算是逆袭了 层出不穷的技术 显得越来越难 之前是切图 HTML CSS Js 看着很简单 实际开发起来
  • centos /dev/vda1磁盘空间占满 随笔

    今天笔者所在的公司维护的后台管理系统 突然发现系统跑不动了 打开服务器上一看 连按tab键补全命令都很困难 关键时刻来了 发现原来是磁盘空间满了 输入命令 df h 看到 dev vda1磁盘的使用率是100 既然发现是磁盘空间不够 删掉一
  • Gif多图:我常用的 16 个 Sublime Text 快捷键

    本文由 伯乐在线 cucr 翻译 黄利民 校稿 未经许可 禁止转载 英文出处 Tommy Marshall 欢迎加入 翻译组 在我做了一次包含一些现场编码的演示后 一些观众问我是如何操作这么快 当然这里没有唯一的答案 答案是一堆简单的快捷键
  • vue3 组合式api监听元素滚动,去除滚动底部多次触发滚动事件副作用,以及在当前组件对浏览器进行滚动监听时,根据组件的挂载卸载,keep-alive组件的活跃和不活跃的状态,进行添加监听和移除监听

    import onActivated onDeactivated onMounted onUnmounted from vue import throttle from underscore const scrollstate state
  • winget添加msstore软件源

    因为每次安装软件都出现两个结果 所以我卸载了msstore软件源 最近发现有些软件msstore是有的 于是又屁颠屁颠地想要加回来 添加方式如下 需要以管理员权限运行 winget source add name msstore arg h
  • 关于Nginx的一些脚本

    文章目录 目录 文章目录 前言 一 Nginx 访问日志分析脚本 二 Nginx 访问访问日志按天切割 总结 前言 脚本经常用于自动化特定任务 通过编写脚本 可以轻松地执行重复性 复杂或耗时的操作 如文件处理 数据转换 系统管理等 脚本可用
  • Linux的Java环境安装

    1 1 新建apps文件夹 mkdir apps 1 2 上传java的安装包到apps文件夹 tar zxvf java的安装包名字 进行安装包的解压 1 3 修改包名 mv 解压java的安装包名 自己修改Java安装包名 1 4 修改
  • CMD的命令集锦

    winver 检查Windows版本 wmimgmt msc 打开windows管理体系结构 WMI wupdmgr windows更新程序 wscript windows脚本宿主设置 write 写字板 winmsd 系统信息 wiaac
  • 爬取公布的招聘信息(selenium实现)

    目录 1 案例描述 2 爬虫 2 1 爬虫的概念 2 2 爬虫的工作原理 2 3 爬虫的基本流程 3 基本操作 3 1 安装第三方库 3 2 库的作用及其使用
  • html实时显示log,websocketd 实现浏览器查看服务器实时日志

    操作系统 CentOS7 下载 websocketd 安装 nc 命令 yum install nmap ncat 创建监听脚本 cat gt cmd sh lt bin bash pkill x nc while do nc nkl 10
  • 如何实现歌词在页面上使用滚动效果

    首先我们可以看到大多数从后端请求的数据都是这样的 这个时候我们需要用正则以及各种循环把歌词进行重新整理为对象数据 随后就进行页面渲染 然后我们监听歌曲播放的时间 使用添加class的方式对歌词进行高亮操作 最后我们需要最后一步实现歌词滚动即
  • SylixOS Unit Test介绍

    1 Unit Test工程介绍 在开发过程中 经常需要进行复杂的测试工作 部分测试工作需要生成多个可执行程序 普通类型的工程在测试时需要建立多个测试工程 这样会导致测试工作冗余繁杂 Unit Test 工程可以实现一个工程生成多个可执行程序
  • Android开发-CardView卡片View的详解,头条三面技术四面HR

    CardView一般用于需要显示阴影效果的UI 此外CardView还提供了圆角的功能 嘿嘿 这东西还能直接设置成圆形 可以简单的弄成圆形View CardView其实本身是使用FrameLayout 帧布局 所以它其实还是一个布局 引用
  • JavaScript冒泡排序与插入排序的原理

    冒泡排序 原理是临近的数字两两进行比较 按照从小到大或者从大到小的顺序进行交换 这样一趟过去后 最大或最小的数字被交换到了最后一位 图片示例 代码示例 var arr 5 8 3 4 5 9 1 4 5 9 6 3 8 for var i
  • anaconda 通过命令行执行 python 文件

    win10 中 anaconda 通过命令行执行 python 文件 点击三角按钮 在跳出的菜单栏中选择 Open Terminal 通过 python 文件名 py 执行
  • "res://ieframe.dll/dnserrordiagoff.htm"

    最近用vs2005做web应用程序的时候 遇到个奇怪的问题 有的时候点击某个链接 或者触发一个页面刷新的事件时 网页就会跳转成无法显示网页的状态 地址栏中的url是 res ieframe dll dnserrordiagoff htm 一
  • VMware vSphere Hypervisor 6 (ESXi) 免费许可证使用限制

    公司在虚拟化方面使用的是hyper v方案 但是windows的不稳定让人头疼 更新补丁和死机问题都需要定期重启 对于虚拟化平台简直就是灾难 最近在查看关于EXSi6的免费使用限制 没看到太多中文资料 在vmware论坛的Hyperviso
  • C# .net 使用RabbitMq讲解

    一 环境搭建 首先 由于RabbitMQ使用Erlang编写的 需要运行在Erlang运行时环境上 所以在安装RabbitMQ Server之前需要安装Erlang 运行时环境 可以到Erlang官网下载对应平台的安装文件 如果没有安装运行
  • 强引用、软引用、弱引用和虚引用的区别

    1 强引用 StrongReference 最普遍的一种引用方式 如String s abc 变量s就是字符串 abc 的强引用 只要强引用存在 则垃圾回收器就不会回收这个对象 2 软引用 SoftReference 用于描述还有用但非必须
  • ecshop漏洞修复整理

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