Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
massdns — Высокопроизводительный DNS-резолвер для массовых запросов и разведки (перебор поддоменов) | Kitploit
Инструменты/GitHubGitHub/blechschmidt/massdns
OSINT (Разведка открытых источников)РазведкаПеречисление DNS и поддоменовСбор информацииАнализ DNS
GitHubblechschmidt/massdns

massdns

Высокопроизводительный DNS-резолвер для массовых запросов и разведки (перебор поддоменов)

Репозиторий
3.6k5044 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

MassDNS

Высокопроизводительный DNS-резолвер-заглушка

MassDNS — это простой высокопроизводительный DNS-резолвер-заглушка, предназначенный для тех, кому необходимо разрешить огромное количество доменных имён — порядка миллионов или даже миллиардов. Без специальной настройки MassDNS способен обрабатывать более 350 000 запросов в секунду, используя общедоступные резолверы.

Авторы

  • Quirin Scheitle, Мюнхенский технический университет

Сборка

Клонируйте git-репозиторий и выполните cd в корневую папку проекта. Затем запустите make для сборки из исходного кода. Если вы работаете не на Linux, выполните make nolinux. В Windows потребуются пакеты Cygwin: gcc-core, git и make.

Использование

root@kitploit:~
Usage: ./bin/massdns [options] [domainlist]
  -b  --bindto             Bind to IP address and port. (Default: 0.0.0.0:0)
      --busy-poll          Use busy-wait polling instead of epoll.
  -c  --resolve-count      Number of resolves for a name before giving up. (Default: 50)
      --drop-group         Group to drop privileges to when running as root. (Default: nogroup)
      --drop-user          User to drop privileges to when running as root. (Default: nobody)
      --extended-input     Input names are followed by a space-separated list of resolvers.
                           These are used before falling back to the resolvers file.
      --filter             Only output packets with the specified response code.
      --flush              Flush the output file whenever a response was received.
  -h  --help               Show this help.
      --ignore             Do not output packets with the specified response code.
  -i  --interval           Interval in milliseconds to wait between multiple resolves of the same
                           domain. (Default: 500)
  -l  --error-log          Error log file path. (Default: /dev/stderr)
      --norecurse          Use non-recursive queries. Useful for DNS cache snooping.
  -o  --output             Flags for output formatting.
      --predictable        Use resolvers incrementally. Useful for resolver tests.
      --processes          Number of processes to be used for resolving. (Default: 1)
  -q  --quiet              Quiet mode.
      --rand-src-ipv6      Use a random IPv6 address from the specified subnet for each query.
      --rand-src-ipv6-file Use a random IPv6 address from the specified file.
      --rcvbuf             Size of the receive buffer in bytes.
      --retry              Unacceptable DNS response codes.
                           (Default: All codes but NOERROR or NXDOMAIN)
  -r  --resolvers          Text file containing DNS resolvers.
      --root               Do not drop privileges when running as root. Not recommended.
  -s  --hashmap-size       Number of concurrent lookups. (Default: 10000)
      --sndbuf             Size of the send buffer in bytes.
      --status-format      Format for real-time status updates, json or ansi (Default: ansi)
      --sticky             Do not switch the resolver when retrying.
      --socket-count       Socket count per process. (Default: 1)
  -t  --type               Record type to be resolved. (Default: A)
      --verify-ip          Verify IP addresses of incoming replies.
  -w  --outfile            Write to the specified output file instead of standard output.

Output flags:
  L - domain list output
  S - simple text output
  F - full text output
  B - binary output
  J - ndjson output

Advanced flags for the domain list output mode:
  0 - Include NOERROR replies without answers.

Advanced flags for the simple output mode:
  d - Include records from the additional section.
  i - Indent any reply record.
  l - Separate replies using a line feed.
  m - Only output reply records that match the question name.
  n - Include records from the answer section.
  q - Print the question.
  r - Print the question with resolver IP address, Unix timestamp and return code prepended.
  s - Separate packet sections using a line feed.
  t - Include TTL and record class within the output.
  u - Include records from the authority section.

