С этим секретным трюком хакеры зарабатывают ? $XX,000+ — теперь твоя очередь.

Введение
При Internationalized Domain Name (IDN) homograph атаках используются символы разных языков, которые выглядят практически одинаково, например, латинская «a» и кириллическая «а». На первый взгляд результат выглядит как обычный домен или адрес электронной почты, но на самом деле происходит подмена на похожие, но технически разные Unicode символы.
Например:
Электронная почта в Unicode кодировке: аdmin@example.com
В формате Punycode: xn — dmin-7cd@example.com
Когда поставщики услуг электронной почты или аутентификации, не могут должным образом различать эти визуально похожие символы, это может привести к серьёзным уязвимостям, таким как: захват учётных записей при регистрации, сброс паролей или даже обход защиты 2FA, что представляет высокий риск, если не принять надлежащих мер.
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер
Разница между атаками Punycode и атаками с использованием омографов IDN
Что такое Punycode? Punycode — это способ представления Unicode символов с использованием только набора ASCII символов (используется в системах, которые напрямую не поддерживают Unicode, например, в системе доменных имен).
Что такое атаки с использованием омографов IDN?
Эти атаки обманывают систему (а иногда и пользователя), заставляя её думать, что две визуально похожие строки одинаковы, но на самом деле они совершенно разные.
Пример:
"admin@example.com" vs "аdmin@example.com" (Cyrillic "а")
Выглядят одинаково, не правда ли?
Необходимые лабораторные настройки и инструменты
Burp Suite — для перехвата и изменения HTTP-запросов
Burp Collaborator — ваш SMTP/почтовый сервер
Punycode Generator — для кодирования Unicode символов
Для этого эксперимента не требуется IDN домен или SMTP-сервер. Я смоделирую атаку только с помощью Burpsuite.
Пошаговое руководство по эксплуатации
Давайте разберём всё шаг за шагом, от простой регистрации до полноценного захвата аккаунта.
Шаг 1: Регистрация с использованием обычного адреса электронной почты
Перейдите на любой сайт, поддерживающий регистрацию по электронной почте (например, на любую страницу входа), и зарегистрируйте новую учётную запись. Для получения электронной почты мы будем использовать Burp Collaborator, который действует как ваш поддельный SMTP-сервер.
security@gmail.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com

Проверка работоспособности учётной записи
После регистрации войдите в систему, используя те же учётные данные, чтобы убедиться, что учётная запись работает должным образом, а затем выйдите из неё.

Шаг 2: Использование Punycode в электронной почте и повторная регистрация
Мы попробуем снова зарегистрироваться, но на этот раз будем использовать Punycode символы в адресе электронной почты. Вы можете воспользоваться созданным мной скриптом. Он покажет все доступные Punycode символы вместе с их кодировками. Просто введите любой символ, который хотите преобразовать, и скрипт сгенерирует Punycode.


Видите, я просто заменил букву «a» в домене электронной почты на «à», используя созданный мной Punycode генератор. Вы также можете проверить результат с помощью любого онлайн Punycode-декодера, например, с сайта Punycoder.

Шаг 3: Перехват и замена Punycode через Burp
Важное замечание: браузеры, такие как Chrome, автоматически кодируют специальные символы, что делает этот трюк невозможным. Поэтому вам нужно использовать Burp Suite, чтобы перехватить запрос и вручную заменить поле адреса электронной почты на адрес вашей Punycode версии.

Наблюдайте за ответом
Если в ответе указано что-то вроде «Email already exists», это означает, что приложение после нормализации воспринимает исходный адрес и адрес в формате Punycode как одно и то же. Это явный признак неправильной настройки и потенциальной уязвимости.

Шаг 4: Выполните сброс пароля через Punycode-адрес электронной почты
Теперь перейдите на страницу «Forgot Password» или страницу сброса пароля. Введите Punycode версию адреса электронной почты и выполните сброс через Burp Suite, чтобы избежать кодирования символов.
security@gmàil.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com


