Shodan. Поиск в глубинах интернета

Привет, друг. Использовать возможности поисковых систем в повседневной жизни, это вполне обыденная задача. Если нам нужна какая-то информация мы идем в Google, или любой другой поисковик по вкусу. И поисковик прекрасно справляется с поиском информации во всех ее проявлениях: тексты, видео, звук и т.д. Но, когда мы касаемся вопросов пентеста, очень часто так бывает, что нужно найти какое-то устройство. Или несколько устройств. И вот тут начинаются сложности. Вернее могли бы начаться, если бы не было Shodan. И именно про него мы сегодня и поговорим, а точнее научимся правильно его использовать.

Shodan. Поиск в глубинах интернета

Что такое Shodan? Его принято называть поисковиком по интернету вещей. Т.е., другими словами, это поисковая система которая ищет устройства подключенные к интернету. Устройства и информацию о них.

https://www.shodan.io/

Использовать Shodan немного сложнее чем тот же Google. Сложнее, до того момента пока ты не поймешь как он работает.

Как работает Shodan

Принцип работы Shodan, на самом деле, очень прост. Он ищет и собирает баннеры. Не те что на зданиях, а те которые описывают службу, используемую на устройстве. Баннер для Shodan это основная единица информации. Не только баннер конечно, но об этом чуть позже.

Один из примеров баннера — это баннер веб-сервера т.е. заголовок. Чтобы увидеть заголовок веб-сервера можно, например, ввести команду:

curl -I https://hacker-basement.com
curl

Что мы узнаем из этого заголовка? В первую очередь мы видим, что используется протокол HTTP. И код статуса 200.

По кодам статусов можно понять как реагирует сервер на запрос:
200 — все хорошо, запрос успешный;
300 — перенаправление на другую страницу;
400 — проблема с запросом;
500 — проблема с сервером.

После этого идет непосредственно сам заголовок. В котором содержится разнообразная техническая информация. Грубо говоря, смысл в том, что в абсолютно любом протоколе есть баннер. А в абсолютно любом баннере есть техническая информация. Она, конечно, отличается в зависимости от протокола, но смысл, я думаю, понятен. Именно эти данные и собирает Shodan. А учитывая что, очень часто, в баннере содержится довольно много данных описывающих само устройство, это может быть очень полезно. Помимо этого Shodan также собирает метаданные устройства. Например геолокацию, операционную систему и т.д.

Поиск

Перед тем как начинать работать с Shodan есть смысл там зарегистрироваться. Это имеет смысл хотя бы потому, что нам станет доступно больше результатов поиска, фильры и можем получить свой API ключ. Он понадобится нам немного позже. Сам процесс регистрации, я думаю, описывать не нужно. А потому переходим непосредственно к поиску.

shodan

Самый простой вариант поиска — это ввести название или производителя нужного нам устройства. Например если мы введем tp-link то справа увидим найденные устройства и их баннеры, а слева некоторые статистические данные, по которым также можно отфильтровать устройства. Также нужно помнить, что это не Google, а потому запрос для поиска обрабатывается как точное выражение, без всяких вариаций.

shodan

Только вот подобный поиск вряд ли может быть полезен из-за огромного количества результатов. Только если ты не занимаешься сбором статистики. Тут ещё нужно отметить, что по умолчанию Shodan показывает результаты собранные за последние 30 дней и ищет только по баннерам, не принимая в учет метаданные. Чтобы эту ситуацию исправить и конкретизировать результаты поиска нужно использовать фильтры.

Фильтры

Фильтры — это, по сути, просто конкретизация запроса. Они работают как уточнение запроса. Тут нужно учитывать, что чтобы максимально эффективно использовать Shodan нужно очень хорошо понимать: во-первых что ты хочешь найти, а во-вторых как работает нужное тебе устройство: какое программное обеспечение использует, какие у него бывают версии, какой протокол, ну и другую техническую информацию в зависимости от устройства. Хорошая новость в том, что, скорее всего, то что ты хочешь найти, уже кто-то когда-то искал, а значит он мог поделится своей методикой поиска и где-то опубликовать запрос который дал результат. Да и вообще для практики и тренировки неплохо будет изучить что и как люди ищут. Для этого Shodan собирает наиболее популярные запросы: https://www.shodan.io/explore/popular?page=1

Теперь более подробно о самих фильтрах. Как видишь запрос tp-link дал нам почти полтора миллиона результатов. Это, мягко говоря, многовато. Что бы сократить количество результатов, для начала мы можем отфильтровать их по стране. Для этого используется фильтр country и, после двоеточия, без пробелов указываем код страны.

Например: tp-link country:RU покажет результаты по России. Чтобы было легче использовать этот фильтр ниже таблица с кодами стран:

коды стран shodan

По такому же принципу работают и другие фильтры. Т.е. логика их использования такая: сначала указываем сам запрос, а потом пишем фильтр и через двоеточие, без пробела, значение для фильтра. Если значение состоит из нескольких слов то его нужно взять в кавычки.

запрос фильтр:значение

Наиболее популярные фильтры Shodan:

country: — покажет данные только по выбранной стране, например country:RU
city: — покажет данные только по выбранному городу, например city:Moskow
os: — найти определенную операционную систему, например os:linux
geo: — поиск по геопозиции, нужно указать координаты, например geo:»45.0746,39.0587″
port: — покажет результаты только по выбранному порту, например port:22
hostname: — будет искать только в определенной доменной зоне, например hostname:.ru
net: — поиск в заданном сетевом диапазоне, например net:190.73.40.50/24
product: — поиск по названию программы отдающей баннер, например product:openssh

