Пошук і веб-інтерфейси Shodan Частина 2.

07.10.2025 3 хвилин Автор: Cyber Witcher

Друга частина присвячена пошуковим можливостям Shodan. У ній детально описано структуру пошукових запитів, синтаксис фільтрів і принцип роботи пошукового рушія. Окремо розглядаються карти Shodan, стилі візуалізації, уразливості, а також модуль роботи з веб-компонентами та інтерфейсами. Ви навчитеся ефективно формувати запити, знаходити нестандартні служби й аналізувати результати. Додані приклади практичних вправ і зовнішніх інструментів для розширення функціоналу.

Зовнішні інструменти

Інтерфейс командного рядка Shodan

Інтерфейс командного рядка Shodan (CLI) постачається разом з офіційною Python-бібліотекою Shodan. Це означає, що якщо ви користуєтеся найновішою версією бібліотеки, то у вас уже є доступ до CLI. Для встановлення нового інструмента потрібно виконати команду:

easy_install shodan

Після завершення встановлення інструмент необхідно ініціалізувати вашим ключем API:

shodan init YOUR_API_KEY

API-ключ для свого облікового запису можна отримати на сайті https://account.shodan.io

alert

Команда alert дає змогу створювати, переглядати, очищати та видаляти сповіщення мережі. Вона використовується для моніторингу змін у вашому середовищі або для отримання попереджень про нові пристрої в межах заданої IP-мережі.

convert

Команда convert перетворює стиснений JSON-файл, створений Shodan, у інші формати файлів. На цей момент підтримується конвертація у формати kml та csv. Це зручно, коли потрібно представити результати у вигляді таблиці або нанести їх на карту.

count

Команда count показує кількість результатів, які відповідають певному пошуковому запиту. Приклад використання:

shodan count microsoft iis 6.0

Результат:

5360594

Цей приклад показує кількість серверів Microsoft IIS 6.0, знайдених у базі даних Shodan.

download

Команда download виконує пошук у Shodan і зберігає результати у файл, де кожен рядок містить окремий JSON-банер. За замовчуванням завантажується лише 1000 результатів. Якщо потрібно більше, можна скористатися прапорцем –limit.

Команда download є однією з найчастіше використовуваних, оскільки дозволяє не тільки отримати результати, але й зберегти їх для подальшої обробки командою parse. Оскільки перегортання результатів витрачає ваші query credits, доцільно зберігати дані локально, щоб не витрачати кредити повторно під час повторних запитів.

host

Перегляд інформації про хост: його географічне розташування, відкриті порти та організацію, якій належить IP-адреса.

Приклад:

$ shodan host 189.201.128.250

honeyscore

honeyscore — перевіряє, чи є IP-адреса honeypot’ом, тобто системою, що імітує промисловий пристрій для виявлення спроб атак.

Приклад:

$ shodan honeyscore 41.231.95.212

info

info — показує основну інформацію про ваш тариф API, зокрема кількість запитів і сканувань, що залишилися у цьому місяці.

Приклад:

$ shodan info Query credits available: 5102 Scan credits available: 249

myip

myip — показує вашу зовнішню IP-адресу, з якої ви виходите в інтернет.

Приклад:

$ shodan myip 199.30.49.210

parse

parse — використовується для аналізу файлу, отриманого за допомогою команди download. Дозволяє відфільтрувати потрібні поля, конвертувати JSON у CSV і легко інтегрується з іншими скриптами.

Приклад:

$ shodan parse --fields ip_str,port,org --separator , microsoft-data.json.gz

scan

Команда scan надає доступ до кількох підкоманд, найважливішою з яких є submit, що дозволяє запускати сканування через Shodan.

Приклад:

$ shodan scan submit 202.69.165.20

search

Команда search дозволяє здійснювати пошук у Shodan і переглядати результати безпосередньо в терміналі. За замовчуванням вона відображає IP-адресу, порт, імена хостів та інші дані. За потреби можна скористатися параметром --fields, щоб вивести лише ті поля банера, які вас цікавлять.

$ shodan search --fields ip_str,port,org,hostnames microsoft iis 6.0

stats

