Как узнать имена хостов для большого количества IP адресов

В этой статье мы рассмотрим как пользоваться программой HostHunter, которая умеет определять имена хостов для большого количества IP адресов. Хотя HostHunter в первую очередь предназначена для работы именно с большим массивом IP, но при желании, можно использовать для поиска хостов и единичных IP адресов, поскольку этот скрипт задействует свои собственные техники поиска информации. Также мы рассмотрим как в командной строке Linux генерировать файлы с IP в формате, который поддерживает HostHunter.

А начнём мы с обзора других техник получения имени хоста (домена, названия сайта) из IP адреса.

Как узнать сайт по IP

Первый способ получения имени хоста по IP основывается на PTR записи. Из неё информация может быть получена с помощью утилит nslookup или dig с опцией -x:

dig -x 185.117.153.79

Или:

nslookup 185.117.153.79

Больше подробностей в соответствующей теме форума.

Другой способ основывается на использовании большого массива собранных данных, доступ к которым можно получить через securitytrails.com и, например, SuIP.biz:

Поиск хостов по большому количеству IP

Здесь на помощь нам приходит HostHunter, эта программа на входе получает файл со списком IP и ищет имя хоста для каждого из них. Эта программа использует Hacker Target API и Bing.com.

Для установки программы HostHunter в Kali Linux:

git clone https://github.com/SpiderLabs/HostHunter
cd HostHunter
sudo pip3 install -r requirements.txt
sudo pip3 install selenium

При установке таким образом для запуска нужно будет переходить в папку с программой:

cd HostHunter

И запускать так:

python3 hosthunter.py -h

Для получения последующих обновлений программы:

cd HostHunter
git pull

Для установки HostHunter в BlackArch:

sudo pacman -S hosthunter

В BlackArch для запуска достаточно указать имя программы:

hosthunter -h

Программа работает только с файлами, содержащих список IP адресов. У меня список адресов сохранён в файле ip.txt, тогда для запуска программы нужно набрать:

hosthunter ip.txt

Программа начала работу, как можно увидеть, для каких-то IP имена хостов существуют, а некоторые IP просто не используются:

Программа по умолчанию сохраняет результаты в файл .csv (таблицы):

В файле результатов содержится информация только о тех IP, для которых найдены значения имени хоста. Как можно увидеть, в таблице предусмотрены поля "Domains","Operating System","OS Version","Notes", но на данный момент сбор этой информации ещё не реализован.

При повторном запуске, программа спросит:

vhosts.csv file already exists, would you like to overwrite it?
Answer with [Y]es or [N]o : Y

То есть файл vhosts.csv с результатами уже существует, вы можете выбрать опцию перезаписать этот файл (Y) или остановить запуск (N).

Используя опцию -f TXT можно установить текстовый формат для сохранения полученных данных:

hosthunter -f TXT ip.txt

Обратите внимание, что при использовании опции -f TXT данные также сохраняются в файл vhosts.csv — меняется только формат (содержимое) файла — туда сохраняются найденные хосты без какой-либо дополнительной информации — по одному хосту на строку.

Кстати, используя опцию -o можно указать другое имя файла:


hosthunter -o hostnames_list.csv ip.txt

А с помощью опции -b можно подключить модуль Bing для дополнительного поиска:

hosthunter -b ip.txt

Пример использования опции -b:

Результатов чуть больше и иногда в них действительно появляются новые хосты, но иногда добавляются только ссылки на внутренние страницы.

При использовании этой опции дополнительные данные сохраняются в файл webapps.txt.

В качестве бета-функции в программу добавлена возможность собирать скриншоты, для включения этого модуля используйте опцию -sc:

hosthunter -sc ip.txt

Скриншоты сохраняются в папке ./screen_captures/. Пример собранных скриншотов:

Как можно увидеть, делается попытка снять скриншот с каждого IP адреса, независимо от того, удалось для него узнать имя хоста или нет. При этом для каждого IP делается попытка получить скриншот на портах 80, 443, 8080.

