漏洞概要 关注数(7) 关注此漏洞
缺陷编号: WooYun-2014-80646
漏洞标题: 骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪
相关厂商: 74cms.com
漏洞作者: 龟兔赛跑
提交时间: 2014-10-25 14:08
公开时间: 2015-01-23 14:10
漏洞类型: XSS跨站脚本攻击
危害等级: 高
自评Rank: 20
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: 持久型xss XSS 逻辑错误
漏洞详情
披露状态:
2014-10-25: 细节已通知厂商并且等待厂商处理中
2014-10-25: 厂商已经确认,细节仅向厂商公开
2014-10-28: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-12-19: 细节向核心白帽子及相关领域专家公开
2014-12-29: 细节向普通白帽子公开
2015-01-08: 细节向实习白帽子公开
2015-01-23: 细节向公众公开
简要描述:
74cms_v3.5.1_20141020
骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪(大部分能输入的地方都可以)。
详细说明:
开篇:php里面的strip_tags()函数剥去 HTML、XML 以及 PHP 的标签。但是并不是所有的<XXX>都会被过滤。例如:
上面的代码经过strip_tags()后,返回字符串不过会改变。本次然过就是基于以上内容+全局过滤函数的一些BUG。
分析:
我们先来看看全局的XSS过滤函数。
mystrip_tags()函数的两部分new_html_special_chars()和remove_xss(),new_html_special_chars()主要是使用strip_tags()过滤HTML标签,remove_xss()则用于过滤一些html属性中的一些关键字。
在remove_xss()函数中先删除一些特殊字符:
$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $string); ******** BUG 1
这里就留下了注入html entry的机会,例如前面说的<%0Ba%0b>,经过new_html_special_chars()后还是<%0Ba%0b>,但是经过remove_xss()后就变成了<a>.
继续看下面的代码,href属性没有过滤,我门就用他吧。
也许代码的作者会觉得javascript被过滤了,能注入href也没用吧。不过我们继续看第二处BUG:
如上代码中javascript将被转换成:
以上正则表达是对下面的代码是无效的:(程序员们,你们的代码没有测试过吧)
错误的过滤了下面的代码吧(没测试,看起来像):
根据以上分析,我们已经能注入一些HTML实体<a href=javascript:XXXX><img>了.
OK了,进入实战。结下来我们会构建一个通用代码,一个图片链接,点击图片链接的时候会弹出框显示document.cookie.
注入的代码就是:
好了,我们利用骑士忽略的漏洞来打个后台:http://**.**.**.**/bugs/wooyun-2014-072601
我们先通过营业执照认证功能来上传一张图片,以很明显的方式同时管理员点击图片升级等等等,长传的图片为:
等到图片的地址,然后去申请友情链接,里面的内容随便填,
开启burp,然后设置burp为代理,提交:
修改payload的内容,将其中的link_url改为:
Go。
登录后台,在广告->友情链接,即可看到如下画面:
点击升级图片的任何地方,即弹出cookie.
同样的方法注入HTML到投诉与建议打后台:
前台示例1:(招聘岗位)
前台示例2: (查看简历)
漏洞证明:
修复方案:
$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $string);
这个应该在最前面做吧,好又过滤javascript的那的代码也的改改。
版权声明:转载请注明来源 龟兔赛跑@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2014-10-25 18:59
厂商回复:
感谢反馈!
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值