Advanced flags for the ndjson output mode:
  e - Write a record for each terminal query failure.

Подробное описание интерфейса командной строки приведено в man-странице: man ./doc/massdns.1.

Пример

Разрешить все AAAA-записи доменов из domains.txt, используя резолверы из resolvers.txt в каталоге lists, и сохранить результаты в results.txt:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt

Эквивалентно следующему:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt

Пример вывода

По умолчанию MassDNS выводит ответные пакеты в текстовом формате, который выглядит примерно так:

root@kitploit:~
;; Server: 77.41.229.2:53
;; Size: 93
;; Unix time: 1513458347
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51298
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
example.com. IN A

;; ANSWER SECTION:
example.com. 45929 IN A 93.184.216.34

;; AUTHORITY SECTION:
example.com. 24852 IN NS b.iana-servers.net.
example.com. 24852 IN NS a.iana-servers.net.

IP-адрес резолвера включён для упрощения фильтрации вывода в случае, если вы обнаружите, что некоторые резолверы выдают некорректные результаты.

Разрешение имён

Репозиторий содержит файл resolvers.txt — отфильтрованное подмножество резолверов из проекта subbrute. Обратите внимание, что использование MassDNS может создавать значительную нагрузку на используемые резолверы и приводить к жалобам на злоупотребление, направляемым вашему интернет-провайдеру. Также учтите, что предоставленные резолверы не гарантируют доверия. Список резолверов в настоящее время устарел, большая часть резолверов неработоспособна.

Собственная реализация DNS в MassDNS, не использующая malloc, на данный момент поддерживает только самые распространённые типы записей. Вы можете помочь изменить это, участвуя в разработке.

PTR-записи

MassDNS включает Python-скрипт, позволяющий разрешить все PTR-записи IPv4, выводя соответствующие запросы в стандартный поток вывода.

root@kitploit:~
$ ./scripts/ptr.py | ./bin/massdns -r lists/resolvers.txt -t PTR -w ptr.txt

Имейте в виду, что метки в пространстве in-addr.arpa имеют обратный порядок. Чтобы разрешить доменное имя для 1.2.3.4, MassDNS ожидает 4.3.2.1.in-addr.arpa в качестве имени входного запроса. Как следствие, Python-скрипт разрешает записи не в порядке возрастания, что является преимуществом, так как позволяет избежать внезапных резких пиков нагрузки на серверы имён подсетей IPv4.

Разведка с помощью брутфорса поддоменов

Выполняйте разведывательное сканирование ответственно и настраивайте параметр -s, чтобы не перегружать авторитетные DNS-серверы.

Аналогично subbrute, MassDNS позволяет брутфорсить поддомены с помощью скрипта subbrute.py:

root@kitploit:~
$ ./scripts/subbrute.py example.com lists/names.txt | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

В качестве дополнительного метода разведки скрипт ct.py извлекает поддомены из журналов сертификатной прозрачности, собирая данные с crt.sh:

root@kitploit:~
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

Файлы names.txt и names_small.txt, скопированные из проекта subbrute, содержат имена часто используемых поддоменов. Также рассмотрите возможность использования компиляции поддоменов Джейсона Хэддикса с более чем 1 000 000 имён или список слов Assetnote с более чем 9 000 000 имён.

MassDNS также включает скрипт-обёртку recon.py (статус бета) в папке scripts, который выполняет перечисление поддоменов напрямую через авторитетные серверы имён и, таким образом, не требует сторонних резолверов. Степень параллелизма определяется автоматически и поддерживает сотни тысяч запросов в секунду, обеспечивая надёжные результаты. На недорогом выделенном сервере список слов Assetnote может быть перечислен менее чем за минуту. Текущее ограничение: делегирование зоны обрабатывается только до точки делегирования. Например, если перечисляется example.org, а sub.example.org делегирован другому серверу имён, то abc.sub.example.org не будет найден этим скриптом, если abc.sub содержится в списке слов. Однако скрипт сообщит об этом факте как ?.sub.example.org в данном случае.

