Атака с учетными данными, разделенными двоеточием

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

Введение

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

Вы начнете с создания файла credentials.txt с парами имя пользователя:пароль, используя текстовый редактор, такой как nano. Затем вы узнаете, как загрузить этот файл в Hydra с помощью опции -C, что позволит Hydra эффективно пытаться использовать различные комбинации входа в целевой системе. Наконец, вы проверите, что вывод соответствует учетным данным, используемым в атаке.

Создание файла учетных данных с логином и паролем

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

Сначала давайте разберемся с форматом файла учетных данных. Каждая строка должна содержать имя пользователя, двоеточие (:) и соответствующий пароль. Например:

username1:password1
username2:password2

Теперь давайте создадим файл. Мы будем использовать текстовый редактор nano, который прост и удобен в использовании. Откройте терминал и перейдите в каталог ~/project, если вы еще не там:

cd ~/project
  1. Откройте новый файл с именем credentials.txt в каталоге ~/project с помощью nano:

    nano credentials.txt
  2. В редакторе nano добавьте следующие комбинации имя пользователя/пароль. Это те учетные данные, которые Hydra будет пытаться использовать.

    admin:password
    user1:123456
    test:test
    root:toor
  3. Чтобы сохранить файл, нажмите Ctrl+O (Сохранить). Nano запросит имя файла. Просто нажмите Enter, чтобы принять имя по умолчанию (credentials.txt).

  4. Чтобы выйти из 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 для целевой службы.

Теперь давайте проверим, что эти учетные данные действительно присутствуют в созданных нами файлах.

  1. Проверка учетных данных в credentials.txt:

    Используйте команду cat для отображения содержимого файла credentials.txt:

    cat credentials.txt

    Подтвердите, что файл содержит строку admin:password. Это одна из комбинаций, которые Hydra пыталась использовать.

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