2016-11-02 7 views
3

Сканер уязвимостей Nessus был запущен на веб-сайте устаревшего кода. Есть много советов о том, как предотвратить нулевые байтовые инъекции атаки с PHP, но я ничего не могу найти об исправлении этого в классическом ASP с VBScript.Как предотвратить нулевой байтовый ввод от querystring

Вот атака сканера на нашем общедоступном сайте:

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

Как @ Кул-Тигин говорит, что вам нужно назначить 'input'' newString', прежде чем вы начнете вызывать 'Replace()' on '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

Благодарим вас за решение кода и четкое объяснение! –