Распространенная уязвимость загрузки ASP заключается в загрузке некоторых троянских файлов путем изменения их суффиксных имен (на суффиксы файлов изображений).
Используйте следующую функцию, чтобы определить эту ситуацию:
<%
'********************************************** * ****************
'Функция CheckFileType используется для проверки того, является ли файл файлом изображения.
'Имя файла параметра - это путь к локальному файлу
'Если это один из файлов jpeg, gif, bmp, png, функция возвращает true, в противном случае возвращает false
'********************************************** ****************
const adTypeBinary=1
тусклый jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
dim 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)
dim 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
dim fstream,fileExt,штамп,я
fileExt=mid(имя файла,InStrRev(имя файла,.)+1)
установите fstream=Server.createobject(ADODB.Stream)
fstream.Открыть
fstream.Type=adTypeBinary
fstream.LoadFromFile имя файла
fstream.position=0
выбрать файл делаExt
чехол jpg,jpeg
штамп = fstream.read (2)
для я = от 0 до 1
если ascB(MidB(stamp,i+1,1))=jpg(i), то CheckFileType=true, иначе CheckFileType=false
следующий
чехол гифка
штамп = fstream.read (6)
для я = от 0 до 5
если ascB(MidB(stamp,i+1,1))=gif(i), то CheckFileType=true, иначе CheckFileType=false
следующий
чехол png
штамп = fstream.read (4)
для я = от 0 до 3
если ascB(MidB(stamp,i+1,1))=png(i), то CheckFileType=true, иначе CheckFileType=false
следующий
чехол бмп
штамп = fstream.read (2)
для я = от 0 до 1
если ascB(MidB(stamp,i+1,1))=bmp(i), то CheckFileType=true, иначе CheckFileType=false
следующий
конец выбора
fstream.Close
установить fseteam=ничего
если err.number<>0, то CheckFileType=false
конечная функция
%>
Тогда при подаче заявления
CheckFileType(server.mappath(cnbruce.jpg))
или
CheckFileType(F:/web/164/images/cnbruce.jpg))
В любом случае, цель заключается в обнаружении и проверке типа файла изображения локального физического адреса и возврате истинного или ложного значения.
Таким образом, эта ситуация применима к загрузке изображения. Текущий метод заключается в том, чтобы сначала разрешить загрузку файла псевдоизображения, а затем использовать указанную выше пользовательскую функцию, чтобы определить, соответствует ли файл спецификациям изображения. Троянский конь, FSO удалит его, например:
file.SaveAs Server.mappath(filename) 'Сохраняем файл
Если не CheckFileType(Server.mappath(имя файла)) то
ответ.запишите неправильный формат изображения
Установите fso = CreateObject(Scripting.FileSystemObject)
Установите ficn = fso.GetFile(Server.mappath(имя файла))
ficn.delete
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, то
ответ.записать недопустимый файл
ответ.конец
конец, если
file.SaveAs Server.mappath(имя файла)
%>