2016-11-02 3 views
3

Nessus Vulnerability Scanner가 레거시 코드 웹 사이트에 대해 실행되었습니다. null 바이트 주입은 PHP로 공격하지만 VBScript를 사용하여 기존 ASP에서 수정하는 방법을 찾을 수 없습니다.쿼리 문자열에서 null 바이트 주입을 방지하는 방법

여기에 우리의 공공 사이트에있는 스캐너의 공격입니다 :

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에 대한 내용은 내 시도를 확인한 것보다 오래갑니다. 나는 reqular 식으로이 문제를 처리하기 위해 제안

+4

바꾸기 전에 'newString'에 값을 할당하지 않았습니다. –

+0

@ Kul-Tigin처럼'newString'에'Replace()'를 호출하기 전에'input'을'newString'에 할당해야합니다. 그렇지 않으면 아무것도 대체하지 않을 것입니다. – Lankymart

+1

원래 게시물에 코드를 붙여 넣는 데 실수를했습니다. newString에 대한 입력 값의 할당은 실제로 코드에 포함되었지만이 원본 게시물에 제대로 입력되지 않았습니다. 문제가 여전히 존재합니다. –

답변

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 

.

+0

코드 솔루션 및 명확한 설명에 감사드립니다! –

관련 문제