Также нужно знать, что если мы хотим убрать из выдачи результаты по какому то фильтр, то перед фильтром нужно поставить знак минус, например если написать country:UA -city:Kiev, то нам покажет все результаты поиска по Украине, без результатов по Киеву. По такому же принципу это работает и с другими фильтрами.

Примеры поиска

Чтобы было более понятно, как все это работает давай посмотрим реальные примеры поиска. Давай, для примера найдем вебкамеры, в Москве, которые используют порт 8080:

webcam country:RU city:Moscow port:8080
shodan

Теперь, для разнообразия, давай найдем, например, сервера nginx, под управлением операционной системы Linux, с открытым портом 5000

nginx os:linux port:5000
shodan

Как видишь, таких серверов не мало. Полученные результаты мы можем дополнительно отфильтровать по параметрам которые мы видим в таблице слева. А если выберем какой-то конкретный результат, то увидим развернутую информацию о нем. В том числе IP-адрес, геопозицию, страну, какие порты открыты, какие службы эти порты используют, ну и кончено баннеры этих служб.

Я думаю, с тем как формировать запросы Shodan более-менее понятно. Это, кончено, один из самых важных моментов, но далеко не все о чем нужно и важно знать.

Shodan CLI

Работать с Shodan можно не только через сайт, но и прямо из терминала. Причем в некоторых ситуациях так даже удобнее и быстрее. Для начала нужно установить библиотеку Python для Shodan. Потом добавить свой API ключ, чтобы его получить нужно зарегистрироваться на сайте и перейти в раздел My Account.

sudo apt install python3-shodan
shodan init API
shodan

Вводим команду Shodan и видим справку по использованию.

shodan cli
Использование: shodan [OPTIONS] COMMAND [ARGS]…
Опции:
-h, --help Показать это сообщение и выйти.
Команды:
alert Управление сетевыми оповещениями для вашей учетной записи
convert Преобразовать указанный файл входных данных в другой формат
count Возвращает количество результатов поиска.
data Массовый доступ к Shodan
domain Просмотр всей доступной информации для домена
download Скачать результаты поиска и сохраните их в формате JSON
honeyscore Проверить, является ли IP-адрес приманкой или нет.
host Просмотр всей доступной информации по IP-адресу
info Показать общую информацию о вашей учетной записи
init Инициализировать командную строку Shodan
myip Показать внешний IP-адрес
org Управление доступом вашей организации к Shodan
parse Извлечь информацию из файлов JSON.
radar Карта некоторых результатов в реальном времени, когда их находит Shodan.
scan Сканирование IP/netblock с помощью Shodan.
search Поиск в базе данных Shodan
stats Показать сводную информацию о поисковом запросе
stream Потоковая передача данных в реальном времени.
version Версия для печати этого инструмента.

Это общая справка по Shodan. Также по каждой команде есть дополнительные фильтры и параметры которые можно указать. Например, что бы увидеть фильтры для команды search:

shodan search -h
shodan cli

Теперь давай разберемся как это все работает. Алгоритм в принципе довольно простой. Зависит, конечно, от ситуации, но в большинстве случаев можно начать с команды count, она покажет сколько всего результатов по интересующему нас запросу. Например, давай глянем сколько в России серверов nginx с открытым портом 443:

shodan count nginx port:443 country:RU
shodan cli

Видим из ответа, что таких серверов немерено. И лапатить такое количество, какие бы мы цели не преследовали, смысла нет. Запрос надо уточнять. Как видишь эта команда позволяет нам быстро оценить возможное количество результатов поиска.

Следующая команда которую придется применять частенько это download. Она позволяет сделать поиск по нашему запросу и скачать результаты в файл JSON, в котором каждая новая строка это новый баннер. По умолчанию скачивает первую тысячу результатов. Если нужно другое количество то используется параметр —limit.

shodan download nginx port:5555 country:RU
shodan cli

Если нужно обработать данные полученные командой download, используем команду parse, после которой перечисляем поля по которым хотим отфильтровать данные. Например:

shodan parse --fields ip_str,org,location nginx.json.gz
shodan cli

Следующая команда host. Позволяет просмотреть информацию о хосте.

shodan cli

Ну и одна из самых актуальных команд, просто потому что она позволяет делать то что мы перед этим делали в браузере т.е. искать. Пишем команду search и указываем нужный нам поисковый запрос, который формируем точно также как мы делали в браузере. Если нужно вывести результат только по определенным значениям добавляем параметр —fields. Т.е. также как мы делали при использовании команды parse.

shodan search webcam country:RU city:Moscow port:8080
shodan cli

Карты Shodan

Когда ты что-то ищешь в Shodan можно визуализировать расположение найденных результатов перейдя на Shodan Maps. Практическая полезность ситуативная, лично у меня ни разу такой необходимости не было. Но тем не менее такая возможность есть и знать о ней стоит.

shodan maps

Shodan Images

Shodan сохраняет себе все скриншоты которые ему попадаются. В основ это скрины удаленного доступа и камеры видеонаблюдения. Опять же практическая составляющая данной функции мне не совсем понятна. Но ради интереса заглянуть можно.

shodan images

Shodan Exploit

Ещё одна интересная особенность Shodan в том что он собирает уязвимости и эксплойты. Их поиск немного отличается, нам нужно указать платформу под которую мы хотим найти уязвимость и вид уязвимости. Например:

platform:windows type:exploit
shodan exploit

Ну, а на этом наше знакомство с Shodan можно считать оконченным. Как видишь возможности у него очень не слабые и в некоторых ситуациях он может быть очень полезен. Ну и не забывай возвращаться к нам, ведь есть ещё очень много что нам предстоит изучить.

Твой Pulse.