
# **Цель практической работы**
Целью практической работы является подбор логина и пароля для развёрнутого ssh-сервера с помощью инструмента под названием SSHprank (словари с предполагаемыми логинами и паролями составляются с помощью pwdlogy и crunch). Помимо этого, в работе изучается как утилита masscan работает совместно с утилитой nmap.
По окончании данной работы будут получены навыки составления словарей с помощью двух утилит (pwdlogy и crunch), навыки подбора пароля для развёрнутого SSH-сервера с помощью инструмента SSHprank, а также навыки работы с утилитой masscan, которая работает совместно с утилитой nmap.
# **1 Развёртывание SSH-сервера**
Запустим машину №1, на которой должен располагаться SSH-сервер (сделаем скриншот полного экрана, чтобы доказать, что работа была выполнена в действующий период обучения). Попытаемся скачать метапакет SSH и обнаружим, что всё уже установлено (SSH входит в базовую комплектацию дистрибутива). Далее проверим статус SSH-сервера, увидим, что он функционирует исправно. Переименуем машину №1 так, чтобы было видно, что на ней работает SSH-сервер и перезапустим её. Описанные действия в данном абзаце проиллюстрированы на рис. 1-3.

Рисунок 1 – Скачиваем метапакет SSH (был уже закачен)

Рисунок 2 – Проверяем статус SSH-сервера (запущен)

Рисунок 3 – Меняем имя хоста, чтобы различать виртуальные машины
Узнаем ip-адрес машины №1 (на ней установлен SSH-сервер), отобразим полученный вывод консоли на рис. 4.

Рисунок 4 – Узнаём ip-адрес SSH-сервера
Следом произведём подключение к SSH-серверу с машины №2 (см. рис. 5). Для входа воспользуемся следующим паролем: 123.
Дальнейшие операции по подбору пароля также будут осуществляться с машины №2.

Рисунок 5 – Подключение к SSH-серверу с другой машины
# **2 Установка SSHprank**
Сперва узнаем ip-адрес машины №2 (см. рис. 6). Далее, для удобства, подключимся к ней с помощью Putty (см. рис. 7).

Рисунок 6 - Узнаём ip-адрес машины №2

Рисунок 7 – Подключение к машине №2 через Putty
Следом установим пакетный менеджер для третьей версии python (см. рис. 8). Далее переместимся в директорию с временными файлами, склонируем репозитория с SSHprank (он находится на github), перейдём в скаченную директорию и просмотрим её содержимое (см. рис. 9).

Рисунок 8 – Установка пакетного менеджера python

Рисунок 9 – Перемещение в директорию с временными файлами, клонирование репозитория с github, перемещение в скаченную директорию и просмотр его содержимого
После чего, с помощью пакетного менеджера python установим необходимые пакеты (см. рис. 10), а также выполним скрипт, который покажет справочную информацию по SSHprank (см. рис. 11).

Рисунок 10 – Установка пакетов с помощью пакетного менеджера python

Рисунок 11 – Вывод справочной информации по SSHprank
# **3 Сканирование сети с помощью SSHprank**
Программа SSHprank напрямую не поддерживает диапазоны, хотя далее будет показано, как всё-таки можно указывать подсети для сканирования с помощью SSHprank. Поэтому для SSHprank нужно создать список хостов (см. рис. 12).

Рисунок 12 – Создание файла со списком хостов сети
Произведём сканирование сети по 22 порту и узнаем на каких хостах работает SSH-сервер (см. рис. 13).

Рисунок 13 – Сканирование сети на наличие работающего SSH (22 порт)
# **4 Составление словарей**
## **4.1 Работа с crunch**
Для составления словарей со списком паролей (pass.txt) и списком логинов (user.txt) воспользуемся утилитой под названием crunch.
Предположим, мы выяснили, что пароль состоит только из цифр и имеет длину 3. Составим предполагаемый список с паролями (см. рис. 14).

Рисунок 14 - Составление предполагаемого списка паролей
Теперь необходимо составить предполагаемый список с логинами. Предположим, что мы выяснили, как зовут человека (фамилию и инициалы), длину логина, но не знаем какие разделительные символы он использует (нижнее подчёркивание, дефис или точка). На основании этой информации составим предполагаемый список с логинами (см. рис. 15).

