Разработчики впопыхах дописали несколько наивных строк тривиально фильтра и поплатились за это. В суматохе никому и в голову не пришло, что тот же самый вызов можно записать и как - “GET /default.asp%20/”, то есть заменить символ точки ее шестнадцатеричным значением. И только что выпущенная заплатка оказалась бесполезной.
Отсюда мораль - не каждая попытка заткнуть дыру заканчивается успешно. Забудьте свою психологическую инерцию и тестируйте все возможные значения -от осмысленных до явно бредовых.
При правильной политике администрирования, ошибка в IIS никак не влияла на его работу. Достаточно было убрать права на чтение файла. К сожалению, в большинстве случаев такие права установлены, в надежде на грамотную защиту сервера, теоретически никогда не путающего содержимое скрипта с результатами его работы.
В качестве небольшого упражнения, можно запустить демонстрационный пример, расположенный по адресу http://lighning.prohosting.com/~/kpnc/cgi-bin/helo.pl Результат его работы показан на рисунке, приведенном ниже:
Если заглянуть в исходный файл, прилагаемый к книге (“/SRC/Hello.pl”), бросается в глаза одна странность:
· #!/usr/local/bin/perl -w
· print "Content-type: text/html\n\n";
· print "Hello,Sailor!\n";
Сервер «съел» одну строку (в листинге она выделена жирным шрифтом). Если же ее попытаться убрать, то выполнение скрипта прервется с сообщением об ошибке. Причины такого поведения подробно рассмотрены в дополнении «Протокол CGI».
В главе «Что можно сделать с помощью Perl» замечалось, что многие сервера неявно предоставляют возможность выполнения скриптов. Для этого достаточно поместить свой файл в директорию, с атрибутами “r w x - - x - - -x”, которая, как правило, называется «/BIN» или «/CGI-BIN». Иногда это можно сделать с помощью FTP (
Напротив же, метод PUT может быть не закрыт, что позволит с успехом им воспользоваться (в Internet все, что явно не запрещено - разрешено). Использование метода PUT требует явного заполнения некоторых полей, которые будет рассмотрены ниже.
При «заливке» файла на сервер в заголовке запроса обязательно наличие поля “Content-length”, равного длине закачиваемого файла в байтах, а так же “Accept”, указывающего в каком формате будут переданы данные. Необязательное поле “From” может содержать электронный адрес отправителя, а может и вовсе отсутствовать.
Методом PUT можно воспользоваться, для создания нового или замещения любого уже существующего файла на сервере, разумеется, при наличии надлежащих прав доступа. Например, чтобы оставить свое graffiti на главной страничке сайта http://lightning.prohosting.com/~kpnc [259] можно послать серверу следующий запрос:
· PUT /~kpnc/ HTTP/1.0
· Accept: text\html
· From: [email protected]
· Content-type: text/html
· Content-length:220 [260]
· Съел бобра - спас дерево!
· «IMG SRC="http://www.aport.ru/w_liven.gif"»
· Здесь был «A HREF="mailto:[email protected]"»Вася«/A»…
· «IMG SRC="http://www.aport.ru/w_liven.gif"»
Если операция прошла успешно, главная страница в браузере Internet Explorer будет выглядеть так:
Это один из многочисленных способов, используемых злоумышленниками для модификации страничек плохо защищенных серверов в Internet. Такие в настоящее время необычайная редкость, тем не менее, приведенный ниже фрагмент убеждает, что они все-таки есть:
"
«