Censys IoT Shodan Дорки Поиск информации

Google, Shodan и Censys – 3 всадника хакапалипсиса. Учимся использовать “дорки” и поисковики чтобы найти уязвимые устройства.

Ни один эксперт ИБ не может позволить себе игнорировать проблемы постоянно расширяющегося мира Интернета вещей (IoT). В...

Google, Shodan и Censys – 3 всадника хакапалипсиса. Учимся использовать “дорки” и поисковики чтобы найти уязвимые устройства.

Ни один эксперт ИБ не может позволить себе игнорировать проблемы постоянно расширяющегося мира Интернета вещей (IoT). В данный момент уже работает более 10 миллиардов подключенных устройств. Но это не предел. Ожидается, что к 2025 году эта цифра достигнет 64 миллиардов.

Сегодня мы рассмотрим, как использовать Google, Shodan и Censys что бы найти эти самые устройства и узнаем, что с ними можно сделать.

Всадник первый – Google

Идея использования Google в качестве хакерского инструмента или платформы, безусловно, не нова, и хакеры годами используют эту невероятно популярную поисковую систему. Фактически, Google Dorks берет свое начало в 2002 году, когда человек по имени Джонни Лонг начал использовать пользовательские запросы для поиска элементов определенных веб-сайтов, которые он мог использовать для атаки. По сути, это именно то, чем является Google Dorks – способ использовать поисковую систему для определения сайтов, которые имеют определенные недостатки, уязвимости и конфиденциальную информацию, которой можно воспользоваться. Как примечание, некоторые люди называют Google Dorks как Google Hacking (это более или менее синонимичные термины).

Понимание операторов Google Dorks

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

Имейте в виду, что Google также знает, кто вы, когда вы выполняете этот вид запроса. По этой и многим другим причинам рекомендуется использовать его только с благими намерениями, будь то для собственных исследований или при поиске способов защиты вашего сайта от такого рода уязвимости.

Как и в простых математических уравнениях, программном коде и других типах алгоритмов, в Google Dorks есть несколько операторов, которые должны понимать начинающие “хакеры”. Их слишком много, чтобы включить в это руководство, но мы рассмотрим некоторые из наиболее распространенных:

Примеры дорков

intitle:”webcamXP 5″ inurl:8080 ‘Live’ ищет камеры с веб интерфейсом

intitle:NetworkCamera intext:”Pan / Tilt” inurl:ViewerFrame – еще один вариант найти камеры

inurl:8000 intext:”Copyright CANON INC. 2012″ – различный IoT

intext:”Welcome Admin” – думаю тут и так ясно

“create account” admin ext:cfg используя этот дорк можно найти пароли в конфигурации сайта

Вот еще несколько дорков, с их помощью можно найти файлы, хранящиеся на сервере:

intitle:”index of” “backup.bak”

intitle:”index of” “settings.yml”

intitle:”index of” “backup.yml”

intitle:”index of” “backup.bak”

intitle:”index of” “config.py”

