일반적으로 알려진 ASP 업로드 취약점은 접미사 이름을 이미지 파일 접미사로 변경하여 일부 트로이 목마 파일을 업로드하는 것입니다.
이 상황을 식별하려면 다음 기능을 사용하십시오.
<%
'************************************************ * ****************
'CheckFileType 함수는 파일이 이미지 파일인지 확인하는 데 사용됩니다.
'매개변수 파일 이름은 로컬 파일의 경로입니다.
'jpeg, gif, bmp, png 파일 중 하나이면 함수는 true를 반환하고 그렇지 않으면 false를 반환합니다.
'************************************************ * ****************
const adTypeBinary=1
희미한 jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
희미한 bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
희미한 png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
희미한 gif(5):gif(0)=CByte(&H47):gif(1)=CByte(&H49):gif(2)=CByte(&H46):gif(3)=CByte(&H39):gif(4) =CByte(&H38):gif(5)=CByte(&H61)
함수 CheckFileType(파일 이름)
오류 발생 시 다음 재개
CheckFileType=false
희미한 fstream,fileExt,stamp,i
fileExt=mid(파일이름,InStrRev(파일이름,.)+1)
fstream=Server.createobject(ADODB.Stream) 설정
fstream.Open
fstream.Type=adTypeBinary
fstream.LoadFromFile 파일 이름
fstream.position=0
사례 파일 선택Ext
케이스 jpg,jpeg
스탬프=fstream.read(2)
i=0 ~ 1인 경우
if ascB(MidB(stamp,i+1,1))=jpg(i) then CheckFileType=true else CheckFileType=false
다음
케이스 gif
스탬프=fstream.read(6)
i=0~5인 경우
if ascB(MidB(stamp,i+1,1))=gif(i) then CheckFileType=true else CheckFileType=false
다음
케이스 png
스탬프=fstream.read(4)
i=0~3인 경우
if ascB(MidB(stamp,i+1,1))=png(i) then CheckFileType=true else CheckFileType=false
다음
케이스 bmp
스탬프=fstream.read(2)
i=0 ~ 1인 경우
if ascB(MidB(stamp,i+1,1))=bmp(i) then CheckFileType=true else CheckFileType=false
다음
선택 종료
fstream.Close
fseteam=아무것도 설정하지 않음
err.number<>0이면 CheckFileType=false
함수 종료
%>
그럼 신청할 때
CheckFileType(server.mappath(cnbruce.jpg))
또는
CheckFileType(F:/web/164/images/cnbruce.jpg))
어쨌든 로컬 물리주소의 이미지 파일 형식을 감지하고 검증하여 true 또는 false 값을 반환하는 것입니다.
따라서 이러한 상황은 이미지 업로드에 적용됩니다. 현재 방법은 먼저 의사 이미지 파일의 업로드를 허용한 다음 위의 사용자 정의 기능을 사용하여 파일이 이미지 사양을 충족하는지 확인하는 것입니다. 트로이 목마, FSO는 다음과 같은 항목을 삭제합니다.
file.SaveAs Server.mappath(filename) '파일을 저장합니다.
CheckFileType(Server.mappath(filename))이 아닌 경우
응답.잘못된 이미지 형식 쓰기
fso = CreateObject(Scripting.FileSystemObject) 설정
ficn = fso.GetFile(Server.mappath(파일 이름)) 설정
ficn.삭제
setficn=아무것도 없음
fso=아무것도 설정하지 않음
응답.끝
종료하면
파일이 먼저 업로드된 후 즉시 사용자 정의 기능을 사용하여 파일 이미지 형식의 일관성을 확인하고 FSO는 해당 파일을 삭제합니다.
ASP 업로드 취약점은 또한 /0을 사용하여 파일 경로를 조작합니다.
이러한 상황에서는 다음 기능을 사용할 수 있습니다.
함수 TrueStr(fileTrue)
str_len=len(fileTrue)
pos=Instr(fileTrue,chr(0))
pos=0 또는 pos=str_len인 경우
TrueStr=참
또 다른
TrueStr=거짓
종료하면
함수 종료
그런 다음 파일을 업로드하기 전에 판단을 내릴 수 있습니다.
TrueStr(파일 이름)=false인 경우
response.write 불법파일
응답.끝
종료하면
file.SaveAs Server.mappath(파일 이름)
%>