gpt4 book ai didi

security - 如何防止查询字符串中的空字节注入(inject)

转载 作者:行者123 更新时间:2023-12-02 19:52:10 26 4
gpt4 key购买 nike

Nessus 漏洞扫描程序针对旧代码网站运行。有很多关于如何防止使用 PHP 进行空字节注入(inject)攻击的建议,但我找不到任何有关在使用 VBScript 的经典 ASP 中修复此问题的信息。

这是扫描仪对我们公共(public)网站的攻击:

http://www.mortgagedataweb.com/mds/marketshare/ParmsV2.asp?Menu=%00<"kzwezl%20>

我尝试向 QueryString 输入添加有效性检查,但我的努力没有奏效。关于 %00 的某些内容会导致我检查正确值的尝试被屏蔽。以下是一些相关的代码片段:

Function getUserInput(input)    
Dim newString
If Len(input) = 0 Then
getUserInput = ""
Exit Function
End If
newString = input 'this was omitted in original post but was in fact in the code
newString = Replace(newString, Chr(0), "") 'I thought this would fix it !
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 = UCase(getUserInput(Request.QueryString("Menu"))) 'store Menu value for Fast-Path link
Select Case implied_Menu
Case "FHA_ZP", "C_ZP", "J_ZP", "F_ZP"
implied_SQLName = MARKETSHAREZip
Case "P_ALL", "P_MA", "P_ST", "P_ZP", "P_CT", "P_NATION"
implied_SQLName = PMIMARKETSHARE
Case "FHA_ALL_D", "FHA_MA_D", "FHA_ST_D", "FHA_CT_D", "FHA_ZP_D", "FHA_NATION_D"
implied_SQLName = FHAMARKETSHAREDETAILS
Case ""
implied_SQLName = MARKETSHARE
Case Else
Response.Write("<h2>Invalid Menu parameter</h2>")
Response.End
End Select

正确的菜单值是:

  • 完全缺失(即 Menu= 不在 QueryString 中)
  • 上述Select Case逻辑中所描绘的一系列有效值的一部分

在我的开发计算机上,我可以将 %00 更改为 %0 并使用 Response.Write 消息标记错误,然后 Response.End,但有关 %00 的某些内容未能通过我的检查尝试。

最佳答案

我建议使用正则表达式来处理这个问题:

function getUserInput(sInput)
Dim obj_regex
Set obj_regex = New RegExp

obj_regex.IgnoreCase = true
obj_regex.Global = true
obj_regex.Pattern = "\W"

getUserInput = obj_regex.Replace(sInput, "")
set obj_regex = Nothing
end function

由于您的所有菜单条目都只是字母数字字符和下划线,因此您可以替换所有其他字符。

关于security - 如何防止查询字符串中的空字节注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com