3

Nessus 脆弱性スキャナーは、レガシー コード Web サイトに対して実行されました。PHP でヌル バイト インジェクション攻撃を防ぐ方法については多くのアドバイスがありますが、VBScript を使用した従来の ASP でこれを修正する方法については何も見つかりません。

私たちの公開サイトに対するスキャナーの攻撃は次のとおりです。

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メッセージを付けてフラグを立てることができます then Response.End、しかし、何かが%00それをチェックしようとする試みを通り過ぎてしまいます。

4

1 に答える 1

2

これを正規表現で処理することをお勧めします。

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

すべてのメニュー エントリは英数字とアンダースコアのみであるため、他のすべての文字を置き換えることができます。

于 2016-11-04T14:38:11.023 に答える