
Высокоскоростной DNS-резолвер и брутфорсер поддоменов с точной фильтрацией wildcard-записей и проверкой отравления DNS для точной разведки.

Быстрый резолвер доменов и инструмент для брутфорса поддоменов с точной фильтрацией wildcard-записей
Начало работы »
Использование
·
Как это работает
·
Спонсорство
·
ЧаВО
puredns — это быстрый резолвер доменов и инструмент для брутфорса поддоменов, который может точно отфильтровывать wildcard-поддомены и записи, отравленные DNS.
Он использует massdns — мощный заглушечный DNS-резолвер, для массовых запросов. При достаточной пропускной способности и хорошем списке публичных резолверов он может разрешить миллионы запросов всего за несколько минут. К сожалению, результаты massdns настолько же хороши, насколько хороши ответы, предоставляемые публичными резолверами. Результаты часто загрязнены неверными DNS-ответами и ложными срабатываниями от wildcard-поддоменов.
puredns решает эту проблему с помощью своего алгоритма обнаружения wildcard. Он может отфильтровывать wildcard-записи на основе DNS-ответов, полученных от набора доверенных резолверов. Он также пытается обойти отравление DNS, проверяя ответы с помощью этих доверенных резолверов.
Считаете это полезным? ⭐ Поставьте нам звезду на GitHub — это помогает!

|
Если моя работа приносит вам деньги, подумайте о том, чтобы стать спонсором! Вы можете получить уникальные привилегии! Это также будет значить ОЧЕНЬ МНОГО ❤️, так как позволит мне продолжать работать бесплатно для сообщества. Но что бы вы ни решили, можете быть уверены, что моё программное обеспечение останется бесплатным и открытым для вашего использования. |
Puredns требует massdns на хост-машине. Если путь к бинарному файлу massdns присутствует в переменной окружения PATH, puredns будет работать «из коробки». Хорошим местом для копирования исполняемого файла massdns является /usr/local/bin на большинстве систем. В противном случае вам нужно будет указать путь к бинарному файлу massdns с помощью аргумента командной строки --bin.
Следующее должно работать на большинстве систем на базе Debian. Следуйте официальным инструкциям для получения дополнительной информации.
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
Вам необходимо получить список публичных DNS-серверов для использования puredns. Обратитесь к разделу ЧаВО, чтобы узнать, как составить собственный список рабочих серверов.
Вы можете скачать готовый бинарный релиз.
Кроме того, вы можете легко скомпилировать последнюю версию. Убедитесь, что Go установлен в вашей системе — поддерживаются два последних основных релиза Go. Обратитесь к официальной странице установки Go для получения инструкций. Затем выполните следующую команду:
go install github.com/d3mondev/puredns/v2@latest
Обязательно просмотрите полный список доступных команд и опций с помощью puredns --help.
Если в текущей рабочей директории существует файл resolvers.txt, puredns по умолчанию будет использовать его. В противном случае, если присутствуют файлы ~/.config/puredns/resolvers.txt или ~/.config/puredns/resolvers-trusted.txt, puredns автоматически воспользуется ими как резолверами. Если ни один из этих вариантов недоступен, укажите резолверы для использования с помощью аргументов --resolvers и --resolvers-trusted.
Указание доверенных резолверов необязательно. По умолчанию puredns просто использует 8.8.8.8 и 8.8.4.4.
Вот как выполнить брутфорс огромного списка поддоменов, используя словарь с именем all.txt:
puredns bruteforce all.txt domain.com
Вы также можете выполнить брутфорс нескольких доменов одновременно с помощью опции -d, чтобы загрузить текстовый файл, содержащий домены, вместо указания одного домена в качестве аргумента:
puredns bruteforce all.txt -d domains.txt
Вы также можете разрешить список доменов, содержащихся в текстовом файле (по одному на строку).
puredns resolve domains.txt
Вы можете передать список доменов для разрешения через stdin:
cat domains.txt | puredns resolve
Или список слов для использования в брутфорсе:
cat wordlist.txt | puredns bruteforce domain.com
Вы также можете добавить ключ -q, чтобы выводить только найденные домены для передачи в другие инструменты:
cat domains.txt | puredns resolve -q | httprobe
Вы можете сохранить следующую информацию в файлы для повторного использования в своих рабочих процессах:
puredns resolve domains.txt --write valid_domains.txt \
--write-wildcards wildcards.txt \
--write-massdns massdns.txt

