
Быстрый и всесторонний инструмент для сканирования корпоративных сетей
Возможности • Использование • Установка • Использование • Участие • Дополнительные примечания
Domainim — это быстрый инструмент разведки доменов для сканирования организационных сетей. Инструмент предназначен для предоставления краткого обзора структуры организации с использованием таких методов, как OSINT, брутфорс, DNS-резолвинг и т.д.
Текущие возможности (v1.0.1)-

Перечисление виртуальных хостов
Обратный DNS-запрос
Обнаружение wildcard-поддоменов (для брутфорса)
Базовое сканирование TCP-портов
Принимает поддомены в качестве входных данных
Экспорт результатов в JSON-файл
Некоторые возможности находятся в разработке. Подробнее см. в разделе Запланированные функции.
Проект вдохновлён Sublist3r. Модуль сканера портов во многом основан на NimScan.
Вы можете собрать этот репозиторий из исходников-
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domain> [--ports=<ports>]
Или же вы можете просто скачать бинарник со страницы релизов. Имейте в виду, что бинарник протестирован только на системах на базе Debian.
./domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
<domain> — домен, который нужно перечислить. Также может быть поддоменом.--ports | -p — строковое указание сканируемых портов. Может быть одним из следующих:
all — сканировать все порты (1-65535)none — пропустить сканирование портов (по умолчанию)t<n> — сканировать top n портов (аналогично nmap). Например, t100 сканирует топ-100 портов. Максимальное значение — 5000. Если n больше 5000, оно будет установлено в 5000.80 сканирует порт 8080-100 сканирует порты с 80 по 10080,443,8080 сканирует порты 80, 443 и 808080,443,8080-8090,t500 сканирует порты 80, 443, с 8080 по 8090 и топ-500 портовПримеры
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --outfile=results.json./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1Меню справки можно вызвать с помощью ./domainim --help или ./domainim -h.
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help Показать эту справку.
-p, --ports Порты для сканирования. [по умолчанию: `none`]
Может быть `all`, `none`, `t<n>`, одним значением, диапазоном, комбинацией
-l, --wordlist Список слов для брутфорса поддоменов. Брутфорс пропускается для недействительного файла.
-d, --dns IP и порт для DNS-резолвера. Должен быть действительным IPv4 с опциональным портом [по умолчанию: системный]
-r, --rps DNS-запросов в секунду [по умолчанию: 1024 req/s]
-o, --out JSON-файл, в который будет сохранён вывод. Имя файла должно заканчиваться на `.json`
Examples:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -t:1500 -o:results.json
Схема JSON для результатов выглядит следующим образом:
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
Пример JSON для nmap.org можно найти здесь.
Принимаются contributions. Не стесняйтесь открывать pull request или issue.
Этот проект всё ещё находится на ранней стадии. Я осознаю несколько ограничений.
Два движка, которые я использую (называю их движками, потому что так делает Sublist3r), в настоящее время имеют некоторое ограничение на количество ответов. dnsdumpster может получить до 100 поддоменов. crt.sh также рандомизирует результаты при слишком большом их количестве. Ещё одна проблема с crt.sh — иногда он возвращает SQL-ошибки. Поэтому для некоторых доменов результаты могут различаться при разных запусках. В будущем я планирую добавить больше движков (по крайней мере, движок брутфорса).
Сканер портов имеет только тайм-аут время ответа ping + 750 мс. Это может привести к ложноотрицательным результатам. Поскольку domainim предназначен не для сканирования портов, а для быстрого обзора, такие случаи приемлемы. Однако я планирую добавить флаг для увеличения тайм-аута. По той же причине фильтрованные порты не отображаются. Для более полного сканирования портов рекомендую использовать Nmap. Domainim также не обходит ограничение скорости (если оно есть).
Может показаться, что способ вывода vhost-имён приводит к повторению.

Возможно, было бы лучше печатать так:
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ Обратный DNS: ack.nmap.org.
Но ранее, во время тестирования, я обнаружил случаи, когда не все IP-адреса были общими для одного и того же набора vhost-имён. Поэтому я решил оставить так, как есть.

DNS-сервер может иметь некоторое ограничение скорости. Поэтому я добавил случайные задержки (от 0 до 300 мс) для разрешения IPv4 для каждого запроса. Это делается для того, чтобы DNS-сервер получал запросы не все сразу, а более естественным образом. Для метода брутфорса значение по умолчанию составляет от 0 до 1000 мс, но его можно изменить с помощью флага --rps | -t.
Одно ограничение, которое меня беспокоит, заключается в том, что DNS-резолвер не возвращает все IP-адреса для домена. Поэтому необходимо делать несколько запросов, чтобы получить все (или большинство) IP-адресов. Но опять же, невозможно узнать, сколько IP-адресов у домена. Мне ещё предстоит придумать решение этой проблемы. Кроме того, nim-ndns не поддерживает CNAME-записи. Поэтому, если у домена есть CNAME-запись, она не будет разрешена. Я жду ответа от автора по этому поводу.
На данный момент брутфорс пропускается, если найден возможный wildcard-поддомен. Это связано с тем, что если у домена есть wildcard-поддомен, брутфорс будет разрешать IPv4 для всех возможных поддоменов. Однако при этом будут пропущены и действительные поддомены (например, scanme.nmap.org будет пропущен, даже если он не является wildcard-значением). Позже я добавлю флаг --force-brute | -fb, чтобы принудительно выполнять брутфорс.
То же самое верно для перечисления VHost для входных поддоменов. Поскольку возвращаются URL-адреса, заканчивающиеся на заданный поддомен, поддомены аналогичных доменов не учитываются. Например, scannme.nmap.org не будет выведен для ack.nmap.org, но something.ack.nmap.org может быть. Я могу искать все поддомены nmap.org, но это противоречит цели использования поддомена в качестве входных данных.
Лицензия MIT. Полный текст см. в LICENSE.
--dns | -da.b.c.d — использовать DNS-сервер по адресу a.b.c.d на порту 53a.b.c.d#n — использовать DNS-сервер по адресу a.b.c.d на порту e--wordlist | -l — путь к файлу со списком слов. Используется для брутфорса поддоменов. Если файл недействителен, брутфорс будет пропущен. Вы можете получить список слов из SecLists. Список слов также предоставлен на странице релизов.--rps | -r — количество запросов в секунду во время брутфорса. Значение по умолчанию — 1024 req/s. Следует отметить, что DNS-запросы выполняются пакетами, и следующий пакет выполняется только после завершения предыдущего. Поскольку запросы могут быть ограничены по скорости, увеличение значения не всегда гарантирует более быстрые результаты.--out | -o — путь к выходному файлу. Вывод будет сохранён в формате JSON. Имя файла должно заканчиваться на .json.