Введение
В этом лабораторном практикуме вы научитесь сохранять результаты атаки 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 в представлении результатов, позволяя как быстро просматривать, так и программно обрабатывать результаты атаки.