Команда stats дозволяє задати фасети для пошукового запиту. Наприклад, така команда покаже країни, у яких знаходиться найбільше вебсерверів Apache:

$ shodan stats --facets country apache
Top 10 Results for Facet: country
US 8,336,729
DE 4,512,172
CN 1,470,434
JP 1,093,699
GB 832,221
NL 684,432
FR 667,871
CA 501,630
RU 324,698
BR 266,788

stream

Ця команда надає доступ до перегляду потоку даних, що збираються сканерами Shodan.

Команда підтримує багато різних прапорців, однак справді важливо згадати тільки три з них:

--datadir

Прапорець --datadir дозволяє вказати папку, куди буде зберігатися потік даних. Файли, згенеровані в цій директорії, матимуть формат імен: YYYY-MM-DD.json.gz. Наприклад, файл може називатися 2016-01-15.json.gz. Щодня під час прийому потоку автоматично створюється новий файл, поки ви не вимкнете запис. Команда, що завантажує всі дані потоку в реальному часі та зберігає їх у /var/lib/shodan/:

shodan stream --datadir /var/lib/shodan/

--limit

Прапорець --limit задає, скільки результатів буде завантажено. За замовчуванням команда stream працює безкінечно, поки ви її не зупините. Якщо потрібно зібрати лише зразок даних, цей прапорець обмежить кількість записів. Наприклад:

shodan stream --limit 100

Ця команда приєднається до потоку, виведе перші 100 отриманих результатів і потім завершить роботу.

--ports

Цей прапорець приймає список портів, розділених комами, і дозволяє приймати в реальному часі тільки дані з цих портів. Наприклад, щоб приймати банери тільки з портів 80 і 8080, використайте:

shodan stream --ports 80,8080

Приклад: аналіз мережі

Shodan допомагає швидко зрозуміти, які сервіси доступні в публічній мережі. Наприклад, щоб підрахувати всі сервіс-банери в підмережі 78.13.0.0/16, запустіть:

shodan count net:78.13/16

У прикладі результат — 4363, тобто приблизно 4 363 банери.

Далі корисно подивитися, які порти найчастіше відкриті. Простий запит для цього:

shodan stats --facets port net:78.13/16

Він поверне топ-портів (наприклад: 7547, 80, 443, 8080 і т.д.). Щоб отримати повніший список фасетів, можна збільшити ліміт повернених портів:

shodan stats --facets port:100000 net:78.13/16

У прикладі виявлено понад 1000 унікальних портів — це дає ширшу картину розподілу сервісів.

Особливу увагу варто звернути на найпоширеніші порти: порт 7547 (часто пов’язаний з модемами і TR-069) потребує перевірки через відомі проблеми безпеки; також багато веб-серверів працює на нестандартних портах (8080, 81, 82, 8443 тощо). Щоб побачити, які веб-сервери працюють поза портами 80/443, використайте:

shodan stats --facets product "HTTP net:78.13/16 -port:80,443"

(запит в лапках, щоб -port не трактувався як флаг shell).

Нарешті, перевірте використані версії SSL/TLS для сервісів з SSL:

shodan stats --facets ssl.version HTTP net:78.13/16

У прикладі домінують tlsv1, tlsv1.2, tlsv1.1, але також зустрічаються застарілі sslv3/sslv2 — їх варто відфільтрувати або оновити конфігурації.

Короткий висновок: почніть з підрахунку (count), подивіться розподіл портів (stats --facets port), дослідіть сервіси на нестандартних портах і перевірте SSL-версії. Це дасть швидку і практичну картину безпеки публічної мережі.

Схоже, ці пристрої NetGear — основні користувачі служб у цій мережі, сумісних із SSLv2.

Приклад: дослідження Telnet. Припустимо, ми хочемо дослідити пристрої в Інтернеті, які використовують Telnet. З’єднаємо попередні команди так:

mkdir telnet-data shodan stream --ports 23,1023,2323 --datadir telnet-data/ --limit 10000

Спочатку створюємо папку telnet-data для збереження даних Telnet. Потім запитуємо 10 000 записів (--limit 10000) з потоку даних для стандартних Telnet-портів (--ports 23,1023,2323) і зберігаємо результати в папку telnet-data/ через --datadir.

Аддон Maltego

