开篇: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
我们先通过营业执照认证功能来上传一张图片,以很明显的方式同时管理员点击图片升级等等等,长传的图片为:
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
等到图片的地址,然后去申请友情链接,里面的内容随便填,
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
开启burp,然后设置burp为代理,提交:
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
修改payload的内容,将其中的link_url改为:
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
Go。
登录后台,在广告->友情链接,即可看到如下画面:
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
点击升级图片的任何地方,即弹出cookie.
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
同样的方法注入HTML到投诉与建议打后台:
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
前台示例1:(招聘岗位)
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
前台示例2: (查看简历)
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
![骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪]()
评论