Если вы хотите извлечь только хосты из файла vhosts.csv, то для этого выполните команду:

awk -F '","' '{print $3}' vhosts.csv

Некоторые строки могут содержать сразу несколько хостов, перечисленных через запятую, если вы хотите, чтобы каждый хост был на отдельной строке, то сделайте так:

awk -F '","' '{print $3}' vhosts.csv | tr "," "\n"

Если вам сильно нужно, то вы можете использовать HostHunter даже для поиска имени хоста одного единственного IP адрса:

echo '185.117.153.79' | hosthunter /dev/stdin

Этот фокус не сработает, если файл vhosts.csv уже присутствует.

Как составить список IP адресов — каждый адрес на новой строке

HostHunter поддерживает только файлы, в которых каждый IP перечислен на отдельной строке — запись с использованием масок и диапазонов не поддерживается.

Такие списки IP могут быть собраны в процессе исследования периметра. Но иногда нужно сгенерировать подобные файлы если известен целевой диапазон. Возьмём такой пример: сайт SuIP.biz размещается на IP 185.117.153.79, по тем или иным причинам, я хочу узнать, какие хосты являются его соседями. То есть меня интересуют все хосты, находящиеся в диапазоне от 185.117.153.1 до 185.117.255.

В этом случае для генерирования списка IP можно использовать такое свойство оболочки Bash как диапазоны. Если в фигурных скобках указать через две точки два символа, то оболочка сама перечислит все варианты в этом диапазоне. Чтобы было понятно, вот примеры:

echo {a..c}
a b c

echo {a..x}
a b c d e f g h i j k l m n o p q r s t u v w x

echo {x..g}
x w v u t s r q p o n m l k j i h g

echo {0..7}
0 1 2 3 4 5 6 7

Думаю, в них всё очевидно.

Для генерации списка IP адресов в диапазоне 185.117.153.1-255 можно выполнить:

echo 185.117.153.{1..255}

Но проблема в том, что адреса разделены пробелом, а не символов новой строки. Поэтому нам нужно сделать замену каждого пробела на новую строку:

echo 185.117.153.{1..255} | tr " " "\n"

Теперь, когда мы убедились, что всё нормально, перенаправляем полученный вывод для сохранения адресов в файл:

echo 185.117.153.{1..255} | tr " " "\n" > ip.txt

Если нужны диапазоны в других октетах, то это делается аналогично. Например, я хочу составить диапазон адресов 185.117.151-155.1-255, тогда:

echo 185.117.{151..155}.{1..255} | tr " " "\n"

Если диапазон указан с помощью маски, например: 185.117.153.0/20, то не все могут навскидку сказать, какие адреса туда входят, для этого воспользуйтесь программой sipcalc:

sipcalc 185.117.153.0/20

Будет выведено примерно следующее:

-[ipv4 : 185.117.153.0/20] - 0

[CIDR]
Host address		- 185.117.153.0
Host address (decimal)	- 3111491840
Host address (hex)	- B9759900
Network address		- 185.117.144.0
Network mask		- 255.255.240.0
Network mask (bits)	- 20
Network mask (hex)	- FFFFF000
Broadcast address	- 185.117.159.255
Cisco wildcard		- 0.0.15.255
Addresses in network	- 4096
Network range		- 185.117.144.0 - 185.117.159.255
Usable range		- 185.117.144.1 - 185.117.159.254

В этом выводе найдите строку начинающуюся с Network range — она и будет содержать диапазон в более понятной записи, например, 185.117.144.0 — 185.117.159.255.

Вы уже знаете о факультете информационной безопасности от GeekBrains? Комплексная годовая программа практического обучения с охватом всех основных тем, а также с дополнительными курсами в подарок. По итогам обучения выдаётся свидетельство установленного образца и сертификат. По этой ссылке специальная скидка на любые факультеты и курсы!

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.