ModRewrite является замечательным инструментом администрирования, позволяющий менять URL "на лету" за счет использования регулярных выражений. Этот модуль веб-сервера Apache может применяться, как для сокрытия структуры сайта, так и для задач поисковой оптимизации ( SEO ) или даже с целью разграничения доступа. Довольно широкое применение ModRewrite связано с преследованием цели спрятать реальную структуру сайта подальше от посторонних глаз (каталоги, серверные сценарии и поступающие в них запросы). Нужно сказать, что кто-то даже предлагает использовать ModRewrite с целью защиты от SQL-инъекций. Разумеется, спасаться от инъекций с применением этого модуля равносильно стрельбе из пулемета по воробьям, и является довольно опасным мероприятием. name='more'>
На эту тему не так давно в журнале Хакер ( 07 (138) ) была опубликована статья Тимура Юнусова ("Не перезаписью единой"), в которой рассматривались используемые методы при проведении целенаправленной атаки на сайт, "защищенный" модулем ModRewrite. И эта история получила продолжение после публикации материала на нашем Позитивном блоге. Исследователь, скрывающийся под псевдонимом 0x32353031 , предложил интересный подход раскрытия имени серверного сценария, спрятанного за ModRewrite. Предложенный им метод заключается в принудительном вызове ошибки веб-сервера 413 "Request Entity Too Large" . Указанная ошибка возникает в случае, когда веб-сервер отказывается обработать запрос по причине слишком большого размера тела запроса. Состояние 413 HTTP может быть вызвано принудительно путем установки заведомо некорректного размера длины запроса eq "Content-length: x". 0x32353031 приводит следующий пример, демонстрирующий эту идею:
H=ha.ckers.org; echo -ne "POST /blog/category/webappsec/books/ HTTP/1.1 Host: $H Connection: close Content-length: x
" | nc $H 80 | less
Т.е. для такой конфигурации:
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9]*).html /my_script_www.php?pag=$1 [L,QSA]
Будет получен следующий выхлоп:
К сожалению, как показали проведенные эксперименты, этот метод работает исключительно под Apache 2.x. Временным решением по устранению обсуждаемой уязвимости может быть обработка состояния 413 "Request Entity Too Large", например, с использованием стандартной директивы Apache "ErrorDocument" (ErrorDocument 413 /error.html).
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.