Taken
Захват поддоменов с помощью висящих эластичных IP-адресов AWS и рабочий POC для Subdomain Takeover.
Что можно сделать с Subdomain Takeover:
- Кража куки, если куки установлены с атрибутом домена, указывающим на захваченный поддомен.
- CORS-запросы, если Access-Control-Allow-Origin установлен на захваченный поддомен.
- Перенаправление OAuth для получения кода авторизации, если захваченный поддомен находится в белом списке.
- CSP-политики для XSS, если CSP-политика добавляет этот поддомен в белый список.
- ClickJacking, если X-Frame-Options добавляет этот поддомен в белый список.
- Подделка писем, если SPF-запись добавляет этот поддомен в белый список.
Идея автоматизации следующая:
- Получить поддомены.
- Выполнить обратные запросы, чтобы сохранить только AWS-IP.
- Перезапускать EC2-экземпляр каждую минуту, при этом публичный IP меняется при каждом перезапуске. Сопоставлять его с существующим списком IP-адресов поддоменов — и у вас есть рабочий POC захвата поддоменов.
- Отправлять уведомление по электронной почте сразу после захвата поддомена.
Цитирование
Пожалуйста, цитируйте, если вы используете это программное обеспечение в своих исследовательских работах, статьях и т.д.
@software{Agrawal_Taken_AWS_Subdomain_2020,
author = {Agrawal, Vaibhav},
month = oct,
title = {{Taken: AWS Subdomain TakeOver at Scale}},
url = {https://github.com/In3tinct/Taken},
version = {1.0},
year = {2020}
}
Предварительные требования
- Учетная запись AWS.
- Знание Linux и Bash-скриптов.
Используемые технологии/фреймворки
Создано с помощью
Возможности
- Сбор поддоменов и обратный поиск для нацеливания только на AWS IP.
- Смена IP-адресов путём перезапуска EC2-экземпляра до тех пор, пока один из них не совпадёт с IP-адресом из списка.
- При совпадении этот IP/хост добавляется в файл белого списка, чтобы его больше не перезапускали, и отправляется уведомление по электронной почте.
Подробные шаги по использованию
- Создайте один экземпляр t2.medium (атакующая машина), бесплатно 24/7.
- Создайте 5–10 экземпляров типа t3a.nano, вероятно, самых дешёвых (чем больше, тем выше шансы, но и больше расходы — около $60/месяц за 10 машин) в одном или нескольких регионах. Это занимает 5 минут. Группа безопасности SG должна быть открыта только для вашего публичного IP.
- Создайте ключи API AWS для остановки/запуска экземпляров.
- Подключитесь по SSH к атакующей машине.
- Установите утилиту уведомлений по электронной почте SSMTP.
https://www.digitalocean.com/community/questions/how-to-send-emails-from-a-bash-script-using-ssmtp
- Установите инструменты subfinder и sublist3r.py для сбора поддоменов. (Или любые другие инструменты, но тогда их нужно будет добавить в скрипт сбора поддоменов.)
Выполните следующие шаги для их настройки:
https://github.com/aboul3la/Sublist3r
https://github.com/projectdiscovery/subfinder
- Клонируйте репозиторий Taken и откройте screen-сессию для запуска скрипта сбора поддоменов.
Если вы не знаете, как использовать screen — https://linuxize.com/post/how-to-use-linux-screen/
- Создайте текстовый файл со всеми доменами, которые вы хотите атаковать, сохраните его как "alldomains" в той же директории, а затем запустите скрипт сбора поддоменов. Этот скрипт использует subfinder и sublist3r.py. Он сгенерирует список всех поддоменов для одного или нескольких доменов в формате "subdomain:IP" в каждой строке. Впоследствии он будет использоваться для сопоставления и уведомления.
- Откройте другую screen-сессию и экспортируйте учётные данные AWS в этой сессии.
Экспорт ключей AWS:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE Ключ доступа для вашей учётной записи AWS.
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Секретный ключ доступа для вашей учётной записи AWS.
Запустите скрипт захвата в другой screen-сессии. Вы также можете запустить его для каждого региона в отдельной screen-сессии (см. скриншот ниже).
— каждый регион AWS использует свои подсети IP. Для атаки на компании, расположенные в США, высока вероятность, что они работают в одном из регионов США, но также могут иметь активы в других регионах, например, в Ирландии, Франкфурте и т.д. Поэтому вместо запуска 10 активов в одном регионе попробуйте запустить 5 активов в регионе, где находится штаб-квартира компании, и ещё 5 в других регионах.
Пример screen-сессии:
Уведомление по электронной почте:

Захватили поддомен — что дальше:
Подключитесь по SSH к этому хосту, создайте простой HTML-файл и запустите Python-сервер — и у вас есть работающий POC.
(В следующем релизе я планирую автоматизировать и это.)
Запуск в массовом порядке
Я просканировал все публичные программы на HackerOne и Bugcrowd, а также топ-500 SaaS-компаний Forbes/SaaS, собрал их поддомены и начал атаку. В течение 24 часов мне удалось захватить 3 поддомена. Всего работало 10 экземпляров в 3 разных регионах. Процент успеха сильно зависит от количества запущенных экземпляров. Поскольку с помощью скрипта вы меняете около 1440 IP-адресов за 24 часа, это даёт около 14 400 IP-адресов с 10 экземплярами за 24 часа.
Ссылки
Инструменты, использованные для сбора поддоменов:
https://github.com/projectdiscovery/subfinder
https://github.com/aboul3la/Sublist3r
Участие
- Сообщайте об ошибках.
- Предлагайте улучшения.
- Предлагайте будущие расширения.
Будущие расширения
- Создание EC2-экземпляров с помощью того же скрипта.
- Добавление автоматического развёртывания HTTP-сервиса с помощью AWS Beanstalk.
Лицензия
GNUV3 © [In3tinct]