WindowsServer IIS 6.0 확장자 파싱 취약점
페이지 정보
본문
Microsoft IIS 5.0, 6.0 확장자 파싱 취약점이란?
Microsoft IIS 5.0, 6.0에서 확장자가 비정상적인 웹 페이지 요청시 제대로 파싱을 하지 못해 웹 스크립트로 동작하는 취약점이 존재 합니다.
취약버전
Microsoft IIS 5.0, 6.0
원인
세미콜론(;)을 포함한 웹페이지 요청시 파싱 대상이 세미콜론(;) 앞쪽만 인식하여 웹스크립트로 동작함
Microsoft IIS 5.0, 6.0의 asp.dll을 파서로 사용하는 확장자에 한해서 해당 취약점이 존재함
파일 업로드 시 필터링을 우회하여 악성파일 실행이 가능함
대응 방안
기존 파일 업로드 보안권고문의 경우 파일 업로드 확장자 필터링은 jpg, hwp,pdf등 사용하는 확장자만 업로드 가능하도록 권고하고 있지만 해당 취약점을 이용 할경우 확장자 필터인 우회가 가능함으로 확장자 검사가 아닌 파일명 전체에 대한 검사를 통해서 필터링을 강화 해야함
파일 업로드 시 파일명에 세미콜론(;)이 필요 하지 않다면 파일명 검사 시 세미콜론(;)에 대한 필터링을 적용함
업로드 파일을 위한 데렉토리에는 실행 권한을 제거 해야 하며 업로드 된 파일이름을 임의로 변경하여 저장해야 함
첨부파일에 대한 검사는 반드시 Server side Script에서 구현해야 함
정식 Patch 발표 시 즉시 업데이트
안정한 코딩 예(ASP)
<%
Set Up = Server.CreateObject("SiteGalaxyUpload.Form")
Path1 = server.mappath(".") & "\upload\"
Fname = Up("file1")
if Fname <> "" then // 파일 첨부가 되었으면
if Up("file1").Size > 10240 then // 용량제한
Response.Write "용량초과"
Response.End
end if
if Up("file1").MimeType <> "image" then // 이미지 업로드 허용
Response.Write "이미지 파일이 아닙니다."
Response.End
end if
Filename=Mid(Fname,InstrRev(Fname,"\")+1) // 파일이름부분 추출
// 파일이름에서 세미콜론(;)이 존재하는지 검사한다
if NOT(InStr(Filename,";" ) Then
response.write "<script>alert(`업로드 금지 파일입니다`);history.back()</script>"
response.End
End if
// 중복시에 파일이름 부분을 변경하기 위해 분리를 한다
Farry=split(Filename,".") // .을 기준으로 분리
preFname=Farry(0) // 파일이름 앞부분
extFname=Farry(UBound(Farry)) // 파일이름의 마지막 확장자
// 파일이름의 마지막 확장자를 검사한다
if (NOT(extFname <> "jpg") or (extFname <> "hwp") or (extFname <> "pdf")) then
response.write "업로드 금지 파일 입니다"
response.End
End If
// 저장할 전체 path를 만든다, 파일이름을 만든다
Path2 = Path1 & Filename
saveFname=preFname & "." & extFname
Set fso = CreateObject("Scripting.FileSystemObject")
countNo = 0 // 파일 중복될경우 셋팅 값
fExist=0 // 같은 이름의 파일 존재 체크
Do until fExist = 1
If(fso.FileExists(Path2)) Then
countNo = countNo + 1
Path2 = Path1 & preFname & countNo & "." & extFname
saveFname=preFname & countNo & "." & extFname
else
fExist=1
End If
Loop
Up("file1").SaveAs(Path2)
response.write(saveFname & "저장완료")
else
response.write("Error")
end if
Set Up = nothing
%>
자료출처
http://hosting.whois.co.kr/board/view.php?ch=&id=notice&no=94645
Microsoft IIS 5.0, 6.0에서 확장자가 비정상적인 웹 페이지 요청시 제대로 파싱을 하지 못해 웹 스크립트로 동작하는 취약점이 존재 합니다.
취약버전
Microsoft IIS 5.0, 6.0
원인
세미콜론(;)을 포함한 웹페이지 요청시 파싱 대상이 세미콜론(;) 앞쪽만 인식하여 웹스크립트로 동작함
Microsoft IIS 5.0, 6.0의 asp.dll을 파서로 사용하는 확장자에 한해서 해당 취약점이 존재함
파일 업로드 시 필터링을 우회하여 악성파일 실행이 가능함
대응 방안
기존 파일 업로드 보안권고문의 경우 파일 업로드 확장자 필터링은 jpg, hwp,pdf등 사용하는 확장자만 업로드 가능하도록 권고하고 있지만 해당 취약점을 이용 할경우 확장자 필터인 우회가 가능함으로 확장자 검사가 아닌 파일명 전체에 대한 검사를 통해서 필터링을 강화 해야함
파일 업로드 시 파일명에 세미콜론(;)이 필요 하지 않다면 파일명 검사 시 세미콜론(;)에 대한 필터링을 적용함
업로드 파일을 위한 데렉토리에는 실행 권한을 제거 해야 하며 업로드 된 파일이름을 임의로 변경하여 저장해야 함
첨부파일에 대한 검사는 반드시 Server side Script에서 구현해야 함
정식 Patch 발표 시 즉시 업데이트
안정한 코딩 예(ASP)
<%
Set Up = Server.CreateObject("SiteGalaxyUpload.Form")
Path1 = server.mappath(".") & "\upload\"
Fname = Up("file1")
if Fname <> "" then // 파일 첨부가 되었으면
if Up("file1").Size > 10240 then // 용량제한
Response.Write "용량초과"
Response.End
end if
if Up("file1").MimeType <> "image" then // 이미지 업로드 허용
Response.Write "이미지 파일이 아닙니다."
Response.End
end if
Filename=Mid(Fname,InstrRev(Fname,"\")+1) // 파일이름부분 추출
// 파일이름에서 세미콜론(;)이 존재하는지 검사한다
if NOT(InStr(Filename,";" ) Then
response.write "<script>alert(`업로드 금지 파일입니다`);history.back()</script>"
response.End
End if
// 중복시에 파일이름 부분을 변경하기 위해 분리를 한다
Farry=split(Filename,".") // .을 기준으로 분리
preFname=Farry(0) // 파일이름 앞부분
extFname=Farry(UBound(Farry)) // 파일이름의 마지막 확장자
// 파일이름의 마지막 확장자를 검사한다
if (NOT(extFname <> "jpg") or (extFname <> "hwp") or (extFname <> "pdf")) then
response.write "업로드 금지 파일 입니다"
response.End
End If
// 저장할 전체 path를 만든다, 파일이름을 만든다
Path2 = Path1 & Filename
saveFname=preFname & "." & extFname
Set fso = CreateObject("Scripting.FileSystemObject")
countNo = 0 // 파일 중복될경우 셋팅 값
fExist=0 // 같은 이름의 파일 존재 체크
Do until fExist = 1
If(fso.FileExists(Path2)) Then
countNo = countNo + 1
Path2 = Path1 & preFname & countNo & "." & extFname
saveFname=preFname & countNo & "." & extFname
else
fExist=1
End If
Loop
Up("file1").SaveAs(Path2)
response.write(saveFname & "저장완료")
else
response.write("Error")
end if
Set Up = nothing
%>
자료출처
http://hosting.whois.co.kr/board/view.php?ch=&id=notice&no=94645
댓글목록
등록된 댓글이 없습니다.