2016-11-02 6 views
3

Nessus Vulnerability Scannerは、レガシーコードの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というメッセージで表示されている場合は、Response.Endとなりますが、%00に関するものが自分のチェックを過ぎてしまいます。

+4

置き換える前に 'newString'に値を割り当てていません。 –

+0

@ Kul-Tiginのように、 'newString'で' Replace() 'を呼び出す前に' input'を 'newString'に代入する必要があります。 – Lankymart

+1

元の投稿にコードを貼り付けるのに誤りがありました。 newStringへの入力値の割り当ては、実際にはコード内にありましたが、このオリジナルの投稿に正しく反映されませんでした。問題は依然として存在する。 –

答えて

2

私はreqular式でこれを処理することをお勧め:

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 

すべてのメニュー項目は英数字のみであり、下線ので、あなたが他のすべての文字を置き換えることができます。

+0

コードソリューションと明確な説明をありがとう! –

関連する問題