Рисунок 15 - Составление предполагаемого списка логинов
## **4.2 Работа с pwdlogy**
Проделаем подобные операции как в предыдущем пункте, но с утилитой pwdlogy.
Для того, чтобы pwdlogy составил словарь, необходимо внести информацию в 3 файла (“birthday.txt” (в нём содержатся даты), “commonPhrases.txt” (в нём содержатся ключевые фразы) и “keywords.txt” (в нём содержаться ключевые слова)).
Сперва составим словарь со списком предполагаемых паролей. Для этого добавим в файл “keywords.txt” информацию, представленную на рис. 16, а два оставшихся файла оставим пустыми. Запустим скрипт питона и дадим команду на генерацию словаря (см. рис. 17-18). После того, как словарь будет составлен, переименуем файл gen.txt (имя словаря по умолчанию) на pass.txt и выведем конец этого файла (см. рис. 19).

Рисунок 16 – Содержимое файла “keywords.txt” при составлении словаря с паролями

Рисунок 17 – Запуск скрипта

Рисунок 18 – Конец консольного вывода, после подачи команды на генерацию словаря

Рисунок 19 – Конец словаря с предполагаемыми паролями
Теперь составим словарь предполагаемых логинов. Для этого добавим в файл “keywords.txt” информацию, представленную на рис. 20, а два оставшихся файла оставим пустыми. Запустим скрипт питона и дадим команду на генерацию словаря. После того, как словарь будет составлен, переименуем файл gen.txt (имя словаря по умолчанию) на user.txt и выведем начало этого файла (см. рис. 21).

Рисунок 20 - Содержимое файла “keywords.txt” при составлении словаря с логинами

Рисунок 21 – Начало словаря с предполагаемыми логинами
# **5 Подбор логина и пароля к SSH**
## **5.1 Подбор с помощью словарей crunch**
Запустим SSHprank в отношении одного найденного хоста (192.168.1.8:22) для подбора логина и пароля (см. рис. 22). Для брутфорса будут использоваться созданные словари (user.txt и pass.txt) с помощью утилиты crunch. Для ускорения добавим флаг “-e”, чтобы скрипт закончил свою работу после первой успешной авторизации.

Рисунок 22 – Подбор логина и пароля с помощью словарей crunch
Таким образом, для подключения к SSH-серверу необходимо ввести следующий логин и пароль (kuzkin_p_a:123).
## **5.2 Подбор с помощью словарей pwdlogy**
Удалим файл owned.txt и запустим скрипт уже для словарей pwdlogy (см. рис. 23).

Рисунок 23 - Подбор логина и пароля с помощью словарей pwdlogy
Таким образом, для подключения к SSH-серверу, также как и в предыдущем варианте, необходимо ввести следующий логин и пароль (kuzkin_p_a:123).
# **6 Сканирование сети с помощью masscan**
Для того, чтобы просканировать сеть по портам 22, 80, 2222, 8080, установим утилиту masscan и необходимые пакеты для её исправной работы (см. рис. 24-25). Следом произведём сканирование о обнаружим, что на SSH-сервере (192.168.1.8) открыт 22 порт, а на домашнем роутере (192.168.1.1) открыт 80 порт (см. рис. 26).

Рисунок 24 – Установка утилиты masscan (уже была установлена)

Рисунок 25 – Установка необходимых пакетов для исправной работы masscan

Рисунок 26 – Результат сканирования сети по портам 22, 80, 2222, 8080
# **7 Совместная работы masscan и nmap**
Для того, чтобы разобраться как masscan работает совместно с nmap, выведем все поддерживаемые опции (см. рис. 27) и произведём сканирование 10 аргументами (см. рис. 28-37).

Рисунок 27 – Перечень совместимых опций с nmap, которые поддерживает утилита masscan

Рисунок 28 – Используем флаг “-iL”, чтобы просканировать все хосты, которые находятся в файле hosts.txt

Рисунок 29 – Используем флаг “-g”, чтобы получатель увидел, что мы сканируем его с порта 11111

Рисунок 30 – Используем флаг “--ttl”, чтобы установить определённое время жизни пакета

Рисунок 31 – Используем флаг “--max-rate”, чтобы отправлять пакеты не быстрее чем указанное число в секунду