Большинство дорков можно посмотреть тут Google Hacking Database и BullsEye0`s google dork list

Всадник второй – Shodan

Некоторые называют Shodan поисковой системой для хакеров и даже “самой опасной поисковой системой в мире”. Он был разработан Джоном Мазерли в 2009 году, и в отличие от других поисковых систем, он ищет конкретную информацию, которая может быть бесценной для хакеров.

В каком-то смысле Shodan похож на человека, который ходит по многоквартирному дому и стучится в каждую дверь. Вот только в роли дверей выступают адреса IPv4, а в роли дома — весь мир.

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

Он просматривает невидимые части Интернета, которые большинство людей никогда не увидят. Любое подключенное устройство может отображаться в поиске, в том числе:

Shodan выполняет сканирование 24/7, проверяя актуальность всех данных. Хотя большинству постоянных пользователей Интернета не понадобится Shodan, эксперты по кибербезопасности, научные исследователи и правительственные учреждения являются одними из самых активных пользователей этого движка.

Алгоритм, который использует Shodan, работает так:

  1. Генерация случайного IPv4-адреса.
  2. Сбор в режиме реального времени списка подключенных устройств имеющим доступ в интернет
  3. Запрос поддерживаемых портов.
  4. Проверка IPv4-адреса порта.
  5. Сервисный баннер.
  6. Повторение.

Баннеры службы, упомянутые в шаге 5 выше, содержат все метаданные, относящиеся к конкретному устройству. Например, Shodan может с помощью сервисного баннера сканировать:

Если для вас это звучит страшно, вы в этом не одиноки.

Теперь разберем как нам его использовать

Для начала вам нужно зарегистрироваться и уже после в личном кабинете взять API ключ, он нам будет нужен для сканера, который мы напишем на Python.

Если вы хотите использовать Shodan “на полную”, вам стоит купить подписку, ведь на бесплатном аккаунте вы не можете заходить дальше, чем на две странницы.

Вот примеры поиска, их можно фильтровать с помощью следующих конструкций:

А теперь перейдём к написанию сканера, для этого нам понадобиться установить библиотеку от Shodan-a, командой:

pip3 install shodan

Когда вы все сделали нужно создать файл API_KEY.py (название может быть любым, но для удобства я сделал такое) и поместить туда строку:

api_key = 'Ваш API ключ'

Теперь сделаем сам скрипт сканирования (userdork.py):

Импортируем нужные библиотеки, в частности наш API_KEY.py

import shodan
import datetime
import time
import os
from API_KEY import api_key

Создадим функцию userdork и сделаем нужные переменные вместе с возможным исходом, когда пользователь остановил работу программы:

# OwnUserDork
def userdork():
userdork = input("Enter dork for searching:") # Переменная с дорком для Shodan
api = shodan.Shodan(api_key)  # API ключ
date = datetime.datetime.today().strftime("%H.%M.%S-%d-%m")# Переменная с текущим временем
pages_start = int(input('[?] Start scanning from page : ')) # Странница с которой сканер будет начинать
pages_stop = int(input('[?] Stop scanning on page : ')) # Странница на которой сканер закончит
results_file = r'logs/ips-' + date + "-SHODAN-" + '.txt' # Переменная с именем файла для результатов

print('[?] If you press Ctrl + C scanning will be stopped!')

for page in range(pages_start, pages_stop, 1):
   try:
       print('[' + str(page) + '/' + str(pages_stop) + '] Loading page results... ')
       time.sleep(1)
       results = api.search(userdork, page=page)  # Переменная с запросом для сканирования 

except KeyboardInterrupt: # Сканирование остановиться если нажато CTRL + C
   print('\n[!] (Ctrl + C) detected.. Stopping...') # Сообщение о том что сканирование остановлено
   break
except shodan.exception.APIError as error: # Если будет ошибка с API мы ее выведем
   print('[EXCEPTION] ' + str(error))
   time.sleep(3)
   continue

Сейчас нам нужно записывать результаты (переменная results) в txt файл:

else:  # Записываем результаты в txt файл
    for result in results['matches']:
        with open(results_file, 'a') as file:  # Открываем txt файл в режиме append
            file.write(result['ip_str'] + '\n')  # Записываем результат в файл

Создадим простой алгоритм показа результатов, если пользователь нажал y или yes, то мы из файла с результатами берем массив ip и показываем ему, если n или no – пишем, что данные были сохранены в файл и при желании с ними можно ознакомиться:

# Показывает результаты по выбору пользователя
if os.path.exists(results_file):
    print('\n[+] Okay, all results from page ' + str(pages_start) + ' to page ' + str(pages_stop) + ', was saved to ' + results_file)
    if input('[?] Show downloaded results? (y/n) : ').lower() in ('y', 'yes', 'true', '1', '+'):
        with open(results_file, 'r') as file:  # Открываем файл для чтения
            lines = file.readlines()  # “читаем” что в нем находиться
            for line in lines:
                print(line.replace('\n', ''))
        print('[+] Saved ' + str(len(lines)) + ' ips')  # Тут мы выводим содержимое файла

Перейдем к созданию main, то есть, главного файла с который сможем добавить в фреймворк (который мы писали тут Пишем свой фреймворк. Упрощаем работу с Metasploit и Aircrack-ng. Python + Bash) и уже с него запускать сканирование, назовём файл ShodanScanner.py:

from tools.userdork import userdork
import os
import platform
logo = (r"""
      * Find and Exploit                 Created by F4RB3R
    """)
# Создаем папку logs если ее нету
if not os.path.exists('logs'):
    os.mkdir('logs')

Функция shodanscanner:

# Main
def shodanscanner():
    try:
        if platform.system() == "Windows":
            os.system("@cls")
        else:
            os.system("clear") 
        print(logo)

        print('''
        [1] Vulnerable FTP
        
        [2] Android Debug Bridge
        
        [3] HP Printers
        
        [4] Own search dork
        
        [99] Exit
        ''')
# Простое меню, если выбрана клавиша 1, то запускаем функцию ftpscanner() и тд.
        menu_option = int(input('[OPTION] ==> '))
        if menu_option == 1:
            ftpscanner()
        elif menu_option == 2:
            androiddb()
        elif menu_option == 3:
            printerhp()
        elif menu_option == 4:
            userdork()
        else:
            exit()
            print('[$] Created by F4RB3R with Love.')

    except KeyboardInterrupt:
        print('\n[!] (Ctrl + C) detected.. Stopping...')
        print('[$] Created by F4RB3R with Love.')

Всадник теретий – Censys

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

Censys собирает данные о хостах и ​​веб-сайтах посредством ежедневного сканирования ZMap и ZGrab адресного пространства IPv4, в свою очередь, поддерживая базу данных о конфигурации хостов и веб-сайтов. Исследователи могут взаимодействовать с этими данными через интерфейс поиска, построитель отчетов и механизм SQL.

Вы можете искать записи, которые соответствуют определенным критериям (например, хосты IPv4 в Германии или доверенные сертификаты браузера для github.com), создавать отчеты о настройке веб-сайтов (например, какие наборы шифров выбирают популярные веб-сайты?) и отслеживать, как сети патчились с течением времени.

Если вы просто ищете слово или фразу, Censys вернет все записи, содержащие фразу. Например, поиск nginx вернет все записи, содержащие слово nginx. Поиск 23.0.0.0/8 вернет все хосты в этой сети.

Сканер для Censys

Что бы получить API ключ вам нужно создать аккаунт и в разделе My Account.

Устанавливаем библиотеку:

pip install censys

Создаем файл CensysScanner.py и в нем импортируем библиотеки:

import censys.certificates
import censys.ipv4
import censys.data
import datetime
import os

Создаем функцию, которую позже добавим в наш фреймворк:

def censysscanner():
    date = datetime.datetime.today().strftime("%H.%M.%S-%d-%m")  # Переменная с текущим временем
    results_file = r'logs/ips-' + date + "-CENSYS-" + '.txt'  # Имя файла
    if not os.path.exists('logs'):  # Проверка существует ли директория logs
        os.mkdir('logs')
    try:
        records = input("How many records do you want?\n")  # Переменная в которой будем хранить желаемое количество записей
        country = input("Enter country\nExample: Russia\n")  # Переменная с названием страны

Теперь нам нужен API ID и Secret, их вставляем в поля ниже:

c = censys.ipv4.CensysIPv4(api_id="API ID", api_secret="SECRET")

# Запрос
c.report(""" "welcome to" AND tags.raw: "http" """, field="80.http.get.headers.server.raw", buckets=5)

# Метод view позволяет увидеть полный JSON для IP-адреса
c.view('8.8.8.8')

# Метод поиска позволяет искать в индексе
for result in c.search("80.http.get.headers.server: Apache AND location.country: " + country, max_records=int(records)):
    print(result)
# При желании вы можете указать, какие поля вы хотите использовать для результатов поиска
    IPV4_FIELDS = ['ip',
    'updated_at',
    '80.http.get.title',
    '443.https.get.title',
    '443.https.tls.certificate.parsed.subject_dn',
    '443.https.tls.certificate.parsed.names',
    '443.https.tls.certificate.parsed.subject.common_name',
    '443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names',
    '25.smtp.starttls.tls.certificate.parsed.names',
    '25.smtp.starttls.tls.certificate.parsed.subject_dn',
    '110.pop3.starttls.tls.certificate.parsed.names',
    '110.pop3.starttls.tls.certificate.parsed.subject_dn']

    data = list(c.search("80.http.get.headers.server: Apache AND location.country: " + country, IPV4_FIELDS, max_records=int(records)))  # Перемнная с IP которую мы запишем в txt файл
    print(data)
    with open(results_file, 'a', encoding='utf-8') as file:  # Открываем файл в режиме append
        file.write(str(data))  # Записываем в него данные из переменной data

except KeyboardInterrupt:
    print('\n[!] (Ctrl + C) detected.. Stopping...')




Что можно сделать с полученными ip?

Я покажу несколько примеров используя наш фреймворк (https://github.com/f4rber/CyberSecFramework), в нем есть готовые скрипты, которые сегодня мы разбирали, вы можете скачать и использовать их в ознакомительных целях. Именно они нам и пригодятся для показа того, на сколько уязвимой может быть система.

Выбираем 6, то есть Shodan Scanner, после этого у нас появилось окно с самим сканером:

Здесь выберем 4 и после введем nostromo, таким образом мы укажем дорк для Шодана по которому он найдет нам nhttpd веб сервера, будет предложен выбор странницы с какой начать и на какой остановить сканирование, я выбрал 1 и 2 соответственно.

Мы получили список ip в папке logs, теперь можно использовать эксплоит что бы найти уязвимый к CVE 2019-16278 сервер. 

Таким образом мы нашли уязвимый сервер и проверили на защищенность. Но есть и другие способы использовать Шодан, например найти FTP без авторизации (ftp 230):

Или вебкамеры (webcam port:80):

Хотя китам киберпреступного мира Shodan и Censys малоинтересны, многие другие люди уже опробовали их возможности и устроили с их помощью немало неприятностей.

Например DdoS-еры активно используют эти сервисы для поиска уязвимых устройств, которые можно превратить в “зомби”. Также с помощью дорков зачастую можно идентифицировать наличие уязвимых плагинов в интернет-магазинах. К сожалению, администраторы очень часто об этом забывают, не говоря уже о пользователях, которые не обновляют “прошивки” своих устройств годами.

И хотя уязвимый Интернет вещей — это в первую очередь проблема производителей этих вещей, нам с вами тоже не стоит забывать о безопасности.

Вся информация предоставлена исключительно в ознакомительных целях. Мы настоятельно рекомендуем не злоупотреблять полученными знаниями и использовать навыки с благими намерениями.

В этой стать мы лишь узучаем уязвимости систем и не в коем случае не призываем совершать противоправные действия.

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.