EmpireCMS v7.5后台任意代码执行分析
目录
一.漏洞简介
二.漏洞复现
三.原理分析
一.漏洞简介
EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。
[影响版本] <=7.5
[漏洞危害] 高
[漏洞位置] /e/admin/admin/ebak/phome.php
二.漏洞复现
1 访问靶机192.168.5.165 账户密码admin
2依次 -> [系统]-[系统设置]-[备份与恢复数据]-[备份数据]
3 抓包把tablename改为phpifno()
4 访问备份文件目录下的config.php,将readme.txt改为config.php
三.原理分析
1)系统在e/admin/ebak/phome.php文件中接受备份数据库传递的参数。
elseif($phome==“DoEbak”)
{
Ebak_DoEbak( P O S T , _POST, POST,logininid,$loginin);
}
2)接受参数后,传递到\upload\e\admin\ebak\class\functions.php文件中的EbakDOEbak函数中。EbakDOEbak函数接受参数后,将数据库表名传递给变量$tablename。
3)系统对表名遍历将其赋值给
b
t
a
b
l
e
和
btable和
btable和dtable。在
d
t
a
b
l
e
处
将
表
名
拼
接
为
字
符
串
。
对
拼
接
而
成
d_table处将表名拼接为字符串。对拼接而成
dtable处将表名拼接为字符串。对拼接而成tb数组未对其中的键值名添加双引号。
4)在生成config.php文件的过程中,对于$d_table没有进行处理,直接拼接到生成文件的字符串中,导致任意代码执行漏洞。
5)config.php
# EmpireCMS v7.5后台getshell分析
目录
一.漏洞复现
二.原理分析
一.漏洞复现
1 访问靶机192.168.5.165 账户密码admin
2 依次进入
3 生成一个1.php.mod文件,内容为,记得为php代码
file_put_contents("p0desta.php","<?php phpinfo(); ?>");
4 访问 http://192.168.5.98/e/admin/shell.php
二.原理分析
1)e\admin\ecmsmod.php导入模型
2)跟随LoadInMod函数来到\class\moddofun.php
3)上传之后下面用include进行包含一次,既执行一次上传php代码。php代码钟写入一个新shell。既在e/admin/目录下生成一个shell.php