Введение
В этом лабораторном практикуме вы узнаете, как выполнить атаку с использованием учетных данных с помощью Hydra. Лабораторный практикум фокусируется на использовании файла учетных данных, разделенного двоеточием, содержащего комбинации имя пользователя/пароль для взлома учетных данных входа в целевую службу.
Вы начнете с создания файла credentials.txt с парами имя пользователя:пароль, используя текстовый редактор, такой как nano. Затем вы узнаете, как загрузить этот файл в Hydra с помощью опции -C, что позволит Hydra эффективно пытаться использовать различные комбинации входа в целевой системе. Наконец, вы проверите, что вывод соответствует учетным данным, используемым в атаке.
Создание файла учетных данных с логином и паролем
На этом шаге вы создадите файл, содержащий имена пользователей и пароли, по одной комбинации на строку, разделенные двоеточием. Этот файл будет позже использован с Hydra для попытки взлома учетных данных входа в целевую службу.
Сначала давайте разберемся с форматом файла учетных данных. Каждая строка должна содержать имя пользователя, двоеточие (:) и соответствующий пароль. Например:
username1:password1
username2:password2
Теперь давайте создадим файл. Мы будем использовать текстовый редактор nano, который прост и удобен в использовании. Откройте терминал и перейдите в каталог ~/project, если вы еще не там:
cd ~/project
Откройте новый файл с именем
credentials.txtв каталоге~/projectс помощьюnano:nano credentials.txtВ редакторе
nanoдобавьте следующие комбинации имя пользователя/пароль. Это те учетные данные, которые Hydra будет пытаться использовать.admin:password user1:123456 test:test root:toorЧтобы сохранить файл, нажмите
Ctrl+O(Сохранить). Nano запросит имя файла. Просто нажмитеEnter, чтобы принять имя по умолчанию (credentials.txt).Чтобы выйти из
nano, нажмитеCtrl+X.
Теперь давайте проверим, что файл был создан и содержит правильное содержимое. Используйте команду cat для отображения содержимого файла credentials.txt:
cat credentials.txt
Вы должны увидеть комбинации имя пользователя/пароль, которые вы ввели ранее:
admin:password
user1:123456
test:test
root:toor
Вы успешно создали файл учетных данных, который можно использовать с Hydra. Этот файл содержит список потенциальных имен пользователей и паролей, которые Hydra будет пытаться использовать против целевой службы.
Настройка базового HTTP-сервера с аутентификацией
На этом шаге вы настройте простой HTTP-сервер, требующий базовой аутентификации. Этот сервер будет нашей целью для атаки Hydra на следующем шаге. Мы будем использовать для этого скрипт на Python.
Сначала убедитесь, что вы находитесь в каталоге ~/project:
cd ~/project
Теперь создайте новый Python-файл с именем webserver.py с помощью nano:
nano webserver.py
Вставьте следующий код Python в редактор:
import http.server
import socketserver
import base64
PORT = 8000
class AuthHandler(http.server.SimpleHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_AUTHHEAD(self):
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm="My Realm"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
auth = self.headers.get('Authorization')
if auth == None:
self.do_AUTHHEAD()
self.wfile.write(b"Authentication Required")
elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encoded
http.server.SimpleHTTPRequestHandler.do_GET(self)
else:
self.do_AUTHHEAD()
self.wfile.write(b"Authentication Failed")
Handler = AuthHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
Этот скрипт создаёт базовый HTTP-сервер на порту 8000. Он требует базовой аутентификации. Правильное имя пользователя — admin, а пароль — password. Строка YWRtaW46cGFzc3dvcmQ= в кодировке base64 представляет собой admin:password.
Сохраните файл (Ctrl+O, затем Enter) и выйдите из nano (Ctrl+X).
Теперь запустите Python-скрипт, чтобы запустить HTTP-сервер. Мы запустим его в фоновом режиме, чтобы вы могли продолжить работу в терминале:
nohup python3 webserver.py > /dev/null 2>&1 &
Команда nohup позволяет процессу продолжать работу даже после закрытия терминала. > /dev/null 2>&1 перенаправляет стандартный вывод и стандартную ошибку в /dev/null, предотвращая захламление вашего терминала выводом сервера. & в конце запускает команду в фоновом режиме.
Чтобы подтвердить, что сервер работает, вы можете проверить, слушает ли процесс на порту 8000:
ss -ltn | grep ':8000'
Вы должны увидеть вывод, подобный этому, указывающий, что процесс слушает на порту 8000:
LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:*
Держите этот сервер работающим для следующего шага.
Атака HTTP с файлом учетных данных с помощью Hydra
На этом шаге вы будете использовать Hydra для атаки на HTTP-сервис, который вы настроили на предыдущем шаге. Вы будете использовать опцию -C, чтобы загрузить файл учетных данных, который вы создали на шаге 1, что позволит Hydra эффективно пытаться использовать различные комбинации имен пользователей и паролей.
Убедитесь, что вы находитесь в каталоге ~/project:
cd ~/project
Теперь выполните следующую команду Hydra для атаки на HTTP-сервер, работающий на 127.0.0.1 на порту 8000:
hydra -C credentials.txt 127.0.0.1 http-get / -s 8000 -vV
Давайте разберем эту команду:
hydra: Команда для запуска инструмента Hydra.-C credentials.txt: Эта опция указывает путь к файлу учетных данных, который вы создали. Hydra будет читать комбинации имя пользователя/пароль из этого файла.127.0.0.1: Целевой IP-адрес. Это адрес обратной связи, который ссылается на ваш локальный компьютер.http-get /: Указывает службу для атаки (HTTP) и путь для запроса (/).http-get— это модуль, который выполняет HTTP-запросы GET.-s 8000: Указывает номер порта целевой службы. Наш HTTP-сервер работает на порту 8000.-vV: Включает подробный режим, который отображает попытки входа и любые найденные учетные данные.
Hydra теперь попытается выполнить перебор паролей для HTTP-сервера, используя комбинации имя пользователя/пароль из файла credentials.txt. Он будет проверять каждую комбинацию на целевой службе.
Вы должны увидеть вывод от Hydra, указывающий, что он пытается использовать различные комбинации имя пользователя/пароль. Если Hydra успешно найдет правильные учетные данные (admin:password), он отобразит их в выводе.
Пример вывода (успешная атака):
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at ...
[DATA] max 16 tasks per 1 server, overall 16 tasks, 4 login tries (l:4/p:1), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:8000/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - 1 of 4 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "user1" - pass "123456" - 2 of 4 [child 1] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "test" - 3 of 4 [child 2] (0/0)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "toor" - 4 of 4 [child 3] (0/0)
[8000][http-get] host: 127.0.0.1 login: admin password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at ...
Если атака успешна, Hydra выведет правильное имя пользователя и пароль.
Подтверждение найденных учетных данных
На этом шаге вы подтвердите, что учетные данные, найденные Hydra во время атаки на предыдущем шаге, соответствуют ожидаемым учетным данным в файле credentials.txt и скрипте webserver.py. Это подтверждает, что Hydra правильно определила корректную комбинацию логина.
На предыдущем шаге вывод Hydra должен был содержать следующую строку (или аналогичную):
[8000][http-get] host: 127.0.0.1 login: admin password: password
Эта строка указывает, что Hydra успешно нашла имя пользователя admin и пароль password для целевой службы.
Теперь давайте проверим, что эти учетные данные действительно присутствуют в созданных нами файлах.
Проверка учетных данных в
credentials.txt:Используйте команду
catдля отображения содержимого файлаcredentials.txt:cat credentials.txtПодтвердите, что файл содержит строку
admin:password. Это одна из комбинаций, которые Hydra пыталась использовать.Проверка учетных данных в
webserver.py:Используйте команду
catдля отображения содержимого файлаwebserver.py:cat webserver.pyНайдите строку, которая проверяет заголовок аутентификации в кодировке base64. Вы должны найти строку, похожую на эту:
elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encodedСтрока
YWRtaW46cGFzc3dvcmQ=представляет собой кодировкуadmin:passwordв base64. Это подтверждает, что сервер настроен на приемadminв качестве имени пользователя иpasswordв качестве пароля.
Проведя проверку, что найденные Hydra учетные данные соответствуют учетным данным, настроенным в скрипте сервера и присутствующим в файле учетных данных, вы подтверждаете успех атаки с использованием опции -C.
Наконец, давайте остановим фоновый процесс HTTP-сервера. Вы можете найти идентификатор процесса (PID) с помощью команды ss:
ss -ltn | grep ':8000'
Вывод покажет PID во второй колонке. Например:
LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=12345,fd=3))
В этом примере PID равен 12345. Используйте команду kill, заменив [PID] на фактический PID, который вы нашли:
kill [PID]
Например, если PID был 12345:
kill 12345
Вы можете проверить, что сервер остановлен, снова выполнив ss -ltn | grep ':8000'. Вывод не должен содержать ничего.
Резюме
В этом лабораторном практикуме вы изучили, как создать файл учетных данных с именем credentials.txt, содержащий комбинации имен пользователей и паролей, разделенные двоеточием, по одной комбинации на каждой строке. Этот файл хранится в каталоге ~/project и подготовлен для использования с инструментом Hydra.
Вы также изучили, как настроить базовый HTTP-сервер с аутентификацией с помощью скрипта Python, который служил целью атаки.
Наконец, вы успешно использовали Hydra с опцией -C для загрузки файла учетных данных и проведения атаки методом перебора паролей на HTTP-сервер, продемонстрировав, как эффективно тестировать различные комбинации логинов. Вы подтвердили, что найденные учетные данные соответствуют ожидаемым значениям, подтвердив успех атаки.


