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

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

缺陷编号: WooYun-2014-60037

漏洞标题: 74CMS存储型XSS跨进后台可GetShell

相关厂商: 74cms.com

漏洞作者: xfkxfk认证白帽子

提交时间: 2014-05-09 16:06

公开时间: 2014-08-04 16:08

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

危害等级: 中

自评Rank: 15

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签: 持久型xss 第三方不可信程序 php源码审核 getshell

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-09: 细节已通知厂商并且等待厂商处理中
2014-05-14: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-07-08: 细节向核心白帽子及相关领域专家公开
2014-07-18: 细节向普通白帽子公开
2014-07-28: 细节向实习白帽子公开
2014-08-04: 细节向公众公开

简要描述:

~~

详细说明:

1、先来看存储型XSS跨进后台

在申请链接处,文件/link/add_link.php

code 区域
elseif ($act=="save")
{
$captcha=get_cache('captcha');
$postcaptcha = trim($_POST['postcaptcha']);
if($captcha['verify_link']=='1' && empty($postcaptcha))
{
showmsg("请填写验证码",1);
}
if ($captcha['verify_link']=='1' && strcasecmp($_SESSION['imageCaptcha_content'],$postcaptcha)!=0)
{
showmsg("验证码错误",1);
}
if ($_CFG['app_link']<>"1")
{
showmsg('已停止自助申请链接,请联系网站管理员!',1);
}
else
{
$setsqlarr['link_name']=trim($_POST['link_name'])?trim($_POST['link_name']):showmsg('您没有填写标题!',1);
$setsqlarr['link_url']=trim($_POST['link_url'])?trim($_POST['link_url']):showmsg('您没有填写链接地址!',1);
$setsqlarr['link_logo']=trim($_POST['link_logo']);
$setsqlarr['app_notes']=trim($_POST['app_notes']);
$setsqlarr['alias']=trim($_POST['alias']);
$setsqlarr['display']=2;
$setsqlarr['type_id']=2;
$link[0]['text'] = "返回网站首页";
$link[0]['href'] =$_CFG['site_dir'];
!inserttable(table('link'),$setsqlarr)?showmsg("添加失败!",0):showmsg("添加成功,请等待管理员审核!",2,$link);
}
}



对链接信息没有过滤直接进入数据库。

在后台显示时,文件/admin/admin_link.php

if($act == 'list')

{

get_token();

check_permissions($_SESSION['admin_purview'],"link_show");

require_once(QISHI_ROOT_PATH.'include/page.class.php');

$oederbysql=" order BY l.show_order DESC";

$key=isset($_GET['key'])?trim($_GET['key']):"";

$key_type=isset($_GET['key_type'])?intval($_GET['key_type']):"";

if ($key && $key_type>0)

{



if ($key_type===1)$wheresql=" WHERE l.link_name like '%{$key}%'";

elseif ($key_type===2)$wheresql=" WHERE l.link_url like '%{$key}%'";

}

else

{

!empty($_GET['alias'])? $wheresqlarr['l.alias']=trim($_GET['alias']):'';

!empty($_GET['type_id'])? $wheresqlarr['l.type_id']=intval($_GET['type_id']):'';

if (is_array($wheresqlarr)) $wheresql=wheresql($wheresqlarr);

}

if ($_CFG['subsite']=="1" && $_CFG['subsite_filter_links']=="1")

{

$wheresql.=empty($wheresql)?" WHERE ":" AND ";

$wheresql.=" (l.subsite_id=0 OR l.subsite_id=".intval($_CFG['subsite_id']).") ";

}

$joinsql=" LEFT JOIN ".table('link_category')." AS c ON l.alias=c.c_alias ";

$total_sql="SELECT COUNT(*) AS num FROM ".table('link')." AS l ".$joinsql.$wheresql;

$page = new page(array('total'=>$db->get_total($total_sql), 'perpage'=>$perpage));

$currenpage=$page->nowindex;

$offset=($currenpage-1)*$perpage;

$link = get_links($offset, $perpage,$joinsql.$wheresql.$oederbysql);

$smarty->assign('link',$link);

$smarty->assign('page',$page->show(3));

$smarty->assign('upfiles_dir',$upfiles_dir);

$smarty->assign('get_link_category',get_link_category());

$smarty->assign('navlabel',"list");

$smarty->display('link/admin_link.htm');

}

看看get_link函数:

code 区域
function get_links($offset, $perpage, $get_sql= '')
{
global $db;
$row_arr = array();
$limit=" LIMIT ".$offset.','.$perpage;
$result = $db->query("SELECT l.*,c.categoryname FROM ".table('link')." AS l ".$get_sql.$limit);
while($row = $db->fetch_array($result))
{
$row_arr[] = $row;
}
return $row_arr;
}



直接取出显示,没有过滤,导致xss。

我们来申请链接:http://localhost/74cms/link/add_link.php

1.png



后台管理员查看申请链接时:http://localhost/74cms/admin/admin_index.php

2.png





2、后台GetShell

我们首先可以在前台上传一个头像jpg文件,文件内容:

code 区域
<?php phpinfo();?>



上传后的文件路径为:

http://localhost/74cms/user/personal/personal_index.php

查看头像属性:

3.png



通过第一步拿到的cookie登陆后台。

后台工具——计划任务——添加任务:

任务脚本就填我们上传的头像图片路径:../../data/avatar/100/2014/05/09/1.jpg

然后提交即可。

此时在网站首页刷新页面,得到结果:

5.png





3、总结

通过上面的XSS和后台的GetShell

我们可以全部自动化,由于后台有csrf防御,我们可以先通过xss获取到后天的csrftoken,然后构造getshell的js文件,在来一次xss就搞定了。

漏洞证明:

见详细说明。

修复方案:

过滤啊

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-08-04 16:08

厂商回复:

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

登录后才能发表评论,请先 登录