D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
"vulnerable": true
Эта статья посвящена захвату поддомена и простой автоматизации.Содержание
- Что такое домен?
- Ближе к теме, что такое захват поддомена?
- Что за странная атака?
- Лаборатории
- Инструмент
- Zaxvat (Захват)
Что такое домен?
Домен - это адрес, который используется для доступа к веб-сайтам. Максимальная длина доменного имени составляет 253 символа. Интервалы между точками не могут превышать 63 символов. Например, "www.xss.is " имеет три метки: "www" (3 символа), "xss" (3 символа) и "is" (2 символа) плюс две точки. Итак, общая длина равна 3+3+2+2=10 символам.Что такое DNS (Domain Name System)?
Система доменных имен - это система присвоения имен любому ресурсу, подключенному к сети. Основная цель DNS - преобразовать имена в IP-адреса, которые используются для идентификации друг друга в сети.
Что такое TLD (Top-Level Domain) / ccTLD (Country Code Top-Level Domain)k?
Домен верхнего уровня (TLD) - это последняя часть доменного имени, которая начинается после последней точки. Например: .com; .org; .int
Домен верхнего уровня с кодом страны (ccTLD) - это домены верхнего уровня, принадлежащие странам. Например: .ru, .is, .us
Домены типа .com.ru принадлежат России. Как указано выше, последняя часть идентифицирует TLD.
Что такое поддомен?
Поддомен - это подмножество более крупного домена. Он создается путем добавления префикса к основному доменному имени, разделенного точкой. Самый известный поддомен - "www".
Какие записи DNS существуют?
Вот некоторые основные записи.
A (Адрес): Сопоставляет домен с IPv4-адресом.
AAAA (IPv6-адрес): Сопоставляет домен или поддомен с IPv6-адресом.
CNAME (Canonical Name): CNAME используется для создания псевдонима. Это позволяет одному домену указывать на другой домен, совместно используя его записи DNS
MX (Mail Exchange): Указывает почтовые серверы, ответственные за получение электронной почты от имени домена.
TXT (текст): Содержит текстовую информацию. Он часто используется для различных целей, таких как проверка владения доменом или для предоставления информации внешним источникам.
Обычно, когда мы настраиваем веб-сайт, мы сначала добавляем запись A, которая является IP-адресом нашего сервера, затем добавляем другие записи по мере необходимости. Например, чтобы доказать Google, что домен принадлежит нам, мы добавляем запись TXT.
В случае с Cloudflare распространенной ошибкой является сначала добавление IP реального сервера в DNS. При настройке cloudflare вы должны сначала добавить записи cloudflare в свой DNS, а затем добавить свой IP-адрес через cloudflare, чтобы по пути не произошла утечка IP-адреса вашего реального сервера.
Ближе к теме, что такое захват поддомена?
Из записей, которые вы узнали выше, давайте проверим возможные случаи. Итак, компания создала, скажем, поддомен для блога. Пусть это будет "blog.xss.is". Запись A показывает IP-адрес. Если в один прекрасный день блог закроется и кто-то каким-то образом сможет получить этот IP-адрес. Тогда этот человек может разместить что угодно на своем сервере, и это будет показано в "blog.xss.is". Этот случай очень маловероятен и происходит только в том случае, если записи не изменились после закрытия блога и если каким-то образом кто-то смог получить IP-адрес в записи A.Существует 2 (частых) способа использования основного домена и поддомена www.
Первый способ: Перенаправление, когда вы открываете xss.is , вы перенаправляетесь, например, на www.xss.is. В этом случае записи DNS, очевидно, отличаются.
Второй способ: они одинаковы. Здесь используется запись CNAME, независимо от того, открываете ли вы xss.is или www.xss.is страница будет такой же, как при использовании CNAME.
Первый способ используется в большинстве мест, например google.com. Второй способ не так распространен, он есть в ilo.org например.
Независимо от того, открываете ли вы https://ilo.org/global/lang--en/index.htm или https://www.ilo.org/global/lang--en/index.htm , вы получите тот же результат.
Во-первых, мы проверяем записи ilo.org
Изображение [1]
Теперь мы проверяем www.ilo.org и видим, что у него есть CNAME, указывающий на www2019.ilo.org - у которого запись A такая же, как в ilo.org
Изображение [2]
Изображение [3]
Теперь, когда кто-то пытается получить доступ к "www.ilo.org," распознаватель DNS сначала просматривает запись CNAME, а затем использует связанное с ней каноническое имя "www2019.ilo.org " чтобы получить соответствующий IP-адрес.
Что за странная атака?
Таким образом, это зависит исключительно от того факта, что кто-то забыл изменить записи, а другой может просто каким-то образом получить эти записи?На самом деле, да...Компании используют сторонние сервисы, такие как Wordpress, AWS, Airee и другие. Они добавляют записи CNAME. Теперь представьте, что компания больше не использует поддомен, и они просто удаляют свой профиль или удаляют домен из своего профиля (aws/airee), поскольку он больше не нужен, но забывают удалить запись CNAME. Хакер просто зарегистрируется на AWS и добавит домен, так как будто он принадлежит хакеру.
Почему сервисы не запрашивают подтверждение, как это делает Google с TXT записью?
Они это делают, но просят добавить запись CNAME, которая уже была добавлена компанией. Единственное, что нужно сделать хакеру, это зарегистрироваться, добавить домен и вуаля.
Лаборатории
Для этой атаки нет лабораторий. Только случаи, которые произошли. Давайте начнем с моего случая и продолжим дальше. Итак, как обычно, я стажер, которому нечего делать, и я вместе с одним из моих приятелей. Итак, он приходит ко мне и говорит: "Чувак, наш поддомен взломали и проиндексировали" (как в американских киношках). С того дня и по сей день я ненавижу слово "индекс". Вы можете спросить меня "Где ваши старшие хакеры?", вы мне не поверите, но у ред тима был отпуск, за исключением стажеров. Итак, это были 2 стажера-пентестера и синие (blue team). Мы подумали, что кто-то нашел способ загрузить файл index.html, потому что наши серверы не были взломаны, и это был простой блог-сайт. Проблема в том, что на сайте была только 1 страница с текстом "взломан", а админ-панель даже не была доступна. Итак, мы проверили записи и поняли, что веб-сайт был размещен на стороннем сервисе с указанием CNAME на него. Просто отправили запрос чтобы те убрали запись и проблема исправлена.Проблемой в большинстве компаний является отсутствие коммуникации между отделом разработки, операционной деятельностью и службой безопасности. Вот причина, по которой, даже если мы являемся важной частью компании, мы понятия не имели, где размещается этот домен.
Меньше обо мне, больше о делах. В hackerone есть тонны отчетов о захвате поддоменов, а также инструментов и т.д. Давайте проверим 2 случая и инструмент.
История захвата турецкого поддомена Mercedes, который индексируется Google.
Так.... Мы гуглим “Mercedes Subdomain Takeover”
Изображение [4]
Изображение [5]
Действительно ли основной домен принадлежит Mercedes?
Изображение [6]
Как это произошло?
Компания использовала Microsoft Azure и, похоже, после того, как поддомен стал бесполезен, перестала его использовать и, вероятно, удалила домен из учетной записи. Хакер зарегистрировал и добавил домен. Вуаля
Изображение [7]
Обнаружит ли это наш инструмент?
Изображение [8]
Захват поддомена, где уязвимость была обнаружена в сторонней компании.
Хакер смог завладеть доменом info.hacker.one. В этом случае - https://hackerone.com/reports/202767 у стороннего сервиса был 0day, который был обнаружен хакером. Хакер обнаружил уязвимость в их "API, который позволяет любому пользователю претендовать на любой домен с записью DNS, указывающей на -> unbouncepages.com" Я расскажу вам, почему я также привел этот короткий
пример.
Инструмент
Я пишу это не для того, чтобы объяснить, почему мой инструмент "круче" других. Я пишу это, чтобы объяснить разницу, которую я сделал, потому что я ленивый и не разработчик.SubJack - https://github.com/haccer/subjack
Fingerprints - это список, который помогает обнаружить уязвимость, последний раз обновлявшийся в этом репозитории 3 года назад. Он устарел. Кроме того, fingerprints, которые они использовали, относятся не к записям, а к содержимому сайта при открытии домена. Содержимое может меняться со временем, они могут оставить пустую страницу и просто код статуса 500.
Изображение [9]
Изображение [10]
ItsOver - https://github.com/SaadAhmedx/Subdomain-Takeover
Выглядит великолепно, написано на python и обновлено 6 м есяцев назад. Итак, я проверил код, к сожалению, он использует постоянные fingerprint, которые проверяют содержимое веб-сайта, но не записи DNS. Та же логика и, возможно, "ошибка", что и выше,
Изображение [11]
Изображение [12]
SubOver - https://github.com/Ice3man543/SubOver
Обновлено 5 лет назад? Проходим мимо - Они также используют постоянный список fingerprint.
Изображение [13]
Zaxvat (Захват)
Ссылка: https://xss.is/threads/102053/Обновления от - https://github.com/EdOverflow/can-i-take-over-xyz - так что, даже если я умру от передозировки кофеина, мой инструмент будет в актуальном состоянии. Единственный случай, в котором он перестанет работать должным образом, - это если "can-i-take-over-xyz" будет закрыт. И даже в этом случае вы можете просто добавить URL-адрес в любого другого файлa .json, и он будет извлекать данные оттуда.
Спойлер: Техническая часть
Функция main служит точкой входа в программу, первоначально проверяя правильное количество аргументов командной строки. В случае недостаточного количества аргументов он выводит правильное использование и завершает работу программы. Впоследствии основная функция извлекает fingerprint с помощью функции getFingerprints и проверяет наличие любых ошибок. После этого выводится сообщение, указывающее на процесс проверки уязвимости программой для указанного домена, и вызывается функция checkVulnerability.
Функция getFingerprints, ответственная за получение отпечатков пальцев, выполняет запрос к файлу JSON. Затем тело ответа размешивается в фрагмент структур отпечатков пальцев с использованием пакета "encoding/json".
Функция checkVulnerability, принимающая домен и фрагмент отпечатков пальцев в качестве входных данных, инициируется путем извлечения CNAME для указанного домена с помощью функции getCNAME. Впоследствии он выполняет итерацию по каждому отпечатку пальца, сравнивая CNAME домена со значениями CNAME в отпечатках пальцев. При обнаружении совпадения он выводит информацию об уязвимой службе, включая название службы, статус, обсуждение и документацию.
Функция getCNAME, использующая пакет "net", выполняет поиск в DNS для получения записи CNAME для указанного домена.
Обсуждение - это обсуждение, в ходе которого люди делятся своим опытом работы с сервисом и пытаются понять, уязвим ли он для захвата поддомена или нет. Также в будущем, если однажды сервис больше не будет уязвим, люди напишут об этом в разделе "обсуждение", и отпечатки пальцев будут изменены.