Nessus漏洞扫描器报告我的经典ASP站点仍然暴露于XSS攻击



我正在追踪我的网站上报告的一个漏洞,主要是用VBscript编写的经典ASP。我认为我所做的修复应该已经足够了,但是"重新扫描"仍然显示端口80/tcp上有一个"中等风险"项目:

51972 - CGI Generic Cross-Site Scripting (Parameters Names)

下面是这个报告项目的一个片段:

    -------- request --------
GET /stagedmds/marketshare/ParmsV2.asp?<<<<<<<<<<foo"bar'314>>>>>=1 HTTP/1.1 
Host: www.mortgagedataweb.com 
Accept-Charset: iso-8859-1,utf-8;q=0.9,*;q=0.1 
Accept-Language: en 
Connection: Close 
Cookie: ASPSESSIONIDSQQQBDTB=MCJAMHCACGEHCNCCGDDPOEAI; ASPSESSIONIDQSSQDCTB=JAFAABIAONBOMMAMJILMMLGL; ASPSESSIONIDQSQQBDTB=IBJAMHCAIGIGCEKMBNPOMCPN 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) 
Pragma: no-cache 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
------------------------
-------- output --------
<button type="button" onclick=
"location.href='/stagedmds/marketshare/ParmsV2.asp?<<<<<<<<<<foo"bar'314
>>>>>=1&Doc=Y';"
ONMOUSEOVER="this.className = 'over';"
ONMOUSEOUT="this.className = '';"
------------------------
/stagedmds/marketshare/ParmsV2.ASP?<<<<<<<<<<foo"bar'314>>>>>=1

当我查看这个页面的服务器端脚本时,我注意到我的参数检索没有"消毒"输入,如下所示:

implied_Menu = UCase(Request.QueryString("Menu"))

因此,我将其修改如下:

implied_Menu = getUserInput(UCase(Request.QueryString("Menu"))) 

,其中新添加的函数应该对parm值进行"消毒",如下所示:

Function getUserInput(input)    
    dim newString
    newString=input  
    newString    = replace(newString,"--","")
    newString    = replace(newString,";","")          
    newString    = replace(newString,chr(34),"'") 
    newString    = replace(newString,"'","") 
    newString    = replace(newString,"=","=") 
    newString    = replace(newString,"(","[") 
    newString    = replace(newString,")","]")
    newString = replace(newString,"'","''")
    newString = replace(newString,"<","[")
    newString = replace(newString,">","]")  
    newString = replace(newString,"/*","/") 
    newString = replace(newString,"*/","/")
    getUserInput = newString
End Function 

这个名为implied_Menu的变量永远不会以任何方式输出到页面。它只使用一些case逻辑来计算,以设置其他变量,如下例所示:

    Select Case implied_Menu
        Case "C_ST" 
            implied_PromptType = ByCounty
            implied_DataSubset = iConventional
            implied_ReportName = Conventional

我不知道还能做什么。我读过保护免受跨站点脚本攻击?有些漏洞扫描器无法识别我所采取的措施。

扫描器是否有可能在看到从查询字符串检索时总是报告XSS违规?

在我看来,问题是如何生成位置的值。

:
<button type="button" onclick=
"location.href='/stagedmds/marketshare/ParmsV2.asp?<<<<<<<<<<foo"bar'314
>>>>>=1&Doc=Y';"
ONMOUSEOVER="this.className = 'over';"
ONMOUSEOUT="this.className = '';"

我猜你正在用ServerVariable或Request.QueryString生成URL。你需要改变这一点,使它只包含你允许的参数。

如果你把这部分代码贴出来,可能会有更大的帮助。

@John的回答是正确的-这是由于您的按钮onclick中使用的文本。

查看OWASP XSS(跨站脚本)预防小抄,了解如何防止XSS。

规则#3 -在JavaScript数据值中插入不可信数据前的JavaScript转义在这里适用:-

除字母数字字符外,使用xHH格式转义小于256的所有字符,以防止将数据值切换到脚本上下文中或切换到另一个属性中。

在这个例子中你的值

/stagedmds/marketshare/ParmsV2.asp?<<<<<<<<<<foo"bar'314>>>>>=1&Doc=Y

应该编码为

x2fstagedmdsx2fmarketsharex2fParmsV2x2easpx3fx3cx3cx3cx3cx3cx3cx3cx3cx3cx3cfoox22barx27314x3ex3ex3ex3ex3ex3d1x26Docx3dY

相关内容

  • 没有找到相关文章

最新更新