漏洞概要 关注数(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
漏洞详情
披露状态:
2014-05-09: 细节已通知厂商并且等待厂商处理中
2014-05-14: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-07-08: 细节向核心白帽子及相关领域专家公开
2014-07-18: 细节向普通白帽子公开
2014-07-28: 细节向实习白帽子公开
2014-08-04: 细节向公众公开
简要描述:
~~
详细说明:
1、先来看存储型XSS跨进后台
在申请链接处,文件/link/add_link.php
对链接信息没有过滤直接进入数据库。
在后台显示时,文件/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函数:
直接取出显示,没有过滤,导致xss。
我们来申请链接:http://localhost/74cms/link/add_link.php
后台管理员查看申请链接时:http://localhost/74cms/admin/admin_index.php
2、后台GetShell
我们首先可以在前台上传一个头像jpg文件,文件内容:
上传后的文件路径为:
http://localhost/74cms/user/personal/personal_index.php
查看头像属性:
通过第一步拿到的cookie登陆后台。
后台工具——计划任务——添加任务:
任务脚本就填我们上传的头像图片路径:../../data/avatar/100/2014/05/09/1.jpg
然后提交即可。
此时在网站首页刷新页面,得到结果:
3、总结
通过上面的XSS和后台的GetShell
我们可以全部自动化,由于后台有csrf防御,我们可以先通过xss获取到后天的csrftoken,然后构造getshell的js文件,在来一次xss就搞定了。
漏洞证明:
见详细说明。
修复方案:
过滤啊
版权声明:转载请注明来源 xfkxfk@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2014-08-04 16:08
厂商回复:
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值