Вы можете увидеть puredns в действии на домене google.com, используя небольшой словарь из 100 000 самых распространённых поддоменов, на изображении выше.
В рамках своего рабочего процесса puredns автоматически выполняет три шага:
С помощью massdns puredns выполнит массовое разрешение всех доменов и поддоменов. Он передаёт данные massdns через stdin, что позволяет при необходимости ограничивать количество запросов в секунду и выполнять базовую санитацию сгенерированного списка доменов.
По умолчанию входные домены преобразуются в нижний регистр, и принимаются только записи, содержащие допустимые символы (по сути [a-z0-9.-]). Вы можете отключить это с помощью флага --skip-sanitize.
После этого шага результаты обычно загрязнены: некоторые публичные резолверы отправляют неверные ответы, а wildcard-поддомены могут быстро раздуть результаты.
Затем puredns использует свой алгоритм обнаружения wildcard для выявления и извлечения всех корней wildcard-поддоменов из файла результатов massdns.
Он будет использовать вывод massdns из шага 1 как DNS-кэш, чтобы минимизировать количество необходимых запросов. Для обеспечения точных результатов может потребоваться проверить кэшированные результаты, выполнив DNS-запрос.
Вы можете пропустить этот шаг, используя флаг --skip-wildcard.
Для защиты от отравления DNS puredns использует massdns в последний раз, чтобы проверить оставшиеся результаты с помощью доверенных DNS-резолверов. В настоящее время используются внутренние доверенные резолверы 8.8.8.8 и 8.8.4.4. Этот шаг выполняется с меньшей скоростью, чтобы избежать каких-либо ограничений скорости на доверенных резолверах.
Вы можете пропустить этот шаг, используя флаг --skip-validation.
На этом этапе результирующие файлы должны быть свободны от wildcard-поддоменов и отравленных DNS-ответов.
Trickest поддерживает список валидных резолверов здесь: https://github.com/trickest/resolvers
Кроме того, вы можете получить список публичных резолверов с public-dns.info, а затем использовать проект DNS Validator, чтобы оставить только те резолверы, которые предоставляют валидные ответы.
Если ваши публичные резолверы предоставляют puredns неверную информацию, например, отправляя отравленные ответы, некоторые поддомены могут быть потеряны, так как они будут отфильтрованы. *Подсказка: * Избегайте резолверов из стран, которые цензурируют интернет, например, Китай.
Когда у вас есть список пользовательских резолверов, вы можете передать их puredns с помощью аргумента -r или поместив их в файл, расположенный по адресу ~/.config/puredns/resolvers.txt:
puredns resolve domains.txt -r resolvers.txt
Доверенные резолверы по умолчанию: 8.8.8.8 и 8.8.4.4. Если вы хотите изменить их, вы также можете указать собственный список с помощью аргумента --resolvers-trusted или поместив их в файл по адресу ~/.config/puredns/resolvers-trusted.txt. Я провел множество тестов, чтобы найти наилучшие возможные доверенные резолверы для puredns — обязательно тщательно проверяйте свои результаты, если решите их изменить, и отрегулируйте ограничение скорости с помощью --rate-limit-trusted.
puredns resolve domains.txt -r resolvers.txt --resolvers-trusted trusted.txt
Puredns не просто игнорирует DNS-ответы, содержащие NXDOMAIN. Иногда эти ответы NXDOMAIN содержат валидные CNAME-записи, указывающие на просроченные домены. Если такие записи присутствуют, они могут указывать на незарегистрированный домен, что позволяет осуществить перехват поддомена.
Если вы получаете домены, которые не разрешаются в IP-адрес, проверьте, содержат ли они CNAME-запись, представляющую интерес:
dig @8.8.8.8 CNAME example.com
Наиболее вероятная причина — балансировка нагрузки DNS: иногда вы получаете разные IP-адреса для каждого уникального DNS-запроса. Это может затруднить обнаружение wildcard-поддоменов путем сравнения их DNS-записей.
Вы можете указать количество тестов, которые puredns выполнит для сбора всех различных IP-адресов для поддомена во время обнаружения wildcard. По умолчанию используется 3 теста, что очень мало. Я видел домены с большим количеством балансировки, для которых потребовалось более 50 запросов, чтобы вернуть результаты, которые были не идеальными, но достаточно хорошими.
Вы можете попробовать увеличить количество тестов, выполняемых для обнаружения wildcard-поддоменов, с помощью аргумента --wildcard-tests:
puredns resolve domains.txt --wildcard-tests 50
Для обнаружения wildcard puredns необходимо хранить кэш найденных DNS-ответов. Если ваш список доменов насчитывает сотни миллионов и содержит много wildcard-поддоменов, хост может исчерпать память. Но есть простое решение.
По умолчанию puredns помещает все домены в один пакет, чтобы сэкономить количество DNS-запросов и время выполнения. Если память является проблемой, можно обрабатывать домены в нескольких меньших пакетах с помощью аргумента --wildcard-batch. Я обнаружил, что хороший размер составляет от 1M до 2M поддоменов для VPS с 1 ГБ ОЗУ.
puredns resolve domains.txt --wildcard-batch 1000000
Puredns не удаляет дубликаты ни на одном этапе своего конвейера. Если входной файл содержит повторяющиеся элементы, такие как одинаковые слова или домены, puredns выведет дублирующиеся элементы. Вы можете убедиться, что входные файлы, предоставляемые puredns, не содержат дубликатов, используя такой инструмент, как sort -u.
Это, скорее всего, связано с используемыми публичными резолверами. Некоторые из них иногда возвращают ответы, не связанные с запросами, что приводит к появлению случайных доменных имён в выводе. Puredns в настоящее время не обрабатывает этот случай и оставляет пользователю возможность очистить вывод, чтобы убедиться, что найденные домены соответствуют области поиска.
public-dns.info постоянно обновляет список публичных и бесплатных DNS-резолверов.
DNS Validator можно использовать для составления собственного списка публичных DNS-резолверов.
all.txt wordlist — культовый словарь all.txt от Jhaddix, часто используемый для перечисления поддоменов.
shuffleDNS — хорошая альтернатива, написанная на Go, которая обрабатывает wildcard-поддомены с помощью другого алгоритма.
Вы можете внести вклад в puredns следующими способами:
У вас есть идея для потрясающей новой функции? Нашли ошибку, которую хотите исправить? Отлично! Не стесняйтесь создать issue для обсуждения перед созданием pull request.
Я не буду принимать pull request для тривиальных изменений, таких как исправление опечаток, соблюдение лучших практик, незначительные исправления и т.д.
Любые резолверы, включенные в этот репозиторий, представлены только для справки. Автор не несет ответственности за любое неправомерное использование резолверов из этого списка. Пользователь обязан составить список резолверов, которые ему разрешено использовать.
Использование этой программы для атак на цели без согласия незаконно. Пользователь обязан соблюдать все применимые законы. Разработчик не несет никакой ответственности и не отвечает за любое неправомерное использование или ущерб, причиненный этой программой. Пожалуйста, используйте ответственно.
Материалы, содержащиеся в этом репозитории, лицензированы под GNU GPLv3.