Yamotano
Пользователь
- Регистрация
- 22.08.15
- Сообщения
- 28
- Реакции
- 13
- Баллы
- 3
Статья не моя. Автор статьи .V1nest.
Пролог
Статья посвящена, как вы уже догадались, фальсификации HTTP заголовков методом GET и POST запросов. Данная статья не является мануалом ко взлому механизмааутентификации, а лишь способом тестирования на проникновение (как это сейчас модно называть) своих личных машин. Статья написана исключительно в ознакомительныхцелях, автор не несёт никакой ответственности за неправомерное её использование.
Преамбула
HTTP Verb Tampering (HTTP Verb Фальсификация) является атакой, которая использует уязвимость в HTTP-Verb аутентификации и механизмах контроля доступа. Многие механизмы аутентификации только ограничивают доступ по своим параметрам, не предусматривая несанкционированный доступ к закрытым ресурсам с помощью других методов.
Многие механизмы аутентификации веб-сервера используют HTTP Verb и управления доступом. Такие механизмы безопасности включают в себя правила управления доступом для запросов с конкретными методами HTTP, а так же стандартными, такими как GET и POST. Однако веб-сервер реагирует и на альтернативные методы, которые не предвидел разработчик или даже на произвольные строки символов.
Пример методов:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Почитать о них можно тут.
Фабула
Java Platform Enterprise Edition (Java EE) поддерживает Verb-аутентификацию и управление доступом через файл конфигурации web.xml. В Java EE, можно ограничить доступ к /administration/ каталогу для «adminstrator» пользователей, добавив следующие строки в web.xml:
<security-constraint>
<web-resource-collection>
<url-pattern>/administration/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
</auth-constraint>
</security-constraint>
Эти правила безопасности, обеспечивают блокировку GET или POST-запросов к /administration/ каталогам, от пользователей не наделенных администраторскими правами. Тем не менее, HTTP-запросы, составленные определённым бразом к /administration/ каталогам блокироваться не будут. Хотя GET запрос от обычного пользователя будет заблокирован, HEAD запрос от него же заблокирован не будет. Если администратор настраивает веб-сервер, чтобы запретить все методы, отличные от GET и POST, механизм контроля доступа всё равно можно обойти, просто используя различные методы, которые поддерживаются сервером. Веб-сервера, уязвимые к данным запросам: IIS 6.0, Apache 2.2.8, и Tomcat 6.0.
У некоторых веб-серверов, например, Apache 2.2/PHP-it есть возможность обойти механизм контроля доступа с помощью произвольных строк символов для методов HTTP. Такие веб-сервера, осуществляют обработку запросов, которые не привязаны к конкретным методам HTTP. В отличие от HTTP, где GET запрос обрабатывается только если doGet() определен, некоторые веб-сервера пытаются обработать любые методы, включая неизвестные. Таким образом, заменяя законный метод на произвольный, атакующий может использовать уязвимости в обработке внутренней логики и обойти механизм контроля доступа.
Для проведения атаки вполне подойдет расширение для Firefox «HttpRequester»
Для того, чтобы изучить заголовки вручную, нам понадобится NetCat (является стандартным дистрибутивом для Linux), либо Telnet (входит в состав Windows). Запросы довольно примитивны и выглядят аналогично для обоих способов:
[METHOD] /[index.htm] HTTP/1.1
host: *Ваш хост*
Для того, чтобы изучить заголовки и их реакцию, создадим .txt файлы, в ваших любимых редакторах, со следующим содержимым:
nc *Ваш хост* 80 < OPTIONS.http.txt
Для того, чтоб автоматизировать весь процесс достаточно применить следующий bash скрипт, он будет проверять все доступные методы HTTP:
#!/bin/bash
for webservmethod in GET POST PUT TRACE CONNECT OPTIONS PROPFIND;
do
printf "$webservmethod " ;
printf "$webservmethod / HTTP/1.1\nHost: $1\n\n" | nc -q 1 $1 80 | grep "HTTP/1.1"
done
Заключение
Несмотря на то, что каждый метод HTTP потенциально может возвращать различные результаты, есть только один действительный результат для всех, отличных от GET и POST методов - веб-сервер должен либо игнорировать запрос полностью или возвращать ошибку. Любой другой ответ указывает на потенциальную уязвимость. Эти методы должны быть отключены.
Пролог
Статья посвящена, как вы уже догадались, фальсификации HTTP заголовков методом GET и POST запросов. Данная статья не является мануалом ко взлому механизмааутентификации, а лишь способом тестирования на проникновение (как это сейчас модно называть) своих личных машин. Статья написана исключительно в ознакомительныхцелях, автор не несёт никакой ответственности за неправомерное её использование.
Преамбула
HTTP Verb Tampering (HTTP Verb Фальсификация) является атакой, которая использует уязвимость в HTTP-Verb аутентификации и механизмах контроля доступа. Многие механизмы аутентификации только ограничивают доступ по своим параметрам, не предусматривая несанкционированный доступ к закрытым ресурсам с помощью других методов.
Многие механизмы аутентификации веб-сервера используют HTTP Verb и управления доступом. Такие механизмы безопасности включают в себя правила управления доступом для запросов с конкретными методами HTTP, а так же стандартными, такими как GET и POST. Однако веб-сервер реагирует и на альтернативные методы, которые не предвидел разработчик или даже на произвольные строки символов.
Пример методов:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Почитать о них можно тут.
Фабула
Java Platform Enterprise Edition (Java EE) поддерживает Verb-аутентификацию и управление доступом через файл конфигурации web.xml. В Java EE, можно ограничить доступ к /administration/ каталогу для «adminstrator» пользователей, добавив следующие строки в web.xml:
<security-constraint>
<web-resource-collection>
<url-pattern>/administration/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
</auth-constraint>
</security-constraint>
Эти правила безопасности, обеспечивают блокировку GET или POST-запросов к /administration/ каталогам, от пользователей не наделенных администраторскими правами. Тем не менее, HTTP-запросы, составленные определённым бразом к /administration/ каталогам блокироваться не будут. Хотя GET запрос от обычного пользователя будет заблокирован, HEAD запрос от него же заблокирован не будет. Если администратор настраивает веб-сервер, чтобы запретить все методы, отличные от GET и POST, механизм контроля доступа всё равно можно обойти, просто используя различные методы, которые поддерживаются сервером. Веб-сервера, уязвимые к данным запросам: IIS 6.0, Apache 2.2.8, и Tomcat 6.0.
У некоторых веб-серверов, например, Apache 2.2/PHP-it есть возможность обойти механизм контроля доступа с помощью произвольных строк символов для методов HTTP. Такие веб-сервера, осуществляют обработку запросов, которые не привязаны к конкретным методам HTTP. В отличие от HTTP, где GET запрос обрабатывается только если doGet() определен, некоторые веб-сервера пытаются обработать любые методы, включая неизвестные. Таким образом, заменяя законный метод на произвольный, атакующий может использовать уязвимости в обработке внутренней логики и обойти механизм контроля доступа.
Для проведения атаки вполне подойдет расширение для Firefox «HttpRequester»
Для того, чтобы изучить заголовки вручную, нам понадобится NetCat (является стандартным дистрибутивом для Linux), либо Telnet (входит в состав Windows). Запросы довольно примитивны и выглядят аналогично для обоих способов:
[METHOD] /[index.htm] HTTP/1.1
host: *Ваш хост*
Для того, чтобы изучить заголовки и их реакцию, создадим .txt файлы, в ваших любимых редакторах, со следующим содержимым:
- OPTIONS
OPTIONS /index.htm[*] HTTP/1.1
host: *Ваш хост*
- GET
GET /index.htm[*] HTTP/1.1
host: *Ваш хост*
- HEAD
HEAD /index.htm[*] HTTP/1.1
host: *Ваш хост*
- POST
Код:
POST /index.htm[*] HTTP/1.1
host: *Ваш хост*
- PUT
Код:
PUT /index.htm[*] HTTP/1.1
host: *Ваш хост*
- DELETE
Код:
DELETE /index.htm[*] HTTP/1.1
host: *Ваш хост*
- TRACE
Код:
TRACE /index.htm[*] HTTP/1.1
host: *Ваш хост*
- CONNECT
Код:
CONNECT /index.htm[*] HTTP/1.1
host: *Ваш хост*
nc *Ваш хост* 80 < OPTIONS.http.txt
Для того, чтоб автоматизировать весь процесс достаточно применить следующий bash скрипт, он будет проверять все доступные методы HTTP:
#!/bin/bash
for webservmethod in GET POST PUT TRACE CONNECT OPTIONS PROPFIND;
do
printf "$webservmethod " ;
printf "$webservmethod / HTTP/1.1\nHost: $1\n\n" | nc -q 1 $1 80 | grep "HTTP/1.1"
done
Заключение
Несмотря на то, что каждый метод HTTP потенциально может возвращать различные результаты, есть только один действительный результат для всех, отличных от GET и POST методов - веб-сервер должен либо игнорировать запрос полностью или возвращать ошибку. Любой другой ответ указывает на потенциальную уязвимость. Эти методы должны быть отключены.