Сохранение результатов атаки Hydra

HydraBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме вы научитесь сохранять результаты атаки Hydra. Hydra, мощный инструмент для взлома паролей, будет использован для проверки безопасности имитированной формы входа на HTTP-сайт. Вы начнете с выполнения базовой HTTP-атаки на целевой веб-сервер, используя списки имен пользователей и паролей.

Затем этот практикум проведет вас через сохранение результатов атаки с помощью опции -o и вывод их в формате JSON с помощью опции -b. Наконец, вы сравните текстовый и JSON-выводы, чтобы понять различные способы, которыми Hydra может представлять свои результаты.

Настройка целевой службы и списков пользователей/паролей

На этом шаге вы настройте имитированную HTTP-службу входа и создадите необходимые списки имен пользователей и паролей для использования Hydra. Это обеспечит контролируемую среду для практики сохранения вывода Hydra.

Сначала перейдите в каталог вашего проекта:

cd ~/project

Далее вы создадите простой скрипт на Python, который имитирует HTTP-службу входа. Этот скрипт будет прослушивать порт 80 и отвечать на POST-запросы на /login.php. Он будет считать admin правильным именем пользователя и password правильным паролем.

Создайте файл login.py с помощью nano:

nano login.py

Вставьте следующий код Python в редактор nano:

from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
import os

class LoginHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        if self.path == '/login.php':
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length).decode('utf-8')
            parsed_data = urllib.parse.parse_qs(post_data)

            username = parsed_data.get('username', [''])[0]
            password = parsed_data.get('password', [''])[0]

            if username == 'admin' and password == 'password':
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(b"Login successful!")
            else:
                self.send_response(401)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(b"Invalid username or password")
        else:
            self.send_response(404)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b"Not found")

def run(server_class=HTTPServer, handler_class=LoginHandler, port=80):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd server on port {port}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

Сохраните файл, нажав Ctrl+X, затем Y и Enter.

Теперь запустите HTTP-сервер Python в фоновом режиме. Это будет имитировать целевую службу для Hydra.

nohup python3 login.py > /dev/null 2>&1 &

Команда nohup позволяет процессу продолжать работу даже после закрытия терминала, а > /dev/null 2>&1 & перенаправляет весь вывод в /dev/null и запускает процесс в фоновом режиме.

Далее вы создадите списки имен пользователей и паролей, которые Hydra будет использовать для атаки.

Создайте файл с именем users.txt в каталоге ~/project:

nano users.txt

Добавьте следующие имена пользователей в файл:

admin
user
test

Сохраните файл, нажав Ctrl+X, затем Y и Enter.

Наконец, создайте файл с именем passwords.txt в каталоге ~/project:

nano passwords.txt

Добавьте следующие пароли в файл:

password
123456
test

Сохраните файл, нажав Ctrl+X, затем Y и Enter.

Вы успешно настроили целевую HTTP-службу и подготовили списки имен пользователей и паролей.

Запуск базовой атаки HTTP

На этом шаге вы выполните базовую HTTP-атаку с помощью Hydra на имитированную службу входа, которую вы настроили. Это продемонстрирует, как Hydra пытается взломать учетные данные, не сохраняя вывод в файл.

Hydra — мощный инструмент для взлома паролей и может использоваться для проверки безопасности различных служб, включая HTTP. В этом сценарии вы будете атаковать простую форму входа HTTP.

Вы будете использовать модуль http-post-form Hydra, который предназначен для атаки веб-форм, использующих метод HTTP POST для отправки данных. Целевая служба работает на 127.0.0.1 на порту 80, а форма входа расположена по адресу /login.php.

Выполните следующую команду Hydra в своем терминале:

hydra -L ~/project/users.txt -P ~/project/passwords.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

Давайте разберем эту команду:

  • hydra: Команда для вызова инструмента Hydra.
  • -L ~/project/users.txt: Указывает путь к файлу со списком имен пользователей. Hydra будет перебирать каждое имя пользователя в этом файле.
  • -P ~/project/passwords.txt: Указывает путь к файлу со списком паролей. Hydra будет пытаться использовать каждый пароль из этого файла для каждого имени пользователя.
  • 127.0.0.1: Целевой IP-адрес имитированного HTTP-сервера.
  • http-post-form: Это модуль Hydra, используемый для атаки на HTTP POST-формы.
  • "/login.php:username=^USER^&password=^PASS^:Invalid username or password": Эта важная часть определяет, как Hydra взаимодействует с формой:
    • /login.php: Путь к странице входа на целевом сервере.
    • username=^USER^&password=^PASS^: Определяет параметры, отправляемые в POST-запросе. ^USER^ и ^PASS^ — это заполнитель, который Hydra заменяет значениями из ваших списков имен пользователей и паролей.
    • Invalid username or password: Это сообщение об ошибке, которое Hydra ищет в ответе сервера, чтобы определить, была ли попытка входа неудачной. Если эта строка не найдена, Hydra считает попытку входа успешной.

После выполнения команды Hydra отобразит свой прогресс и любые успешные попытки входа непосредственно в вашем терминале.

Пример вывода (при успехе):

Hydra vX.X (c) XXXX by van Hauser/THC - Use freely but only for legal purposes.

Hydra is starting...

[DATA] X task, X servers, X login tries (l:X/p:X), ~X try per server
[DATA] attacking service http-post-form on port 80
[ATTACK] attacking 127.0.0.1:80/login.php
[80][http-post-form] host: 127.0.0.1   login: admin   password: password