root@kitploit:~
$ ./scripts/recon.py -d google.com -l lists/best-dns-wordlist.txt > google.txt

Скриншоты

Screenshot

Безопасность

MassDNS не требует привилегий root и поэтому по умолчанию понижает привилегии до пользователя «nobody» при запуске от root. Если пользователь «nobody» не существует, MassDNS отказывается выполнять работу. В этом случае рекомендуется запускать MassDNS от другого непривилегированного пользователя. Понижение привилегий можно обойти с помощью аргумента --root, что не рекомендуется. Также обратите внимание, что ветки, отличные от master, не следует использовать в производственной среде ни при каких обстоятельствах.

Практические соображения

Настройка производительности

MassDNS — это простое однопоточное приложение, предназначенное для сценариев, в которых узким местом является сеть. Оно рассчитано на работу на серверах с высокой пропускной способностью загрузки и выгрузки. Внутри MassDNS использует хеш-карту, которая управляет параллелизмом запросов. Установка параметра размера -s позволяет контролировать скорость запросов. Если вы испытываете проблемы с производительностью, попробуйте изменить параметр -s, чтобы добиться лучшего процента успешных запросов.

Обход ограничения частоты запросов

Если ограничение частоты запросов со стороны IPv6-резолверов является проблемой, вы можете использовать --rand-src-ipv6 <your_ipv6_prefix>. MassDNS будет использовать сырой сокет для отправки и получения DNS-пакетов и случайным образом выбирать исходный IPv6-адрес из указанного префикса для каждого запроса. Это требует, чтобы MassDNS запускался с привилегией CAP_NET_RAW. При использовании этого метода следует настроить iptables или nftables на отбрасывание DNS-трафика, получаемого MassDNS, чтобы операционная система не генерировала ICMP-ответы «Порт недоступен», например: ip6tables -p udp --sport 53 -I INPUT -j DROP. Обратите внимание, что это правило является лишь примерным и отбросит весь DNS-трафик, включая трафик других приложений. Возможно, вам потребуется адаптировать правило для более точного соответствия вашему сценарию использования.

Достоверность результатов

Если достоверность результатов крайне важна, не следует полагаться на встроенный список резолверов. Вместо этого настройте локальный резолвер unbound и укажите его IP-адрес MassDNS. Если вы используете MassDNS в качестве инструмента разведки, возможно, стоит сначала запустить его со списком резолверов по умолчанию, а затем повторно запустить на найденных именах со списком доверенных резолверов, чтобы исключить ложные срабатывания.

Если вы перечисляете поддомены для одного имени, например, для example.com, возможно, вам вообще не нужны сторонние резолверы. В таком случае можно напрямую опрашивать авторитетные серверы имён следующим образом:

root@kitploit:~
$ ./bin/massdns -r <(./scripts/auth-addrs.sh example.com) --norecurse -o Je example-com-subdomains.txt > results.txt

Планы

  • Предотвращать перегрузку резолверов, применяющих ограничения скорости или отказывающихся разрешать имена по прошествии некоторого времени
  • Реализовать ограничения пропускной способности
  • Использовать перекрёстные проверки резолверов для обнаружения DNS-отравления и DNS-спама (например, уровень 3 DNS hijacking)
  • Добавить обнаружение wildcard-записей для разведки
  • Повысить надёжность разведки, добавив режим повторного разрешения найденных доменов через список доверенных (локальных) резолверов для исключения ложных срабатываний
  • Автоматически определять оптимальный уровень параллелизма
  • Корректно разбирать командную строку и разрешать использование/сочетание коротких опций без пробелов
Скачать инструмент