Атаки на сессию. Часть 3. Open Redirect.
Глава 3. OPEN REDIRECT.
_________________________________________________________________________________
§ 3.1. ЧТО ТАКОЕ OPEN REDIRECT.
3.1.1) OPEN REDIRECT (ОТКРЫТЬ ПЕРЕНАПРАВЛЕНИЕ) — это атака, при которой злоумышленник перенаправляет жертву на свой веб-сайт, злоупотребив функцией перенаправления законного веб-сайта. Эта атака возможна тогда, когда функция перенаправления не выполняет никакой проверки сайтов, на которые указывает перенаправление.
Чтобы перенаправить жертву на другой сайт, злоумышленнику нужно указать адрес своего сайта в URL-адресе перенаправления законного сайта и заставить жертву посетить этот вредоносный URL-адрес.
________________________________________________________________ $red = $_GET['url']; header("Location: " . $red); ________________________________________________________________
- $red = $_GET['url']; — объявляется переменная red, которая получает свое значение из параметра с именем url. Команда $_GET является суперглобальной переменной PHP, которая позволяет нам получить доступ к значению URL-параметра.
- header("Location: " . $red); — создаётся заголовок ответа Location, который указывает URL-адрес на который нужно перенаправить страницу. Для location задается значение red без какой-либо проверки. Здесь мы сталкиваемся с уязвимостью Open Redirect.
Вредоносный URL-адрес, который злоумышленник отправит, используя уязвимость Open Redirect, будет выглядеть следующим образом:
trusted.site/index.php?url=https://evil.com
3.1.2) URL-ПАРАМЕТРЫ, ГДЕ МОЖЕТ СКРЫВАТЬСЯ OPEN REDIRECT:
- ?url=
- ?link=
- ?redirect=
- ?redirecturl=
- ?redirect_uri=
- ?return=
- ?return_to=
- ?returnurl=
- ?go=
- ?goto=
- ?exit=
- ?exitpage=
- ?fromurl=
- ?fromuri=
- ?redirect_to=
- ?next=
- ?newurl=
- ?redir=
§ 3.2. ПРИМЕР АТАКИ OPEN REDIRECT.
Например, у нас есть есть веб-приложение, где пользователи могут поменять свой пароль, отравив свою электронную почты для сброса пароля:
Веб-приложение использует функцию перенаправления на адрес /complete.html, для отправки туда запроса с адресом электронной почты вместе с CSRF-токеном:
http://website.com/?redirect_uri=/complete.html&token=hpkp010mj4j7c5a31d6ibe4pvb
Если отправить свой адрес электронной почты, то веб-приложение перенаправит нас на страницу /complete.html, где мы заметим отправленный POST-запрос на эту страницу:
Нам нужно проверить, выполняет ли веб-приложение перенаправление без какой-либо проверки (есть ли в веб-приложении уязвимость Open Redirect).
ЭТАП 1. Запустить прослушиватель Netcat на нашем компьютере:
ЭТАП 2. Отредактировать URL-адрес перенаправления, который мы нашли выше в веб-приложении следующим образом:
http://website.com/?redirect_uri=http://IPнашегоКомпьютера:1337&token=hpkp010mj4j7c5a31d6ibe4pvb
Мы заменили страницу перенаправления /complete.html на наш IP-адрес.
ЭТАП 3. Заставить жертву Джули Роджерс созданный выше URL-адрес.
Если жертва посетит этот адрес и введёт там свой адрес электронной почты, то мы поймаем соединение с нашим прослушивателем:
Следовательно веб-приложение перенаправляет пользователей на наш адрес без какой-либо проверки, а значит веб-приложение уязвимо для Open Redirect!
§ 3.3. ЗАЩИТА ОТ OPEN REDIRECT.
- Не использовать URL-адреса, предоставленные пользователем (или части URL-адреса), и строго проверяя URL-адреса.
- Если невозможно избежать пользовательского ввода, то нужно убедиться, что предоставленное значение допустимо, подходит для веб-приложения и разрешено пользователю.
- Рекомендуется, чтобы все вводимые данные назначения сопоставлялись со значением, а не с фактическим URL-адресом или частью URL-адреса, и чтобы код на стороне сервера преобразовывал это значение в целевой URL-адрес.
- Очищать пользовательский ввод, создав список доверенных URL-адресов (списки хостов или регулярное выражение).
- Заставить все перенаправления сначала проходить через страницу, которая уведомляет пользователей о том, что они перенаправляются с нашего сайта, требуя щелкнуть ссылку для подтверждения (безопасное перенаправление).