Этот вывод указывает, что Hydra успешно нашел комбинацию имени пользователя admin и пароля password. Если успешный вход не найден, Hydra завершится, не отображая какие-либо успешные учетные данные входа.

Сохранение результатов с опцией -o

В этом шаге вы узнаете, как сохранить результаты атаки Hydra в файл с помощью опции -o. Это полезно для последующего анализа результатов или для отчетности, так как это сохраняет любые взломанные учетные данные в постоянном файле.

Опция -o позволяет указать выходной файл, в который Hydra будет сохранять взломанные учетные данные. Если Hydra найдет корректную комбинацию имени пользователя и пароля, она будет записана в указанный файл в простом, читаемом формате.

Вы продолжите с тем же сценарием: имитированный веб-сервер, работающий на 127.0.0.1 на порту 80 с формой входа по адресу /login.php, и файлы users.txt и passwords.txt, которые вы создали ранее.

Чтобы сохранить результаты в файл hydra.log в каталоге ~/project, выполните следующую команду:

hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.log 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

Единственное отличие от предыдущей команды — добавление опции -o ~/project/hydra.log. Это сообщает Hydra сохранять результаты в файл hydra.log вместо отображения их в терминале.

После выполнения команды Hydra будет пытаться войти в систему, используя каждую комбинацию имени пользователя и пароля. Если вход будет успешным, имя пользователя и пароль будут записаны в файл hydra.log.

Чтобы просмотреть содержимое файла hydra.log, используйте команду cat:

cat ~/project/hydra.log

Пример вывода (при успехе):

Если Hydra найдет комбинацию admin:password, файл hydra.log будет содержать строку, подобную этой:

127.0.0.1 http-post-form: admin:password

Если успешный вход не будет найден, файл hydra.log будет пустым.

Важно отметить, что опция -o перезапишет выходной файл, если он уже существует. Если вы хотите добавить результаты к существующему файлу, используйте опцию -O (заглавная буква O) вместо неё. Однако для этой лабораторной работы опция -o достаточна.

Вывод в формате JSON с опцией -b

В этом шаге вы изучите, как выводить результаты атаки Hydra в формате JSON с помощью опции -b. JSON (JavaScript Object Notation) — это легкий формат обмена данными, удобный для чтения и записи человеком, а также для парсинга и генерации машинами. Этот формат особенно полезен, когда вам нужно обработать результаты программно, например, при интеграции вывода Hydra в другие инструменты или скрипты.

Опция -b, в сочетании с опцией -o, сообщает Hydra сохранить вывод в указанном формате в файл. Опция -b требует параметр формата: text (по умолчанию), json или jsonv1.

Вы продолжите с тем же сценарием: имитированный веб-сервер, работающий на 127.0.0.1 на порту 80 с формой входа по адресу /login.php, и файлы users.txt и passwords.txt.

Чтобы сохранить результаты в формате JSON в файл hydra.json в каталоге ~/project, выполните следующую команду:

hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.json -b json 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

В этой команде вы добавили опцию -b json вместе с опцией -o ~/project/hydra.json. Это указывает Hydra сохранить вывод в формате JSON в файл hydra.json.

После выполнения команды Hydra будет пытаться войти в систему, используя каждую комбинацию имени пользователя и пароля. Если вход будет успешным, имя пользователя и пароль будут записаны в файл hydra.json в формате JSON.

Чтобы просмотреть содержимое файла hydra.json, используйте команду cat:

cat ~/project/hydra.json

Пример вывода (при успехе):

Если Hydra найдет комбинацию admin:password, файл hydra.json будет содержать объект JSON, похожий на этот:

{
  "generator": {
    "software": "Hydra",
    "version": "v9.2",
    "built": "2025-05-30 08:10:07",
    "server": "127.0.0.1",
    "service": "http-post-form",
    "jsonoutputversion": "1.00",
    "commandline": "hydra -L users.txt -P passwords.txt -o hydra.json -b json 127.0.0.1 http-post-form /login.php:username=^USER^&password=^PASS^:Invalid username or password"
  },
  "results": [
    {
      "port": 80,
      "service": "http-post-form",
      "host": "127.0.0.1",
      "login": "admin",
      "password": "password"
    }
  ],
  "success": true,
  "errormessages": [],
  "quantityfound": 1
}

Если успешный вход не будет найден, файл hydra.json будет содержать пустой массив JSON:

[]

Этот формат JSON позволяет легко парсить результаты с помощью языков сценариев, таких как Python или JavaScript, для дальнейшего анализа или автоматизации.

Резюме

В этой лабораторной работе вы изучили, как выполнить базовую атаку HTTP с помощью Hydra, мощного инструмента для взлома паролей. Вы настроили имитированную службу HTTP-логина и создали списки имен пользователей и паролей. Затем вы использовали Hydra для попытки взлома имитированной формы HTTP-логина по адресу 127.0.0.1.

Вы изучили, как сохранять вывод Hydra в файл с помощью опции -o, создавая читаемый человеком файл hydra.log. Кроме того, вы научились выводить результаты в формате JSON с помощью опции -b, генерируя машиночитаемый файл hydra.json. Эта лабораторная работа продемонстрировала гибкость Hydra в представлении результатов, позволяя как быстро просматривать, так и программно обрабатывать результаты атаки.