Шаг 5: Захват учётной записи
Отправьте запрос, и в Burp Collaborator вы увидите SMTP-обращение со ссылкой для сброса пароля. Скопируйте эту ссылку, откройте её в браузере и сбросьте пароль.


Теперь попробуйте войти в систему еще раз, но на этот раз с использованием исходного адреса электронной почты (не в Punycode формате), и нового пароля, который вы только что установили.


И... бац! Вы только что захватили аккаунт. Разве это не один из самых чистых и опасных методов захвата аккаунта, которые вы когда-либо видели? Никакого взаимодействия с пользователем, никакого фишинга, никаких переходов по ссылкам. Просто грамотное использование адресов с punycode. Вот почему это считается критической уязвимостью, и программы платят такие высокие вознаграждения за её обнаружение.
Продвинутый метод: punycode в поле имени пользователя
Мы уже рассмотрели, как нормализация электронной почты на уровне домена может привести к захвату аккаунта. Но что, если уязвимость кроется в имени пользователя? Этот метод ещё более коварен, поскольку большинство разработчиков не проверяют должным образом эту часть адреса, особенно если она содержит Unicode символы.
Как это работает:
1. На этот раз зарегистрируйтесь, используя имя пользователя, модифицированное с помощью Punycode, например:
ṡecurity@gmail.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com
2. Снова используйте Burp Suite для перехвата и изменения запроса, поскольку браузеры по умолчанию кодируют Unicode символы.
3. Если сервер примет этот адрес и зарегистрирует учётную запись — это первая победа.
4. Затем перейдите к форме «forgot password» и на этот раз введите оригинальную версию (без Punycode):
security@gmail.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com
5. Если вы получили письмо о сбросе пароля в Burp Collaborator, это значит, что сервер считает обе учётные записи одинаковыми.
После сброса пароля по полученной ссылке вы сможете войти, используя исходный адрес электронной почты. Это простой и быстрый захват учётной записи, и он столь же эффективен.
? Совет по обходу 2FA: Если сайт использует 2FA, а приложение неправильно обрабатывает нормализацию электронной почты (например, обрабатывает gmáil.com как gmail.com), злоумышленник может зарегистрироваться как victim@gmáil.com, настроить 2FA, а затем использовать свой собственный код 2FA для входа в victim@gmail.com.
Смягчение последствий: как разработчики могут это предотвратить
Обеспечьте строгую проверку адресов электронной почты. Разрешите использовать только ASCII символы в полях ввода адресов электронной почты (например, используя регулярные выражения или библиотеки очистки входных данных).
Обеспечьте нормализацию адресов электронной почты. Преобразуйте Unicode в ASCII (например, используя IDN.toASCII() или аналоги) и применяйте нормализацию во всех процессах.
Блокируйте IDN и Punycode, если они не требуются. Отклоняйте адреса, содержащие домены с префиксом Punycode (например, xn — example).
Проверяйте логику в процессах регистрации, входа и сброса пароля. Убедитесь, что используете одинаковую логику во всех процессах, чтобы избежать несоответствий и обходов.
Reference
Если вы хотите глубже разобраться в том, как работает эта уязвимость, включая особенности бэкенда и детали нормализации, настоятельно рекомендую ознакомиться с подробной статьей команды Voorivex. Они проделали отличную работу, подробно разобрав всю техническую схему (https://blog.voorivex.team/puny-code-0-click-account-takeover).
Вы также можете посмотреть это видео, в котором я показал всю практическую сторону этого метода: https://youtu.be/Cj1sOFHDClM
Заключение
Атаки на IDN-адреса с использованием Punycode — один из самых интересных, малоиспользуемых и мощных способов захвата аккаунтов. Используя правильные инструменты и подход, вы сможете обнаружить серьёзные уязвимости, которые многие упускают из виду.
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер