Две последовательные точки в URL перемещают навигацию по URL на один шаг назад

#tomcat #url #servlets

#tomcat #url #сервлеты

Вопрос:

У меня мало сомнений относительно использования шаблона точка-точка-точка с запятой в URL (для доступа к приложению servlet, развернутому в папке apache tomcat webapps). Использование точки с запятой ( /..;/ ) возвращает URL на один шаг назад. Исходная проблема (только шаблон точка-точка) — это уязвимость обхода каталога, которая была устранена в последней версии, чем tomcat 6.0.18 , domainname/../manager/html нормализована до domainname/manager/html (ошибка 404). Но в 6.0.37 мы можем повторно создать ту же уязвимость с помощью точки с запятой, что и domainname/..;/manager/html , тогда мы сможем получить доступ к внутренней папке tomcat, такой как admin url, и она запрашивает у меня учетные данные tomcat manager, имя пользователя и пароль. Здесь domainname указан URL-адрес клиента, к которому обращается приложение servlet, развернутое в tomcat, и URL-адрес клиента настроен в httpd.conf виде

 <VirtualHost *:443>
DocumentRoot /usr/local/apache/htdocs/EMPTY

JkMount /* ajp13
RewriteEngine on
RewriteRule ^/(.*) /he/$1 [PT]
</VirtualHost *:80>
  

Можем ли мы использовать какое-либо выражение для RewriteRule , чтобы избежать шаблона ( https://domainname/..; ) для приведенных ниже URL-адресов запроса

 "https://domainname/..;======/xxx/yyyy"
"https://domainname/..;/xxx/yyyy"
"https://domainname/..;abcd/xxx/yyyy"


virtual host settings in apache httpd.conf
<VirtualHost :80>
DocumentRoot /usr/local/apache/htdocs/EMPTY ServerName client.website.com 
RewriteEngine On # Redirect all requests to the local Apache server to port 
8000 
RewriteRule ^/?(.) https://%{SERVER_NAME}/$1 [R,L] 
</VirtualHost>
  

Пожалуйста, предложите.

Спасибо

Комментарии:

1. Привет, как избежать появления шаблона ‘../’ после имени домена в URL domainname.com /..;/manager/html с помощью файла .htaccess. Пожалуйста, предложите правильное правило для этого уникального требования.

2. Можете ли вы проверить свой журнал доступа Apache на наличие запроса в браузере, который имеет URL как: https://domainname/..;/manager/html

3. Спасибо, проверяя те же журналы в рабочей среде, я мог бы исправить эту проблему с прямым обходом на сервере tomcat с изменением правила перезаписи с ‘RewriteRule ^/(.*) /webapplication / $ 1 [PT]’ на ‘RewriteRule ^/^((?!..;).)* / веб-приложение / $ 1 [PT]’. Поскольку проблема связана с шаблоном ..; после имени домена, поэтому я использую (?! ..;) с символом не равно, чтобы избежать этого. Пожалуйста, проверьте регулярное выражение ^/^((?!..;).)* чтобы избежать /..;/aaa / bbb / ccc .

Ответ №1:

Вы не можете изменить это поведение.

Большинство браузеров нормализуют (преобразуют / aaa / bbb / ../ ccc в / aaa / ccc) еще до того, как запрос будет отправлен на сервер. Если такой запрос достигает Tomcat, Tomcat всегда нормализует его перед обработкой. Это сделано для безопасности, чтобы предотвратить, например, обход ограничений безопасности. Отключить это невозможно, и любые запросы на функцию, позволяющую отключить это, почти наверняка будут отклонены.

Для URL-адресов, которые вы цитируете, где /../ следует сразу после хоста, Tomcat вернет ответ 400. Опять же, браузеры вполне могут изменить такие URL-адреса, если вы попытаетесь ввести их в адресной строке.

Комментарии:

1. @Markm Спасибо, я обновил вопрос с четкими деталями, не могли бы вы проверить его один раз.

2. Какие именно версии вы используете для mod_jk и Tomcat?

3. это версия apache-tomcat-6.0.37, и в webapps есть приложение-сервлет, а URL-адреса клиента настроены в настройке перенаправления хоста Virtualhost как: <VirtualHost :80> DocumentRoot /usr/local/apache /htdocs/EMPTY ServerName client.website.com RewriteEngine На # Перенаправляет все запросы на локальный сервер Apache на порт 8000 RewriteRule ^/?(. ) https://%{ИМЯ_СЕРВЕРА}/$1 [R,L] </VirtualHost>, Чтобы решить проблему, я изменил RewriteRule на «RewriteRule ^/((?!..;).*) https://%{ИМЯ_СЕРВЕРА}/$1 [R,L] «, Теперь это работает, и URL имя_домена/..;/manager/html перенаправляет на 404.

4. Срок службы Tomcat 6 истек 31 декабря 2016 года. Вам необходимо перейти на поддерживаемую версию Tomcat. Я бы рекомендовал как минимум 8.5.x и предпочтительно 9.0.x. Вы также не предоставили запрошенные сведения о версии mod_jk.

5. Привет, спасибо за обновление, предоставлю детали mod_k как можно скорее, мы уже предложили обновить версию tomcat, но из-за отсутствия поддержки со стороны соответствующей команды они решили не обновлять версию tomcat. Не могли бы вы взглянуть на следующие детали: Пожалуйста, проверьте детали настройки виртуального хоста в вопросе (внизу), я переписываю регулярное выражение правила RewriteRule с ^/?(.) на ^/((?!..;).*) , Теперь он работает без проблем, когда пользователь пытается имя_домена /..;/manager/ html , в соответствии с конфигурацией он не перенаправляет запрос на https://%{ИМЯ_СЕРВЕРА} / $ 1, тогда он показывает 404.