免费发布信息
微信公众号
当前位置: 首页 » 帮助中心 » 常见问题 » 正文

修复整理ecshop漏洞

   来源:黔优网时间:2024-09-23 12:01:14 浏览量:0

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

路径:/api/client/includes/lib_api.php

参照以下修改:

推荐(免费):eschop

function API_UserLogin($post)
{
    
    if (get_magic_quotes_gpc()) 
    {     
        $post['UserId'] = $post['UserId'];
    } 
    else 
    {     
        $post['UserId'] = addslashes($post['UserId']);     
    }
    
    $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-&gt;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']);

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

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

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

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

function fetch_str($source)
    { 
        if (!defined('ECS_ADMIN'))
        {
            $source = $this-&gt;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(&#39;\\1&#39;);", $source);
        //return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);//修饰符 /e 在 PHP5.5.x 中已经被弃用了
    }</script>

               

以上就是修复整理ecshop漏洞的详细内容,更多请关注本网内其它相关文章!

 
 
没用 0举报 收藏 0
免责声明:
黔优网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优网官方立场,请读者仅做参考。本文标题:修复整理ecshop漏洞,本文链接:https://www.qianu.com/help/51177.html,欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法信息,请您立即点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文
推荐帮助中心