Привет, юный безопасник! Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "HTTP - Open redirect". За решение задачки дают 10 баллов, низкая сложность.
Нам предлагают найти способ выполнить редирект на непредусмотренный владельцем сайта домен:
Find a way to make a redirection to a domain other than those showed on the web page.
Используется уязвимость под названием "Open Redirect" или ""Unvalidated Redirects and Forwards".
Open Redirect Vulnerabilities — уязвимость web-сайта, позволяющая путём манипуляции параметров в URL перенаправить пользователя на ресурс, непредусмотренный разработчиком. В результате злоумышленник может отправить жертве письмо со ссылкой на один сайт, а в результате редиректа жертва попадёт на другой сайт.
Ссылки
Решение
Переходим на страницу задания:
http://challenge01.root-me.org/web-serveur/ch52/
Видим три ссылки.
Ссылки ведут на популярные сайты Facebook, Twitter, Slack. Заглянем в код страницы:
Мы видим, что при клике на кнопку пользователь попадает на ту же страницу, при этом в URL передаётся два параметра:
- url — ссылка на сайт
- h — некий хеш
Проверим, что хеш уникален для каждого URL. Возьмём ссылку:
view-source:http://challenge01.root-me.org/web-serveur/ch52/?url=https://slack.com&h=e52dc719664ead63be3d5066c135b6da
Подменим в ней URL, например, на https://google.com:
view-source:http://challenge01.root-me.org/web-serveur/ch52/?url=https://google.com&h=e52dc719664ead63be3d5066c135b6da
Смотрим, что получилось.
Incorrect hash! Что же, мы видим, что админ действительно проверяет хеши.
Нам остаётся попробовать сгенерировать хеш для google.com, для этого проверим, что за алгоритм хеширования использовал админ. Находим первый попавшийся инструмент для хеширования, например, http://www.fileformat.info/tool/hash.htm. В качестве исходной строки используем "https://slack.com", генерируем хеши.
Видим, что MD5 хеш совпадает с параметром "h" у ссылки — e52dc719664ead63be3d5066c135b6da. На этой же странице генерируем хеш для "https://google.com".
Получили 99999ebcfdb78df077ad2727fd00969f. Подставим его в нашу ссылку:
view-source:http://challenge01.root-me.org/web-serveur/ch52/?url=https://google.com&h=99999ebcfdb78df077ad2727fd00969f
Well done, the flag is e6f8a530811d5a479812d7b82fc1a5c5
Флаг найден. Валидируем.
Well done, you won 10 Points. Флаг принят.
Безопасность
- Если вы выполняете редирект на сторонние ресурсы, то вам необходимо иметь базу разрешённых доменов или ссылок.
- Нет смысла использовать в качестве источника хеша данные, которые лежат в открытом доступе. Вы должны использовать секрет.
- Динамическая генерация ссылок в зависимости от параметров URL — так себе идея в целом.