Выбрать главу

· print "Content-type: text/html\n\n";

· print "Hello,Sailor!\n";

Сервер «съел» одну строку (в листинге она выделена жирным шрифтом). Если же ее попытаться убрать, то выполнение скрипта прервется с сообщением об ошибке. Причины такого поведения подробно рассмотрены в дополнении «Протокол CGI».

В главе «Что можно сделать с помощью Perl» замечалось, что многие сервера неявно предоставляют возможность выполнения скриптов. Для этого достаточно поместить свой файл в директорию, с атрибутами “r w x - - x - - -x”, которая, как правило, называется «/BIN» или «/CGI-BIN». Иногда это можно сделать с помощью FTP (File Transfer Protocol, смотри главу «Протокол FTP» [258]), но в подавляющем большинстве случаев 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: vasia@bestia.my

· Content-type: text/html

· Content-length:220 [260]

·
· «BODY»

· Съел бобра - спас дерево!

· «HR»
· «H1»
· «CENTER»

· «IMG SRC="http://www.aport.ru/w_liven.gif"»

· Здесь был «A HREF="mailto:vasia@bestia.my"»Вася«/A»…

· «IMG SRC="http://www.aport.ru/w_liven.gif"»

· «/H1»
· «/BODY»

Если операция прошла успешно, главная страница в браузере Internet Explorer будет выглядеть так:

Рисунок 21 Так выглядит главная станица сервера после ее модификации

Это один из многочисленных способов, используемых злоумышленниками для модификации страничек плохо защищенных серверов в Internet. Такие в настоящее время необычайная редкость, тем не менее, приведенный ниже фрагмент убеждает, что они все-таки есть:

"И взбрело мне (по закрепившейся привычке) поглядеть степень защищенности и (самое главное) степень тупости админа. Для этого я стал юзать (что думаете???) свой любимый Нетскап 3.01 (Браузер Netscape Navigator поддерживает метод PUT, в отличие от Internet Explorer - К.К). Стал лазить по директориям и обнаружил очень странную для сегодняшнего дня вещь, а именно директории /scripts и /cgi-bin оказались открытыми"

«История о Забывчивости и Извращениях, или как маленький локальный Баг изменил ход дела» Story by DiGGertaL SpOOn (Оригинал статьи находится по адресу http://www.hackzone.ru/articles/idaho.html).

Дальше статья повествует, как наивный чукотский «вьюноша» манипулировал всеми «хакерскими» утилитами по очереди, ломясь в широко открытую дверь. Чтобы повторить его «подвиг» вовсе не обязательно устанавливать на своей машине Netscape Navigator. Можно воспользоваться, например, приложением «Microsoft Web Publishing», которое поддерживает закачку файлов на сервер по HTTP-протоколу всеми доступными способами:

Рисунок 22 Microsoft Web Publishing поддерживает метод POST необходимый для «заливки» документов на сервер

Однако чаще всего злоумышленнику под тем или иным предлогом в доступе будет отказано. Возможные мотивации - метод PUT запрещен; метод PUT разрешен, но нет прав записи в указанный файл (директорию); наконец, метод PUT разрешен, права записи есть, но требуется авторизация (ввод имени и пароля).

Ниже приведены протоколы трех последовательных попыток подключения к следующим серверам: http://kpnc.virtualave.net, http://dore.on.ru и http://195.161.42.222.

· PUT /index.html HTTP/1.0 · · HTTP/1.1 405 Method Not Allowed · Date: Sat, 15 Apr 2000 21:50:26 GMT · Server: Apache/1.2.6 · Allow : GET, HEAD, OPTIONS, TRACE · Connection: close · Content-Type: text/html · · «HTML» · «HEAD» · «TITLE» 405 Method Not Allowed «/TITLE» · «/HEAD» · «BODY» · «H1» Method Not Allowed «/H1» · The requested method PUT is not allowed for the URL /index.html.«P» · «/BODY»«/HTML» · PUT /Index.html HTTP/1.0 · · HTTP/1.1 403 Access Forbidden · Server: Microsoft-IIS/4.0 · Date: Sat, 15 Apr 2000 22:04:25 GMT · Content-Length: 495 · Content-Type: text/html · · «html» · «head» · «title»Error 403.3«/title» · «/head» · «body» · «h2»HTTP Error 403«/h2» · «p»«strong» 403.3 Forbidden: Write Access Forbidden «/strong»«/p» · «p»This error can be caused if you attempt to upload to, or modify a file in, a · directory that does not allow Write access.«/p» · «p»Please contact the Web server's administrator if the problem persists.«/p» · PUT /Index.htm HTTP/1.0 · · HTTP/1.1 401 Access Denied · WWW-Authenticate: NTLM · WWW-Authenticate: Basic realm="195.161.42.222" · Content-Length: 644 · Content-Type: text/html · · «html» · «head» · «title»Error 401.2«/title» · «body» · «h2»HTTP Error 401«/h2» · «p»«strong»401.2 Unauthorized: Logon Faile d due to server configuration«/strong» · «p»This error indicates that the credentials passed to the server do not match the · credentials required to log on to the server. This is usually caused by not s · ending the proper WWW-Authenticate header field.«/p» · «p»Please contact the Web server's administrator to verify that you have permiss · ion to access to requested resource.«/p»

 Первые два случая говорят о правильной конфигурации сервера (с точки зрения политики безопасности), но факт авторизации сам по себе еще не свидетельствует о защищенности (быть может, используется простой пароль, наподобие «guest»).

Механизмы аутентификации HTTP-серверов довольно многочисленны, поэтому ниже будет описан лишь один, наиболее распространенный, из них. Всю остальную информацию можно почерпнуть из технической документации RFC-2068 и RFC-2069.

Начиная со спецификации HTTP 1.0, код ошибки “401” зарезервирован за «Access Denied, need authenticate [261]». Именно его возвратил сервер в последнем примере. Ниже заголовок ответа сервера приводится еще раз:

· HTTP/1.1 401 Access Denied · WWW-Authenticate: Basic realm=" 195.161.42.222 " · Content-Length: 644 · Content-Type: text/html

Выделенная жирным шрифтом строка «Basic» указывает на требуемый метод аутентификации, а “realm” содержит имя области аутентификации. На сервере может существовать несколько независимых друг от друга зон, каждая со своей схемой доступа. В приведенном случае, очевидно, единственная область аутентификации распространяется на весь сервер.