Сканер уязвимостей 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
прошло мимо моих попыток проверить его.
Перед заменой вы не присвоили значение 'newString'. –
Как @ Кул-Тигин говорит, что вам нужно назначить 'input'' newString', прежде чем вы начнете вызывать 'Replace()' on 'newString' или вы ничего не замените. – Lankymart
Я ошибся при вставке кода в исходное сообщение. Назначение входного значения для newString на самом деле было в коде, но не удалось внести его в этот оригинальный пост. Проблема все еще существует. –