Что там прячет ModRewrite?

ModRewrite является замечательным инструментом администрирования, позволяющий менять URL "на лету" за счет использования регулярных выражений. Этот модуль веб-сервера Apache может применяться, как для сокрытия структуры сайта, так и для задач поисковой оптимизации (SEO) или даже с целью разграничения доступа. Довольно широкое применение ModRewrite связано с преследованием цели спрятать реальную структуру сайта подальше от посторонних глаз (каталоги, серверные сценарии и поступающие в них запросы). Нужно сказать, что кто-то даже предлагает использовать ModRewrite с целью защиты от SQL-инъекций. Разумеется, спасаться от инъекций с применением этого модуля равносильно стрельбе из пулемета по воробьям, и является довольно опасным мероприятием.

На эту тему не так давно в журнале Хакер (№ 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\nHost: $H\nConnection: close\nContent-length: x\n\n" | 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).

5 комментариев :

  1. тем временем: http://www.avaxhome.ws/ebooks/programming_development/general/web_development/15905956106.html
    бгг

    ОтветитьУдалить
  2. Стоить так же отметить, что число веб-приложений, использующих именно mod_rewrite, имхо, будет снижаться в пользу разбора запросов на уровне ядра используемых фреймворков, и в таком случае скорее всего все техники, завязанные на mod_rewrite, потеряют эффективность.

    ОтветитьУдалить
  3. Дык эта атака не завязана на mod_rewrite, чем ты не разбирай, стандартный 2й апач всё равно плюне ошибку с именем скрипта.

    ОтветитьУдалить
  4. Метод классный, надо еще поискать аналоги )
    Кстати, еще одно применение для http://www.xakep.ru/post/52630/ - это раскрытие реальных путей под mod_rewrite.

    ОтветитьУдалить
  5. >> Кстати, еще одно применение

    кстати да :)

    ОтветитьУдалить