«Техника сетевых атак»

Вид материалаКраткое содержание

Содержание


Пишут, что...
Http/1.1 200 ok
Helo, Sailor!
Врезка «информация»
Your information has been added to our database.
Врезка «замечание»
Рисунок 20 Демонстрация удаленного выполнения программы
Подобный материал:
1   ...   30   31   32   33   34   35   36   37   ...   51


  • Пишут, что...



  • Идея "единого ножа для швейцарской армии" имеет свои достоинства,
  • но когда ее доводят до абсурда, этот нож становится камнем на шее.



  • Никлаус Вирт


  • "От разработки языков программирования к констуироваию компьютеров"





  • Указание спецификации HTTP 1.0 приводит к тому, что ответ сервера немного отличается от предыдущего. В нем появляется заголовок с множеством любопытных полей, несущих в себе информацию о сервере, дате последней модификации документа и других, не менее полезных сведений.

    Выделенная жирным шрифтом строка «Connection: close» говорит о том, что по умолчанию выбран режим разрыва соединения сразу же после выдачи ответа. Такой поход снижает нагрузку на сервер, позволяя пользователю спокойно, не торопясь изучать содержимое странички, не занимая канал. Однако, это не совсем удобно (или совсем неудобно) при работе в telnet-клиенте.

    Чтобы изменить значение поля “Connection” на противоположное, необходимо присвоить ему значение «Keep Alive», послав серверу любой запрос254. Один из способов сделать это, продемонстрирован ниже:

    • GET /~kpnc/ HTTP/1.0
    • Connection:Keep-Alive

    • HTTP/1.1 200 OK
    • Date: Sat, 15 Apr 2000 06:10:37 GMT
    • Server: Apache/1.3.6 (Unix)
    • Last-Modified: Thu, 13 Apr 2000 11:30:04 GMT
    • ETag: "b139bf-83-38f5afbc"
    • Accept-Ranges: bytes
    • Content-Length: 131
    • Keep-Alive: timeout=15, max=100
    • Connection: Keep-Alive
    • Content-Type: text/html










    • Helo, Sailor!




    • Click here






    Выделенная жирным шрифтом строка говорит о том, что соединение будет удерживаться в течение пятнадцати секунд и, если в течение этого времени клиент не проявит никакой активности, – будет разорвано сервером.

    Манипулируя значением “timeout” можно увеличить этот промежуток до 100 секунд (вполне достаточно для комфортной работы в telnet клиенте), но это предел, превысить который не позволят настойки сервера. (Максимальное ограничение во времени на удержание соединения варьируется от сервера к серверу).

    Остальные поля заголовка исчерпывающе описаны в RFC 1945 и RFC 2068, и здесь не рассматриваются.


    Для удаленного выполнения программ может использоваться все тот же метод “GET”, вызываемый точно так, как для запроса содержимого обычного HTML документа. Единственное различие заключается в том, что клиенту возвращается не исходный текст программы, а результат ее работы. Получить в свое распоряжение содержимое исполняемого файла невозможно (точнее не должно быть возможно), даже если имеются права на его чтение.

    Врезка «информация»


    Вспоминается громкий скандал, развернувшийся вокруг обнаруженной ошибки в Internet Information Server 3.0 (IIS 3.0), позволяющий получить доступ к содержимому asp (Active Server Pages) скриптов добавлением в конце имени знака точки. То есть, если к default.asp255, расположенному на сайте ссылка скрыта256, обратиться так – “GET /default.asp.257”, то сервер вернет сам файл, а не результат его работы.

    Например:

    GET /Default.asp.

    <% emailx=request.form("email")

    remarkx=request.form("remark")

    Set Conn = Server.CreateObject("ADODB.Connection")

    Conn.Open "Local SQL Server", "sa", "DTide"

    Set RS = Conn.Execute("insert into Web_data.dbo.ASP_data(email,remark) values('" & emailx & "','" & remarkx & "')") %>

    Your information has been added to our database.


    Разработчики впопыхах дописали несколько наивных строк тривиально фильтра и поплатились за это. В суматохе никому и в голову не пришло, что тот же самый вызов можно записать и как – “GET /default.asp%20/”, то есть заменить символ точки ее шестнадцатеричным значением. И только что выпущенная заплатка оказалась бесполезной.

    Отсюда мораль – не каждая попытка заткнуть дыру заканчивается успешно. Забудьте свою психологическую инерцию и тестируйте все возможные значения –от осмысленных до явно бредовых.

    Врезка «замечание»


    При правильной политике администрирования, ошибка в IIS никак не влияла на его работу. Достаточно было убрать права на чтение файла. К сожалению, в большинстве случаев такие права установлены, в надежде на грамотную защиту сервера, теоретически никогда не путающего содержимое скрипта с результатами его работы.


    В качестве небольшого упражнения, можно запустить демонстрационный пример, расположенный по адресу ссылка скрыта Результат его работы показан на рисунке, приведенном ниже:




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



    Если заглянуть в исходный файл, прилагаемый к книге (“/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 (File Transfer Protocol, смотри главу «Протокол FTP»258), но в подавляющем большинстве случаев ftp-доступ закрыт (точнее, правильнее было бы сказать, не открыт).

    Напротив же, метод PUT может быть не закрыт, что позволит с успехом им воспользоваться (в Internet все, что явно не запрещено – разрешено). Использование метода PUT требует явного заполнения некоторых полей, которые будет рассмотрены ниже.

    При «заливке» файла на сервер в заголовке запроса обязательно наличие поля “Content length”, равного длине закачиваемого файла в байтах, а так же “Accept”, указывающего в каком формате будут переданы данные. Необязательное поле “From” может содержать электронный адрес отправителя, а может и вовсе отсутствовать.

    Методом PUT можно воспользоваться, для создания нового или замещения любого уже существующего файла на сервере, разумеется, при наличии надлежащих прав доступа. Например, чтобы оставить свое graffiti на главной страничке сайта ссылка скрыта259 можно послать серверу следующий запрос:

    • PUT /~kpnc/ HTTP/1.0
    • Accept: text\html
    • From: vasia@bestia.my
    • Content-type: text/html
    • Content-length:220260


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