Request.PathInfo问题和XSS攻击

时间:2017-02-13 18:43:01

标签: c# asp.net webforms xss penetration-testing

由于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
}

2 个答案:

答案 0 :(得分:1)

  

需要Request.PathInfo吗?

ASP.NET WebForms不需要PathInfo。 It can be helpful for search engine optimization,但如果您不使用它,请继续禁用它。您可以添加代码段,也可以安装UrlScan并将AllowDotInPath选项设置为0.

  

这怎么会导致XSS漏洞?

如果满足所有这些条件,您的网页可能容易受到Relative Path Overwrite (RPO)攻击:

  1. 攻击者可以在页面的某处注入内容(例如,博客评论)。
  2. 您的页面通过相对路径引用CSS样式表。
  3. 已启用PathInfo。
  4. 通过将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作为该值的一部分提交。