由于API限制,我在.NET 3.5上运行了几个网站。我们最终将这些网站今年推向最新的.NET版本。其中一项渗透测试表明可能存在XSS漏洞。相关网址为:
地点:http://www.foobar.com/basket.aspx/scripts/searchresults.aspx
方法:GET
易受攻击的参数:任意提供的URL参数的名称
基本上,basket.aspx
scripts/searchresults.aspx
后的任何内容都会导致问题。根据我的判断,Request.PathInfo
将尝试查找路径并最终到达searchresults.aspx
(如果.aspx页面存在)但由于相对路径无法找到我的所有CSS和脚本。该页面基本上打破了。目前还不清楚这是如何导致XSS漏洞的。然而,它确实打破了页面。
我的问题:是否需要Request.PathInfo
?在我的初步测试中,如果我检查Request.PathInfo
,我可以确定它可能是一个错误的URL请求:
FooBar.Global pageObj = obj;
if (obj.Request.PathInfo.Length > 0)
{
Response.Redirect("~/sitemap.aspx", true); // bad url send to site map
}
答案 0 :(得分:1)
需要Request.PathInfo吗?
ASP.NET WebForms不需要PathInfo。 It can be helpful for search engine optimization,但如果您不使用它,请继续禁用它。您可以添加代码段,也可以安装UrlScan并将AllowDotInPath选项设置为0.
这怎么会导致XSS漏洞?
如果满足所有这些条件,您的网页可能容易受到Relative Path Overwrite (RPO)攻击:
通过将PathInfo附加到URL,攻击者可以使您的页面加载本身作为样式表,因为ASP.NET将Page.aspx / Master.css解析为Page.aspx,而不是Master的CSS。由于CSS的松散(按设计)解析规则,攻击者的内容可能被解释为有效的CSS,对于允许CSS中的JavaScript的旧版Internet Explorer而言,尤其不好。即使在现代浏览器中,恶意样式表也会注入误导其他用户的内容。
我想使用PathInfo。如何缓解此漏洞?
使用绝对路径引用所有CSS样式表。例如,您可以使用应用程序相对路径(以~/
开头的虚拟路径)调用ResolveUrl方法:
<link href='<%= this.ResolveUrl("~/App_Themes/MySite/Master.css") %>' rel="stylesheet" type="text/css" />
警告:请勿使用ResolveClientUrl方法,因为它会返回相对路径。
答案 1 :(得分:0)
对我而言,听起来就像是他们提供的URL如下:
http://www.foobar.com/basket.aspx/scripts/searchresults.aspx?foo=bar
结果页面中的某处会有foo=bar
。除非使用了正确的转义,否则这将容易受到XSS的攻击,因为有人可以将JavaScript作为该值的一部分提交。