Maltego — це програма з відкритим кодом, призначена для збору, аналізу й візуального дослідження даних із різних джерел.

Аддон Shodan для Maltego надає 2 нових сутності (entities) – Service та Exploit та 5 нових перетворень (transforms):

  • searchShodan

  • searchShodanbyDomain

  • searchShodanbyNetblock

  • toShodanHost

  • searchExploits

Shodan — огляд можливостей і практичні приклади

Shodan — це платформа, орієнтована на API, яка збирає банери й метадані про публічно доступні в інтернеті сервіси. Вона дозволяє автоматизовано отримувати ту саму інформацію, що й через веб-інтерфейс, але у вигляді, зручному для обробки скриптами та інтеграцій. REST API служить для пошуку, отримання відомостей про хости, роботи з фасетами та інших допоміжних операцій, тоді як Streaming API надає «сиру» стрічку банерів у реальному часі — її використовують для моніторингу і великих дослідницьких задач. Зауважте: доступ до повного стріму зазвичай вимагає платної підписки або ліцензії даних.

Обмеження використання

У Shodan є кілька типів лімітів, які залежать від тарифного плану. По-перше, query credits (пошукові кредити) — вони витрачаються при запитах з фільтрами або при переході на наступні сторінки результатів; простий запит без фільтрів може не списувати кредити, а запит типу apache country:us і перехід на сторінку 2 вже списують. По-друге, scan credits — кожен on-demand-скан запитується через API і витрачає кредит на один запит сканування. По-третє, alerts — кількість мережевих оповещень (і кількість IP/діапазонів у них) обмежується планом; максимум — ~100 оповещень на акаунт. Важливо пам’ятати, що query і scan кредити відновлюються на початку місяця, тому плануйте дослідження відповідно.

Фасети — як швидко отримати картину

Facets (фасети) дають агреговану статистику по області інтересу — наприклад, розподіл портів, версій SSL/TLS, відбитків SSH тощо. Якщо пошук повертає багато результатів, фасети дозволяють «побачити здалеку» основні патерни та вузькі місця: які порти найпоширеніші, які продукти виявлені найчастіше, які версії протоколів використовуються. Через API і CLI ви можете вказати потрібні фасети та отримати зрізи статистики — це часто перший крок перед глибинним аналізом або вибірковим скачуванням даних.

Початок роботи з Python

Щоб працювати з API у Python, встановіть офіційну бібліотеку:

easy_install shodan
# або оновлення
easy_install -U shodan

Ініціалізація проста — передайте ваш API-ключ:

import shodan
api = shodan.Shodan('YOUR API KEY')

Ключ можна отримати в акаунті: https://account.shodan.io. Після цього ви готові виконувати пошуки, отримувати деталі хостів і працювати з фасетами через зручні методи бібліотеки. Рекомендується завжди обгортати виклики в try/except, щоб коректно обробляти помилки API та не зупиняти виконання скрипту.

Приклад пошуку і перебору результатів

Один із базових прикладів — пошук по слову і вивід IP та банерів:

try:
    results = api.search('apache')
    print('Results found: %s' % results['total'])
    for result in results['matches']:
        print('IP: %s' % result['ip_str'])
        print(result['data'])
        print('')
except shodan.APIError as e:
    print('Error: %s' % e)

За замовчуванням кожна сторінка містить до 100 банерів; щоб перейти на іншу сторінку, використовуйте параметр page=. Якщо потрібно послідовно перебрати всі банери без фасетів, зручно використовувати api.search_cursor('apache') — це полегшує автоматичну обробку великої кількості результатів.

Інформація про хост і історія

Щоб дізнатися, що Shodan знайшов по конкретному IP, використовуйте api.host():

host = api.host('217.140.75.46')
print("IP: %s\nOrganization: %s\nOS: %s" %
      (host['ip_str'], host.get('org','n/a'), host.get('os','n/a')))
for item in host['data']:
    print("Port: %s\nBanner: %s" % (item['port'], item['data']))

За бажанням можна отримати повну історію банерів за IP, передавши history=True; це поверне вже неактивні служби і допоможе відновити минулі конфігурації або виявити колишні вразливості.

On-demand сканування

