Что такое парсинг сертификатов?

Анализ сертификатов — это способ проведения разведки веб-хакеров, когда злоумышленник нацелен на организацию. Цель состоит в том, чтобы собрать информацию об организации и расширить пространство для атаки путем перечисления всех возможных доменов и поддоменов, принадлежащих организации. Один из методов перечисления доменов и субдоменов заключается в использовании SSL-сертификатов, используемых организацией. Существует несколько онлайн-баз данных, таких как crt.sh а также sslmate который можно использовать для перечисления сертификатов, выданных для доменов, принадлежащих организации. Более того, если мы посмотрим на Subject Alternative Name сертификата, мы могли бы перечислить другие имена хостов, для которых применяется сертификат.


Что такое domain-recon?

domain-recon — это инструмент командной строки с открытым исходным кодом, написанный на Rust, который автоматизирует анализ сертификатов. Оно использует [crt.sh]( база данных для получения информации о сертификатах, выданных для домена и всех его поддоменов. Он извлекает все имена хостов из Common Name а также Matching Identities поля, результатом которого будет список доменов, требующих дальнейшей фильтрации. В списке можно выделить следующие типы доменов:

  • зарегистрированные домены, которые могут быть разрешены как IP-адреса IPv4 или IPv6;
  • незарегистрированные домены;
  • подстановочные домены, доменные имена, содержащие подстановочный знак (*), Например: *.example.com. Подстановочные знаки используются для защиты нескольких имен поддоменов (хостов), относящихся к одному и тому же базовому домену.

domain-recon отфильтровывает домены с подстановочными знаками из списка и пытается выполнить разрешение домена для каждого домена без подстановочных знаков. Он отбрасывает все незарегистрированные доменные имена и отображает список только с «действительными» доменными именами.

В случае доменов с подстановочными знаками он попытается угадать возможные поддомены. Это достигается путем принятия список слов в качестве ввода и замены подстановочных знаков на записи из списка. Чтобы определить, какие доменные имена зарегистрированы, он пытается выполнить разрешение домена для каждой новой записи и отображает новый список с успешными запросами.


Пример использования

Исходный код для domain-recon инструмент можно найти на Гитхаб. Исполняемые файлы создаются и выпускаются для всех операционных систем Linux, Mac и Windows, и их можно загрузить с веб-сайта выпускает.

Список всех доменов и поддоменов для dev.to:

domain-recon -d dev.to -f words.txt
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вывод которого будет примерно таким:

Fetching certificates...
Extracting domains....
sni.cloudflaressl.com A 104.22.63.243, 172.67.27.61, 104.22.62.243
dev.to A 151.101.194.217, 151.101.2.217, 151.101.66.217, 151.101.130.217
sni174710.cloudflaressl.com A 172.67.27.61, 104.22.63.243, 104.22.62.243
www.jobs.dev.to A 188.114.97.13, 188.114.96.13
jobs.dev.to A 188.114.97.13, 188.114.96.13
t2.shared.global.fastly.net A 151.101.2.217, 151.101.66.217, 151.101.130.217, 151.101.194.217
2020.dev.to A 3.67.255.218, 34.141.28.239
storybook.dev.to A 3.67.234.155, 3.67.153.12
shop.dev.to A 23.227.38.74
status.dev.to A 52.215.192.133
docs.dev.to A 34.141.11.154, 34.159.58.69
customer-service.status-ovhcloud.com A 52.215.192.131
status-beta.sailpoint.com A 52.215.192.132
itstatus.stmonicatrust.co.uk A 52.215.192.131

Expanding wildcards...
admin.forem.com A 35.198.80.163, 34.141.28.239
docs.forem.com A 34.141.28.239, 34.141.48.9
demo.forem.com A 3.19.109.223, 3.135.110.253, 3.13.138.118
www.forem.com A 34.251.201.224, 54.194.170.100, 34.253.101.190
www.dev.to A 188.114.97.13, 188.114.96.13
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы можем не раскрывать подстановочные знаки, не указывая список слов:

domain-recon -d dev.to
Войти в полноэкранный режим

Выйти из полноэкранного режима

Выход:

Fetching certificates...
Extracting domains....
jobs.dev.to A 188.114.97.13, 188.114.96.13
sni174710.cloudflaressl.com A 104.22.62.243, 172.67.27.61, 104.22.63.243
dev.to A 151.101.194.217, 151.101.2.217, 151.101.66.217, 151.101.130.217
www.jobs.dev.to A 188.114.97.13, 188.114.96.13
shop.dev.to A 23.227.38.74
sni.cloudflaressl.com A 104.22.63.243, 172.67.27.61, 104.22.62.243
storybook.dev.to A 3.67.255.218, 3.67.153.12
docs.dev.to A 34.141.11.154, 34.159.132.250
customer-service.status-ovhcloud.com A 52.215.192.133
status-beta.sailpoint.com A 52.215.192.133
t2.shared.global.fastly.net A 151.101.2.217, 151.101.66.217, 151.101.130.217, 151.101.194.217
2020.dev.to A 3.67.255.218, 34.141.11.154
status.dev.to A 52.215.192.131
itstatus.stmonicatrust.co.uk A 52.215.192.133
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы можем использовать --plain флаг для подавления отображения IP-адресов. Это может быть полезно, если нам нужен список только с доменными именами, который может быть предоставлен в качестве входных данных для таких инструментов, как httpx.

Пример:

$ domain-recon -d dev.to -f words.txt --plain | httpx -probe -sc -title -ip

    __    __  __       _  __
   / /_  / /_/ /_____ | |/ /
  / __ \/ __/ __/ __ \|   /
 / / / / /_/ /_/ /_/ /   |
/_/ /_/\__/\__/ .___/_/|_|
             /_/              v1.2.5

        projectdiscovery.io

Use with caution. You are responsible for your actions.
Developers assume no liability and are not responsible for any misuse or damage.
 [SUCCESS] [301] [] [104.22.62.243]
 [SUCCESS] [301] [] [188.114.97.8]
 [SUCCESS] [301] [] [188.114.97.13]
 [SUCCESS] [] [Fastly error: unknown domain t2.shared.global.fastly.net] [151.101.114.217]
 [SUCCESS] [301] [] [23.227.38.74]
 [SUCCESS] [200] [DEV Community 👩‍💻👨‍💻] [151.101.130.217]
 [SUCCESS] [308] [] [188.114.97.8]
 [SUCCESS] [200] [Hello from Forem Admin Docs | Forem Admin Docs] [34.141.28.239]
 [SUCCESS] [301] [] [3.64.200.242]
 [SUCCESS] [200] [thank you] [3.125.16.34]
 [SUCCESS] [200] [Webpack App] [18.159.128.50]
 [SUCCESS] [200] [Forem Shop] [23.227.38.74]
 [SUCCESS] [301] [] [172.67.27.61]
 [SUCCESS] [200] [[Forem] Community for Everyone] [34.253.101.190]
 [SUCCESS] [200] [DEV Status] [52.215.192.131]
 [SUCCESS] [200] [Customer Service Status] [52.215.192.132]
 [SUCCESS] [301] [] [34.159.168.235]
 [SUCCESS] [200] [St Monica Trust IT Status] [52.215.192.133]
 [SUCCESS] [302] [] [52.215.192.131]
 [SUCCESS] [200] [Dunder Mifflin Community 📄] [3.19.109.223]
Войти в полноэкранный режим

Выйти из полноэкранного режима


Ограничения

domain-recon может обнаруживать доменные имена, которые имеют общедоступные SSL-сертификаты. В настоящее время он сканирует только действительные сертификаты, это можно легко изменить, включив в него и недействительные, но, по моему опыту, это не так полезно.

В настоящее время большинство веб-сайтов имеют SSL-сертификаты, включая среды разработки и тестирования. Тестировщику пера может быть полезно сканировать эти среды. Очевидно, что он не может найти среды без зарегистрированных SSL-сертификатов.

domain-recon в настоящее время использует преобразователи доменов Google, Cloudflare и Quad9. По умолчанию он настроен на использование только Google, что мы можем переопределить с помощью --dns_resolver аргумент. Мы также можем настроить использование нескольких преобразователей одновременно (--dns_resolver="google,cloudflare,quad9"). По моему опыту, наличие только одного резолвера может привести к ограничению скорости, если мы сканируем огромное количество доменов одновременно. К сожалению, замедление происходит и при использовании нескольких преобразователей. Он опирается на async-std-resolver ящик для разрешения DNS. Будущим усовершенствованием будет оптимизация использования async-std-resolver для достижения лучшей производительности. Поскольку он основан на асинхронных вызовах, мы можем работать с ошибками, связанными со слишком большим количеством открытых соединений. Это несколько смягчается за счет ограничения DNS-вызовов меньшим числом, но я уверен, что есть лучшие способы справиться с этим.


Дальнейшее чтение

domain-recon инструмент был вдохновлен «Bug Bounty Bootcamp: руководство по поиску веб-уязвимостей и сообщениям о них» бронировать по Вики Ли. Это отличный ресурс для всех, кто интересуется взломом веб-сайтов и тестированием на проникновение.


Исходный код и участие

Как упоминалось выше, исходный код для domain-recon можно найти на GitHub: https://github.com/domain-recon/domain-recon-rs. Он полностью написан на Rust. Любой вклад приветствуется. 😉