Рисунок 32 - Используем флаг “--connection-timeout”, чтобы указать время (в секундах) истечения TCP подключения при ожидании данных баннера с порта

Рисунок 33 - Используем флаг “--packet-trace”, чтобы показать все отправленные и полученные пакеты

Рисунок 34 - Используем флаг “-e”, чтобы указать какой сетевой интерфейс необходимо использовать

Рисунок 35 - Используем флаг “-vvv”, чтобы увеличить уровень вербальности

Рисунок 36 - Используем флаг “--source-ip”, чтобы подменить ip-адрес отправителя

Рисунок 37 - Используем флаг “-oJ” и пишем название файла, в который будут записаны результаты сканирования в формате json
# **Ответы на вопросы**
**Что такое SSHPrank?**
Это инструмент для тестирования на проникновение в систему с использованием протокола SSH.
**Какие основные функции SSHPrank?**
SSHPrank может выполнять различные атаки и тестировать уязвимости в SSH-серверах. Это инструмент, который может использоваться разработчиками и администраторами для обнаружения и устранения уязвимостей в SSH-серверах.
**Как установить SSHPrank на Linux?**
Для установки SSHPrank на Linux необходимо установить пакетный менеджер puthon (sudo apt install python3-pip), склонировать репозиторий с github (git clone https://github.com/noptrix/sshprank), перейти в скаченную дирректорию (cd sshprank) и выполнить команду "pip3 install -r docs/requirements.txt".
**Как создать файл конфигурации для SSHPrank?**
Для SSHPrank конфигурационным файлом является скрипт sshprank.py.
**Как запустить SSHPrank в интерактивном режиме?**
Интерактивный режим взаимодействия - это диалоговый режим взаимодействия пользователя с компьютерной программой. Позволяет пользователю вводить команды и данные во время выполнения программы, управляя её работой с учётом выводимых программой результатов обработки данных.
Для запуска SSHPrank необходимо указать путь к скрипту и параметры (обязательные и не обязательные). Один из примеров представлен на рис. 11 (в нём выводится справочная информация).
**Как использовать ключ -s для атаки на сервер SSH?**
Пример запуска команды: "./sshprank -s 'SSH;1;50'". Эта команда найдёт 50 SSH-серверов и взламывает логины и пароли (по умолчанию root:root).
**Как использовать ключ -r для атаки на список IP-адресов?**
Нужно прописать параметр -r и указать количество адресов IPv4, которые будут сгенерированны для попыток взлома (используется только с опцией -m). Пример команды: "./sshprank -m '-p22 --rate=1000' -r 1000". Данная команда позволяет сгенерировать тысячу случайных IPv4 адресов, затем просканировать 22 порты со скоростью 1k p/s и на найденные SSH-сервера применяется взлом (по умолчанию с логином root и паролем root).
**Как использовать ключ -I для чтения списка IP-адресов из файла?**
В последней версии SSHPrank вместо этого параметра используется параметр -b. Нужно прописать параметр -b и указать файл, в котором содержится список хостов для взлома. Пример на рис. 13.
**Какие параметры можно использовать в файле конфигурации SSHPrank?**
Все параметры, которые можно менять/использовать в конфигурационном файле приведены на рис. 38.

Рисунок 38 - Параметры скрипта sshprank.py
**Какие риски существуют при использовании SSHPrank для атаки на сервер SSH?**
В логах SSH-сервера отобразится попытка входа, ip-адрес и порт, с которых был запущен SSHPrank.
# **Заключение**
Таким образом, в результате выполнения практической работы был развёрнут SSH-сервер, составлены словари с предполагаемыми логинами и паролями с помощью двух утилит (pwdlogy и crunch), произведён подбор пароля с помощью инструмента под названием SSHprank, а также изучена механика работы утилита masscan, которая работала совместно с утилитой nmap.
По окончании данной работы были получены навыки составления словарей с помощью двух утилит (pwdlogy и crunch), навыки подбора пароля для развёрнутого SSH-сервера с помощью инструмента SSHprank, а также навыки работы с утилитой masscan, которая работает совместно с утилитой nmap.
Полученные знания и навыки в дальнейшем могут применяться только для благих намерений, например, для устройства на работу в команду по тестированию на проникновение.