Взлом осуществляется через стандартные примеры, идущие в поставке с web-сервером, а так как люди еще не сильно задумываются о защите своего сайта, считая это не очень большой проблемой, и часто оставляют все на Авось, то просто ставят WebSite, ничего не предпринимая для его настройки и обеспечения достаточной защиты. Все имеющиеся в сети сайты под управлением WebSite v1.1 имеют лазейку, обеспечивающую почти полный доступ к машине, на которой они находятся.
Как у нас ставят WebSite? Просто давят кнопку Install, и потом прога говорит, что web-сервер поставлен. Люди находят, где находится корень web-сайта, закачивают туда свою информацию, и все так и живет, пока не наступает время “дельта Тэ”. Что же появляется в таком состоянии? По умолчанию отображается (мапится, mapping) куча ненужных для работы сервера каталогов /java/, /publish/, /wsdocs/, /cgi-dos/, /cgi-win/. Конечно, в какой-то момент времени они, возможно, и понадобятся, но вначале они просто не нужны. Это с одной стороны, с другой стороны создателям WebSite со всех сторон нужно показать возможности этого сервера, что они с успехом и делают, открывая потенциальные дырки в защите web-сайта и заполняя эти каталоги разнообразными примерами, так радующими глаз потенциального взломщика.
Поставим на машину WebSite v1.1f в дефолтовой конфигурации иприступим к исследованию его на дырки.
Задача перед нами стоит такая: закачать на ломаемый сервер какое-нибудь средство удаленного администрирования и управления, типа ВО или NetBus, и запустить его. Этап закачки не представляет никакого интереса, т.к. по умолчанию WebSite позволяет удаленно запустить /cgi-win/uploader.exe и закачать кому угодно что угодно.
Вторым этапом является выяснение месторасположения каталога с WebSite'ом. Это делается тоже очень легко, просто удаленно запускаем файл /cgi-dos/args.bat, на что нам в ответ приходит сообщение типа:
Empty output from CGI program
D:/WebSite/cgi-dos/args.bat
что однозначно определяет каталог с WebSite'ом. Тогда отображаемый каталог /cgi-dos/ будет находится в каталоге D:/WebSite/cgi-dos/, апуть к файлу Patch.exe, который мы закачиваем, будет:
D:/WebSite/UploadS/Patch.exe
Итак, момент, к которому мы подошли, — это исследование на предмет возможности запуска файла, который мы закачали. Например, у web-сервера Apache есть уязвимость на счет тестовых скриптов /cgi-bin/ test-cgi и /cgi-bin/nph-test-cgi, которые аналогичны присутствующему в WebSite примеру Args.bat. Эта уязвимость заключается в том, что возможна распечатка передаваемой строки в таком виде, в каком она присутствует, и это обычно делается строчкой скрипта
echo QUERY_STRING = $QUERY_STRING
т.е. если мы передаем строчку типа > 1.bat, то по логике вещей строчка
QUERY_STRING =
будет перенаправлена в файл 1.bat, путь к этому файлу мы могли бы указать на каталог /cgi-bin/, он бы туда записался, и далее уже удаленно мы могли бы его запустить из этого каталога.
Мы можем засылать специальные непечатные символы типа CR (код 0dh), LF (код 0ah). Появление таких символов в командной строке приведет к переводу строки в скрипте и вполне возможно, что следующей строчкой вдруг ни с того ни с сего окажется наш файл, лежащий в каталоге /uploads/.
Рассмотрим, как запускаются .bat скрипты на web-сервере на основе WebSite.
При обработке bat-скрипта во временном каталоге WebSite/cgi-temp/ создаются 4 файла: xxxxx.acc, xxxxx.bat, xxxxx.inp, xxxxx.out. В глаза сразу бросается файл xxxxx.bat. Так, при удаленном запуске /cgi-dos/args.bat получается такой файл xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\ WebSite\ cgi-dos\ args.bat
D:\ WebSite\ cgi-temp\ xxxxx.out
Если этому .bat файлу кинуть в командной строке аргументов, например, /cgi-dos/args.bat?africa.bat, то получим xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\ WebSite\ cgi-dos\ args.bat africa.bat
D:\ WebSite\ cgi-temp\ xxxxx.out
Кто знает, что такое перенаправление потока данных (значки >и<), сразу поймет, что здесь к чему. По-простому, WebSite создает временный xxxx.bat файл, результаты деятельности которого перенаправляются в файл xxxxx.out. Этот файл xxxxx.out отдается удаленному клиенту результатом работы скрипта, если в работе скрипта не произошло ошибки. Во временных файлах вместо символов xxxxx подставляется случайная последовательность символов.
Запускаем вот так:
/cgi-dos/args.bat?>d:/Website/cgi-shl/1.bat
получаем xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\ WebSite\ cgi-dos\ args.bat africa.bat
^>D:/WebSite/cgi-shl/1.bat
D:\ WebSite\ cgi-temp\ xxxxx.out
Видите, как нехорошо поступил WebSite — перед символом перенаправления > поставил какую-то гадость ^, от которой всякое перенаправление перестает быть перенаправлением.
Если забивать много много перенаправлений типа >, то вполне возможно, что в какой-то момент времени на каждый значок > не хватит значка ^, так как вполне возможно, что буфер у WebSite не резиновый.