Как найти поддомены за считанные минуты?
Время на прочтение
4 мин
Количество просмотров 121K
Поиск поддоменов — неотъемлемая часть подготовки ко взлому, а благодаря некоторым инструментам противостояние этим действиям стало намного проще.
Незащищенные поддомены подвергают вашу деятельность серьезной опасности, а в последнее время произошел целый ряд инцидентов, при которых взломщики воспользовались поддоменами для обхода защиты.
В случае последнего из череды инцидентов весь код сайта Vine можно было загрузить с незащищенного поддомена.
Если вы владелец сайта или изучаете вопросы информационной безопасности, вы можете воспользоваться следующими инструментами чтобы найти поддомены любого домена.
От переводчика:
Надеюсь, что данные инструменты помогут Вам сохранить информацию на ваших виртуальных и выделенных серверах.
Список инструментов:
- Censys
- Pentest-Tools
- DNS Dumpster
- Sublist3r
- Netcraft
- CloudPiercer
- Detectify
- SubBrute
- Knock
- DNSRecon on Kali Linux
1. Censys
В первую очередь для поиска поддоменов, как правило, прибегают к Censys. Помимо поддомена вы можете найти еще много интересного, а именно:
- данные об IP (может быть полезно для поиска реального IP-адреса);
- данные о сертификате;
- открытые порты;
- SSL/TLS протокол рукопожатия и алгоритмы шифрования (полезно при поиске слабых шифров/протоколов).
Вы получите неплохой обзор сведений о домене.
2. Pentest-Tools
С помощью Pentest-Tools при поиске поддомена можно воспользоваться несколькими методами, например: передача зоны DNS, перебор DNS на основе списка слов или использование поисковой системы.
Результаты поиска можно сохранить в формате PDF.
3. DNS Dumpster
DNS Dumpster — это инструмент для поиска информации о домене и хосте. Авторы проекта — HackerTarget.com.
Вы сможете найти сведения не только о поддомене, но и о DNS сервере, MX и TXT записях, а также получить графическое представление информации о вашем домене.
4. Sublist3r
Sublist3r — это инструмент на языке Python для обнаружения поддоменов с помощью поисковых систем. На сегодняшний день Sublist3r поддерживает Google, Yahoo, Bing, Baidu, Ask, Netcraft, Virustotal, ThreatCrowd, DNSdumpster and PassiveDNS.
Sublist3r поддерживает только Python версии 2.7 и зависит от нескольких библиотек.
Вы можете использовать этот инструмент в Windows, CentOS, RedHat, Ubuntu, Debian и любой другой ОС на базе UNIX. Ниже приводится пример для CentOS.
- Зайдите на ваш Linux-сервер;
- Скачайте последнюю версию Sublist3r
wget https://github.com/aboul3la/Sublist3r/archive/master.zip
Распакуйте скачанный файл:
unzip master.zip
- Будет создана новая папка “Sublist3r-master”
Как я ранее упоминал, существуют следующие зависимости, для установки которых можно воспользоваться командой yum:
yum install python-requests python-argparse
Теперь все готово для обнаружения поддоменов с помощью следующей команды:
./sublist3r.py -d yourdomain.com
Как видите, инструмент обнаружил мои поддомены.
5. Netcraft
Netcraft располагает обширной базой данных о доменах и ее не стоит обходить стороной при поиске открытой информации о поддоменах.
Результат поиска будет содержать всю информацию о домене и поддоменах, в том числе дату первого просмотра, диапазоне адресов и информацию об операционной системе. Если вам необходимо получить больше информации о сайте, просто откройте отчет о сайте и вам будет предоставлена уйма информации о технологиях, рейтинге и т.д.
6. CloudPiercer
CloudPiercer может иногда оказаться полезным при поиске информации о том, существует ли поддомен вашего домена. Кстати, CloudPiercer — это потрясающий и простой способ узнать защищен ли фактический IP-адрес вашего сайта.Открытая информация об IP-адресе делает ваш сайт уязвимым для DDoS-атак.
7. Detectify
Detectify осуществляет поиск поддоменов по предопределенному списку из нескольких сотен слов, но только в случае, если вы являетесь собственником домена. Тем не менее, если вы являетесь зарегистрированным пользователем Detectify, вы сможете включить функцию обнаружения поддоменов в разделе overview в настройках.
8. SubBrute
SubBrute — это один из самых популярных и точных инструментов перечисления поддоменов. Проект разработан сообществом и использует открытый определитель имен в качестве прокси, так что SubBrute не отправляет трафик на целевой DNS-сервер.
Это не онлайн-инструмент, так что вам придется установить его на компьютер. SubBrute можно использовать на Windows или UNIX системах. Программу установить очень легко. Ниже пример для CentOS/Linux.
- Зайдите на ваш Linux-сервер
- Скачайте последнюю версию SubBrute
wget https://github.com/TheRook/subbrute/archive/master.zip
- Распакуйте скачанный zip-файл
unzip master.zip
Будет создана новая папка “subbrute-master”. Зайдите в папку и выполните subbrute.py с необходимым доменом.
./subbrute.py yourdomain.com
Операция займет несколько секунд и отобразятся найденные поддомены.
9. Knock
Knock — еще один инструмент на языке Python для обнаружения поддоменов. Он протестирован для Python 2.7.6. Knock находит поддомены целевого домена по списку слов.
- Knock можно установить на ОС на базе Linux.
wget https://github.com/guelfoweb/knock/archive/knock3.zip
- Распакуйте скачанный zip-файл командой unzip
unzip knock3.zip
- В результате будет создана новая папка “knock-knock3”
- Зайдите в папку и установите с помощью следующей команды
python setup.py install
После установки вы можете производить поиск поддоменов следующим образом:
./knockpy.py yourdomain.com
10. DNSRecon для Kali Linux
Kali Linux — это отличная платформа для оценки информационной безопасности и на ней можно использовать DNSRecon без дополнительной установки каких-либо инструментов.
DNSRecon проверяет все NS-записи на предмет смены зон, общие записи DNS, обработку шаблонов, PTR-записи и т.д.
Чтобы воспользоваться DNSRecon, просто выполните следующую команду
dnsrecon –d yourdomain.com
Надеюсь, что с помощью приведенных выше инструментов вы сможете обнаружить поддомены целевого домена в рамках вашей работы по оценке информационной безопасности. Сообщите мне, какой вам понравился больше всего.
Хочу напомнить, что недавно заработал проект на который мы собрали более 8.5 тысяч отзывов с различных форумов о 344 хостерах — Poisk.Hosting. На сайте VDS.menu все еще можно найти виртуальные серверы, а на SHARED.menu — виртуальный хостинг.
При проведении SEO-аудита важно проверить, имеет ли анализируемый сайт проиндексированные поддомены, ведь зачастую на них может находиться информация, мешающая продвижению.
Это может быть старая версия сайта, дубликаты контента основного домена, тестовая версия. Также поиск поддоменов может использоваться для анализа конкурентов и их структуры.
Как найти поддомены сайта
Это можно сделать с помощью специальных поисковых операторов. Например, для поисковой системы Google можно использовать операторы, указанные ниже.
- С помощью оператора «site:» можно ограничить результаты поиска конкретным сайтом.
- Оператор «-» исключает слово, фразу или поисковую конструкцию с другим оператором.
- Найти страницы, в URL которых присутствует искомая фраза поможет «inurl:».
Комбинированием этих операторов составляются определенные выражения, которые и используются для поиска поддоменов. С помощью выражения «-inurl:» мы можем исключить определенный домен из результатов выдачи.
Таким образом у сайта arealidea.ru мы нашли первый поддомен — blog.arealidea.ru.
Продолжить поиск можно последовательно исключая найденные поддомены тем же образом:
В «Яндексе» поиск проидексированных поддоменов значительно затруднен из-за отмены работы некоторых операторов, с помощью которых решалась данная задача. Но существуют специальные сервисы по автоматизации этого процесса (пример).
Инструмент поможет быстро найти все проиндексированные поисковыми системами поддомены сайта и составить список, который пригодится для дальнейшего его анализа с целью обнаружения и недопущения дублирования контента. Для того, чтобы найти все поддомены, инструмент собирает данные сразу из трех источников: при помощи запросов к Яндекс, Google, а также с API MegaIndex.
Что такое поддомены сайта?
Поддомен – это домен, который принадлежит основному домену более высокого уровня. Применяется в основном для отдельных больших самостоятельных разделов, категорий и сервисов, которые принадлежат одной и той же организации. Также поддомены имеют преимущества перед основным сайтом при региональном продвижении в виду своей узконаправленности. Подробнее о поддоменах в Википедии.
Зачем искать поддомены сайта?
Иногда, причиной низких позиций сайта, может стать его поддомен. Связано это в основном с дублированием контента, а также пересечением видимости в выдаче, по сути, двух сайтов одной организации. При обнаружении поддоменов рекомендуем сравнить их с основным адресом сайта при помощи нашего инструмента для проверки на аффилированность.
Найти поддомены сайта будет полезно при:
- общем техническом анализе сайта;
- анализе структуры конкурентной организации;
- региональном представительстве;
- тестировании и редизайне основного зеркала сайта.
Предугадать отношение поисковых систем к поддоменам очень сложно, поэтому Be1.ru не рекомендует их создавать без крайней на то необходимости.
1. Zone transfer
Some nameservers allow for DNS zone transfers to anyone on the internet, usually unintentionally. In this question, it is explained further: DNS zone transfer attack.
Tools for zone transfers
The second answer on that question mentions how to test for it for both Windows and Linux:
Windows:
nslookup > server <DNS you are querying> > set type=any > ls -d <target>
Unix (nslookup is deprecated on Unix):
dig -t axfr @<DNS you are querying> <target>
(I edited the Unix one, because -axfr
does not appear to work. I needed to specify -t axfr
.)
2. DNSSEC zone walk
DNSSEC signs DNS records, so you can be sure you receive the correct answer (well, given some trust roots and intermediaries). But how do you prove that something does not exist, e.g. when looking for nonexistentsub.example.com
, how does the nameserver of example.com
prove nonexistence of a subdomain? It doesn’t have the signing key on it (signing is done upon updating the zone by administrators).
In their answer to How does DNSSec work? Are there known limitations or issues?, /u/tylerl explains:
Obviously that response needs to be signed, but generally the DNS server itself doesn’t have access to your signing key and can’t sign the response on-the-fly; the signatures are all created “offline” ahead of time. This keeps your key from being exposed if your DNS server gets compromised.
So instead, you alphabetize your subdomains and say “for every name between mail.example.com and pop.example.com, no other subdomains exist” and sign that assertion. Then when someone asks for nachos.example.com you can just give them that response (which has already been signed) and the client knows that because nachos.example.com falls alphabetically between mail.example.com and pop.example.com, then the “this domain doesn’t exist” response is considered to be correctly signed and actually came from you.
The place where this becomes problematic is that by having a set of these negative responses which explicitly state that “no responses exist between X and Y, you can easily map out exactly which domains exist for the entire zone. You know that “X” exists, and you know that “Y” exists, and you know there is nothing else between them. Just do a little more poking at random and you’ll quickly be able to compile a list of all the records that do exist.
The record that specifies “until pop.example.com there is nothing” is called NSEC (Next SECure record).
A workaround was designed for this: NSEC3. It hashes names, so mail
turns into b83a88...
and pop
turns into b21afc...
. Imagine those are the two only subdomains, then the signed response will say “no record exists between b21afc...
and b83a88...
“. Again it works alphabetically and you can obtain them all, but this time you will need to crack each hash before you learn what the subdomains are.
In my experience, most have the NSEC3 extension enabled.
Tools for zone walking
NSEC3Walker does both the enumeration and the cracking. I cannot vouch for how efficient the cracking is, but it’s definitely only CPU-based. Since NSEC3 uses SHA1 (at least originally), there are probably better cracking programs.
dnsrecon
also appears to be able to do it: dnsrecon -z -d example.com
. I don’t know if there is an official website with information, but in Debian Stretch, Buster, and Bullseye I can apt install dnsrecon
.
3. Reverse lookups in a subnet
By guessing a few, you will often find responses in a similar range. If you know www.
exists and mail.
exists, and they both resolve to 192.168.3.x
, there might be more. Try to do a reverse lookup for all addresses in the 192.168.3.0-255
range (the /24
), and you will probably find more subdomains. You may also want to try a WHOIS query on the IP address to find the range’s boundaries (if they have their own block).
Tools for reverse lookups
dnsrecon
can do this:
dnsrecon -t rvl -r 192.168.1.0/24
Where -t rvl
means “type reverse-lookup” and -r
passes an IP range in CIDR notation. I don’t know if there is an official website with information, but in Debian Stretch, Buster, and Bullseye I can apt install dnsrecon
.
4. DNS service records
One can set SRV (service) records for service discovery, for example _sip._tcp.example.com
could point to sipserver.example.com
on port 5060. Since the service names (“sip
” in the example) are typically the standard ones registered with IANA, we can iterate through them.
Tools for querying srv records
dnsrecon
can do this:
dnsrecon -t srv -d example.com
It will take a subset of the existing service names, selected by an unknown method, as mentioned in its man page (man dnsrecon
).
5. Other methods
You already mentioned some of those. I won’t go into detail, because they’re quite self-explanatory, and either depend on an application running on the target (such as FTP), depend on a third party, or there is really just not much to say about them.
-
Certificate transparency logs may show for which subdomains certificates were obtained, e.g. see https://crt.sh.
-
Search results might reveal subdomains. Again,
dnsrecon
can do this with the-t goo
option (uses Google specifically). -
Checking other TLDs for the same name might reveal some other variants or IP addresses. E.g. if
example.com
exists,example.org
might exist as well.dnsrecon
can also do this withdnsrecon -t tld -d example.com
. -
Crawling a website or finding references elsewhere might give hints. (Help wanted: which tool to use?)
-
Looking at TLS certificates often yields results. Be sure to check the ports for HTTPS, SMTP(S), FTP(S), etc. and use STARTTLS.
-
There are third party tools which can list subdomains in a domain. Their methods are less clear, but crawling the internet and historical records (maybe a domain transfer was once possible?) are often part of it. (Help wanted: any recommendations? I only remember seeing that it exists.)
6. Guessing.
The last option is just guessing, either by a dictionary (I’d recommend that) or brute force. This is made harder by wildcards, though many tools will try to detect and solve this.
Tools for guessing/brute-forcing
Fierce was built to do this: https://github.com/mschwager/fierce
It is installed by default in Kali Linux.
As /u/rook mentioned in another answer in this thread, they wrote Subbrute for this purpose: https://github.com/TheRook/subbrute
dnsrecon
can do this with dnsrecon -t brt -d example.com
. Use -f
to “Filter out of Brute Force Domain lookup records that resolve to the wildcard defined IP Address when saving records” (citing its man page). You can pass -D
for a dictionary file.
Appendix: dictionaries
I am still looking for good dictionaries (for guessing/brute forcing), but here are some that I’m aware of. Please help me complete this list! The bigger the better, as long as they are sorted by likelihood.
- Fierce’s repository contains some dictionaries: https://github.com/mschwager/fierce/tree/master/lists
- ‘Bitquark’ performed an analysis of the most commonly used subdomains which resulted in these lists: https://github.com/bitquark/dnspop/tree/master/results. The blog posts looks like it has some weird results though, so I am not sure of the quality of these lists.
dnsrecon
comes with a list, simply namednamelist.txt
.dpkg -L dnsrecon
reveals where it is installed. It is sorted alphabetically.- Subbrute has a short and a long list: https://github.com/TheRook/subbrute
Проиндексированные Яндексом поддомены ищутся с помощью специализированных поисковых запросов, которые позволяют итерационно найти все поддомены указанного домена. Будут найдены именно те поддомены, которые проиндексированы поисковой системой.
Особенности поиска
Из-за ограничения Яндекса на длину поискового запроса, инструмент в некоторых случаях особо длинных доменов и поддоменов может не найти все поддомены, если их число крайне высоко много (более 80-100).
Как использовать инструмент для SEO?
С точки зрения поисковых систем, поддомены являются отдельными сайтами.
Поиск всех проиндексированных поддоменов Яндексом будет полезен в следующих случаях:
-
При проведении технического аудита. Можно быстро найти поддомены, которые могут создать проблемы при продвижении из-за пересечения тематик и дублирования контента с основным доменом, проиндексированные https-версии сайтов, отсутствие редиректа c/на версию с www, понять структуру ресурса и многое другое.
-
Для анализа конкурентов. Один из возможных вариантов — для понимания, как лучше разбить сайт на поддомены — например, анализ WikiMart.ru указывает на то, что книги, авто, товары для красоты и прочее лучше вынести на отдельные поддомены при создании аналогичного агрегатора.
-
Для поиска поддоменов, которые не должны быть в индексе. Например, копия сайта для тестирования при разработке, которая может привести к дублированию контента всего сайта. Инструмент быстро находит ошибочно созданные поддомены и тестовые версии.
-
Для определения стратегии продвижения мультирегионального проекта. Структуру проекта и поддоменов полезно изучить при анализе конкурентов, их региональной стратегии продвижения, сборе общей информации о сайте в определенной тематике.