方维购物分享最新版前台代码漏洞

  • A+
所属分类:漏洞时代
摘要

/core/function/global.func.php最后的preg_replace 使用了/e的命令执行符号。
$content可被控制。
即页面上如果出现 即被执行args里的命令
寻找一个变量能被没有过滤掉关键字符之类,并且能在页面上显示的就行。
找了半天,找了个album.php的模块下的一个tags .
缺陷文件
/core/module/album.module.php 的300多行:

/core/function/global.func.php

/**  * 显示页面  * @param string $cache_file 缓存路径  * @param bool $is_session 是否更新session  * @param bool $is_return 是否返回页面内容  * @return mixed  */ function display($cache_file = '',$is_session = true,$is_return = false)    {    global $_FANWE;    $content = NULL;    if(!empty($cache_file) && !file_exists($cache_file))    {    if(makeDir(preg_replace("/^(.*)//.*?/.htm$/is", "//1", $cache_file)))    {    $dynamic_php = '';    if(isset($_FANWE['page_parses']))    $dynamic_php = "<?php/n".' $_FANWE[/'CACHE_CSS_SCRIPT_PHP/']'." = ".var_export($_FANWE['page_parses'], true).";/n?>";          $content = ob_get_contents();    express($content);          if(isset($_FANWE['tpl_image_formats']))    $dynamic_php .= "<?php/n".' setTplFormats(/'tpl_image_formats/','.var_export($_FANWE['tpl_image_formats'], true).");/n?>";          writeFile($cache_file,$dynamic_php.$content);    }    }          require_once fimport('dynamic/common');    $module_dynamic = '';    if(defined('MODULE_NAME') && MODULE_NAME != '')    $module_dynamic = fimport('dynamic/'.MODULE_NAME);          if(!empty($module_dynamic) && file_exists($module_dynamic))    require_once $module_dynamic;          if($content === NULL)    {    $content = ob_get_contents();    express($content);    }    ob_end_clean();      $content = preg_replace('/<!--dynamic/s+(.+?)(?:|/sargs=(.*?))-->/ies', "//1('//2');", $content); 

最后的preg_replace 使用了/e的命令执行符号。
$content可被控制。
即页面上如果出现 即被执行args里的命令
寻找一个变量能被没有过滤掉关键字符之类,并且能在页面上显示的就行。
找了半天,找了个album.php的模块下的一个tags .
缺陷文件
/core/module/album.module.php 的300多行:

if($share['status']) { $data['title'] = htmlspecialchars($_FANWE['request']['title']); $data['content'] = htmlspecialchars($_FANWE['request']['content']); $data['tags'] = implode(' ',$tags); $data['uid'] = $_FANWE['uid']; $data['share_id'] = $share['share_id']; $data['create_day'] = getTodayTime(); $data['create_time'] = TIME_UTC;    $aid = FDB::insert('album',$data,true); 

Tags 变量只做了分割处理。分割字符串为空格即%20
前面的正则条件是需要匹配/s 即空白字符,其中包括/t /r /n 等
所以,提交tags标签时,提交如下类似的字符串即进入到模版缓存替换执行中

方维购物分享最新版前台代码漏洞

方维购物分享最新版前台代码漏洞

方维购物分享最新版前台代码漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: