РНР 5 в подлиннике

Страница 62 из 554


Гпава 4. Установка Apache

127

site.txt, world.txt и weather.txt. Скрипт получает из своих параметров имя типа и сохраняет его в переменную Stype. Далее к ней добавляется расширение ТХТ, получается имя файла, который открывается и, в случае успеха, выводится на печать. Для удобства тип новостей запрашивается через выпадающий список в HTML-форме (она выводится в самом конце скрипта).

Разработчик скрипта, вероятно, считал, что, добавив суффикс ".txt" к названию типа новости, он застрахован от ошибок. К сожалению, это не так. Представьте, что появился некоторый пользователь, который решил не пользоваться формой, а просто ввел следующий TJRL вручную:

http://exaraple.cora/forhacker.php?type=c:\windows\win.ini%00

Что получается? Скрипту передается строка "c:\windows\win.ini\xO", где через \хО мы обозначили символ с нулевым ASCII-кодом (т. к. %00 при URL-декодировании превращается именно в этот символ). После добавления суффикса ".txt" данная строка превращается в "c:\windows\win.ini\x0.txt". А дальше — самое важное. Дело в том, что функция f open (), использующаяся для открытия файла в программе выше, воспринимает символ с нулевым кодом как конец строки (это ее недокументированное поведение). Следовательно, она не замечает, что к строке прибавили ".txt", и безо всяких проблем открывает файл win.ini, расположенный в каталоге Windows (или любой другой — ведь можно указать в параметрах все, что угодно). Естественно, этот файл не должен быть доступен всем пользователям подряд.

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

Необходимо заметить, что данная уязвимость уже исправлена в новых версиях РНР. В них вместо строки "c:\windows\win.ini\x0.txt" (где "\хО" обозначает один символ) функции fopen () будет передано значение "c:\windows\win.ini\0.txt" ("\" и "О"— два знака). Собственно, вопреки ожиданиям изменилось не поведение f open о, а стратегия URL-декодирования: теперь %00 превращается в комбинацию из двух символов "\0", а не в однобайтовый нулевой код.

Конечно, заставив Apache запускаться с правами какого-нибудь другого пользователя, можно сильно ограничить доступность данной уязвимости. К сожалению, это также не решит всех проблем. Ведь даже в данном случае хакер сможет получить доступ (через рассмотренный скрипт — на чтение, а если найдет где-нибудь другую уязвимость, то и на запись) ко всему виртуальному диску. А значит, он сможет "подложить" где-нибудь ЕХЕ-файл с троянской программой, запустив которую ничего не подозревающий пользователь "получит по заслугам" (это только самый простой вариант, возможны и другие сценарии взлома).

Заключительные слова о безопасности

Если вы думаете, что хакеру будет довольно сложно обнаружить уязвимости, подобные приведенной в примере выше, то ошибаетесь. С опытом такие (и даже гораздо менее очевидные) "дыры в защите" сразу же бросаются в глаза. А следовательно,

128

Часть II. Выбор и настройка инструментария

несколько чашек чая, немного свободного времени, удобное кресло, — и ваша машина под чужим контролем.

Вас прельщает подобная перспектива? Вряд ли.

Надеемся, что теперь вы достаточно предупреждены для того, чтобы не сделать опрометчивый шаг, использовав Apache в качестве "настоящего" Web-сервера для Windows.

Ссылки

Приведем список ссылок на страницы, где можно найти самые "свежие" версии Apache и документации к нему. Они пригодятся вам при чтении данной главы.

□ Apache:

• официальный сайт: http://httpd.apache.org;

• дистрибутивы: http://www.apache.org/dist/httpd/binaries/win32/;

• документация: http://httpd.apache.org/docs/;

□ дополнительные драйверы для Windows 95:

• WinSock2: http://www.raicrosoft.com/windows95/downloads/contents/ wuadraintools/s_wunetworkingtools/w95sockets2/default.asp;

• DCOM, msvcrt.dll: на сайте http://raicrosoft.cora/ (воспользуйтесь поиском, местоположение может меняться).

Резюме

В этой главе мы познакомились с понятием "домашнего сервера" и преимуществами отладки PHP-скриптов на платформе Windows (даже если, в конце концов, программы будут работать в Unix). Мы научились вручную устанавливать и настраивать Apache, создавать несколько виртуальных хостов на одном сервере. В следующей главе речь пойдет об установке РНР и MySQL для использования совместно с Apache.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006