Якщо потрібно просканувати мережу негайно, Shodan підтримує on-demand-скани через API:

scan = api.scan('198.20.69.0/24')
# або список мереж
scan = api.scan(['198.20.49.30', '198.20.74.0/24'])

Це асинхронний процес: після ініціації ви отримаєте id завдання, кількість IP у скані (count) і credits_left — залишок кредитів для сканувань. Використовуйте id для моніторингу стану і подальшої обробки отриманих результатів.

Streaming API — реальний час

Streaming API повертає потік банерів у реальному часі — це «сирий» стрім, без можливостей пошуку всередині нього. Його використовують для моніторингу нових виявлень або для відслідковування специфічних шаблонів (вразливостей, певних продуктів). Приклад фільтрації по CVE:

def has_vuln(banner, vuln):
    return 'vulns' in banner.get('opts', {}) and vuln in banner['opts']['vulns']

for banner in api.stream.banners():
    if has_vuln(banner, 'CVE-2015-0204'):
        print(banner)

Зверніть увагу: стандартні плани часто дають доступ лише до невеликої частини стріму (~1%), повний доступ вимагає покупки Data License.

Alerts — мережеві оповіщення і підписка на стрім

Alerts — це зручний спосіб відслідковувати події для конкретних мережевих діапазонів. Створення оповіщення:

alert = api.create_alert('Production network', '198.20.69.0/24')
# або декілька діапазонів
alert = api.create_alert('Prod+Staging', ['198.20.69.0/24','198.20.70.0/24'])

Оповідання можна робити тимчасовим, зазначивши expires. Після створення ви отримуєте id — підписуйтесь на нього і обробляйте банери так само, як у стандартному стрімі:

for banner in api.stream.alert(alert['id']): print(banner)

Через CLI можна швидко створювати, видаляти та експортувати оповіщення; це зручно для оперативного моніторингу виробничих мереж.

Приклад — аналіз публічних MongoDB

Через роки, коли MongoDB часто не вимагала аутентифікації, багато екземплярів опинилися відкритими в інтернеті. Shodan захоплює банери таких інстансів — у банері містяться метадані про версію, списки баз, загальний totalSize тощо. Для масового завантаження банерів:

shodan download --limit -1 mongodb-servers.json.gz product:mongodb

Потім локально обробляємо файл: ітеруємо записи, витягаємо JSON-частину банера, сумуємо totalSize і підраховуємо найпоширеніші імена баз даних. Простий скрипт дасть підсумок у вигляді людського формату (GB/TB/PB) і топ-10 імен баз, що допомагає оцінити обсяг опублікованих даних.

Практичний робочий процес дослідження

Рекомендований підхід для розвідки публічної поверхні мережі: спочатку зробіть оцінку масштабу (shodan count net:... або api.search), потім зберіть агрегати через shodan stats --facets (порти, продукти, ssl.version), визначте аномалії (нестандартні порти, старі SSL/SSH, публічні БД), завантажте необхідні результати (shodan download) і обробіть їх локально скриптами. Після цього налаштуйте alerts для безперервного моніторингу змін і автоматизуйте рутинну обробку результатів.

Висновок

Shodan — це не просто пошукова система для пристроїв в інтернеті, а потужний інструмент аналітики, який поєднує зручність командного рядка, гнучкість API і глибину даних про глобальну інфраструктуру. Використовуючи CLI, REST API та Streaming API, можна ефективно відстежувати відкриті порти, сервіси, вразливості, аналізувати мережі та навіть створювати власні системи моніторингу безпеки.

Завдяки фасетам, алертам і можливості працювати з потоковими даними у реальному часі, Shodan стає інструментом стратегічного рівня — як для фахівців із кібербезпеки, так і для дослідників інфраструктури. При правильному використанні він дозволяє не лише виявляти ризики, а й запобігати потенційним інцидентам, знаходити помилки конфігурацій і відстежувати зміни в мережі.

Сьогодні Shodan є однією з базових платформ для OSINT, пентесту та моніторингу відкритих сервісів у всьому світі. Освоївши його інтерфейс і API, ви фактично отримуєте доступ до «рентгену» інтернету — здатного показати, що приховано за мільйонами IP-адрес і портів.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.