Открытое перенаправление (Open Redirect) – это уязвимость в веб-приложениях, когда злоумышленник может ввести пользователей в заблуждение, перенаправив их с одной страницы на другую. В статье расскажу об инструменте Oralyzer, который позволяет, с помощью фаззинга, проверить наличие уязвимости открытого перенаправления на сайте, а также о работе подобного скрипта на Python.
Еще по теме: Поиск уязвимостей в формах загрузки файлов
Уязвимость Open Redirect (Открытое перенаправление)
Открытое перенаправление (Open Redirect) – это уязвимость, которая позволяет удаленному злоумышленнику перенаправить жертв на произвольный урл.
Причина существования этой уязвимости заключается в неправильной обработке данных, предоставляемых пользователем, в файле lib/http/server.py, что приводит к отсутствию защиты от нескольких слешей в начале урла пути. Удаленный атакующий может создать ссылку, которая ведет на доверенный веб-сайт, но при нажатии перенаправляет жертву на произвольный домен.
Статья предназначена для образовательных целей и ориентирована на обучение багхантеров. При участии в программе Bug Bounty необходимо действовать этично и придерживаться установленных правил. Несанкционированный взлом рассматривается как уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Успешное использование этой уязвимости может позволить удаленному атакующему провести фишинговую атаку и украсть потенциально чувствительную информацию.
Использование Oralyzer для поиска уязвимости Open Redirect
Oralyzer (https://github.com/r0075h3ll/Oralyzer) – это скрипт на Python, который проверяет наличие уязвимости открытого перенаправления на сайте, используя методы фаззинга.
Установка Oralyzer:
1 2 |
$ git clone https://github.com/r0075h3ll/Oralyzer.git $ pip install -r requirements.txt |
Использование Oralyzer
Запускаем справку:
1 |
$ python oralyzer.py -h |
Что делает этот инструмент, так это тестирует разные варианты данных (пейлоадов) с адресом целевого сайта.
После проверки сайта python.org мы видим, что тулза обнаружила уязвимость Open Redirect типа «header-based redirection».
Уязвимость Open Redirect и Python
Мы также можем написать свой простой скрипт для обнаружения подобной уязвимости.
С помощью модуля requests, который включает различные пейлоады, чтобы определить, уязвим ли сайт, мы можем проверить код состояния ответа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import requests import random import sys target = input("Введите целевой URL: ") payloads = 'payloads.txt' user_agent = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991', 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; A1-810 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30', 'Mozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0', 'Mozilla/5.0 (PLAYSTATION 3 4.81) AppleWebKit/531.22.8 (KHTML, like Gecko)', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52', 'Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebKit/537.42 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.42', 'Mozilla/5.0 (Windows NT 6.0; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko)', 'Mozilla/5.0 (PlayStation 4 5.01) AppleWebKit/601.2 (KHTML, like Gecko)'] header = {'User-Agent': random.choice(user_agent)} |
В предыдущем коде мы импортировали используемые модули и объявили список user agents, которые мы могли бы использовать для запросов.
Затем мы продолжаем, объявляя функцию, которая будет разбирать урл и проверять для каждого пейлоада код состояния, возвращенный ответом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
def test_open_redirect(): print('Загрузка пейлоадов: ' + payloads) f = open(payloads, 'r') for line in f.readlines(): payload = line.strip('\n') try: final = target + "/" + payload print(final) response = requests.get(final, headers=header) for resp in response.history: print(resp.status_code) if resp.status_code == 302 or resp.status_code == 301: print(resp.status_code, resp.url + " [!] Уязвимость для Open Redirect") else: print(resp.url + '[-] Неуязвимо') except Exception as e: print("Недопустимый URL: " + str(e)) sys.exit() except IOError: print(IOError) test_open_redirect() |
При выполнении скрипта, если код ответа – 301 или 302, мы имеем дело с уязвимостью Open Redirect.
Уязвимость Open Redirect возникает, когда приложение позволяет пользователю контролировать перенаправление или пересылку на другой урл. Если приложение не проверяет ненадежные входные данные пользователя, злоумышленник может предоставить адрес, который перенаправляет ничего не подозревающую жертву с законного домена на фишинговый сайт злоумышленника.
Защита от Open Redirect
Защита от уязвимости открытого перенаправления включает в себя ряд мер и практик, которые разработчики могут использовать, чтобы предотвратить возникновение этой уязвимости и обеспечить безопасность веб-приложений.
Вот несколько способов защиты от уязвимости Open Redirect:
- Осуществляйте строгую проверку и очистку пользовательских входных данных, особенно перед использованием их для формирования урлов перенаправления.
- Разрешайте перенаправления только на заранее определенные и доверенные домены. Это может помочь избежать случайных или нежелательных перенаправлений.
- Используйте параметры запроса для передачи информации, а не включайте ее в путь урл. Это позволит вам более гибко управлять перенаправлениями и уменьшить риски.
- Проверяйте урлы путей на наличие лишних слешей или других нежелательных символов, которые могли бы быть использованы для обхода проверок.
- Вместо абсолютных урлов используйте относительные пути, чтобы уменьшить риски нежелательных перенаправлений на внешние домены.
- Обеспечьте аутентификацию и авторизацию для доступа к чувствительным страницам, чтобы злоумышленники не могли перенаправлять пользователей на них.
- Регулярно обновляйте свои приложения и библиотеки, чтобы закрыть известные уязвимости. Также проводите аудит кода для обнаружения потенциальных уязвимостей.
- Используйте специализированные инструменты для сканирования уязвимостей, такие как Oralyzer, чтобы обнаруживать и устранять уязвимости открытого перенаправления.
Соблюдение этих практик поможет снизить риски уязвимостей открытого перенаправления и обеспечить более надежную защиту ваших веб-приложений.
ПОЛЕЗНЫЕ ССЫЛКИ: