Брутфорс веб-формы на пентесте: прохожу HTB Easy и разбираю каждый шаг

На прошлой неделе разбирал с учеником его первую HTB-машину easy-уровня — всё упёрлось в форму логина. За полтора часа прошли путь от пустого терминала до reverse shell, и шесть из семи шагов точно ложились на конкретный модуль курса пентеста. Ниже — полный разбор: от сканирования портов до подобранного пароля, с командами, типичными ловушками и маппингом на учебную программу. Каждый блок — одновременно walkthrough и навигация по тому, что стоит изучить системно.
Зачем пентестеру брутфорс веб-формы и где он в классификации атак
Брутфорс веб-формы — не «хакерская романтика», а рабочий инструмент для ситуаций, когда серверное ПО обновлено, известных CVE (Common Vulnerabilities and Exposures — публично зарегистрированных уязвимостей) нет, а единственный вектор входа — слабый пароль на панели администратора. По классификации OWASP Top 10 (рейтинг десяти наиболее критичных рисков веб-приложений) слабая аутентификация входит в категорию A07:2021 — Identification and Authentication Failures. Сюда попадают слабые пароли, отсутствие защиты от перебора, credential stuffing (подстановка учётных данных из утёкших баз).
В терминологии MITRE ATT&CK (открытая база тактик и техник атак; каждая техника имеет T-код — уникальный идентификатор) подбор учётных данных описан как T1110 — Brute Force, тактика Credential Access. У техники три подвида, которые встречаются чаще всего: Password Guessing (T1110.001) — перебор паролей к конкретному аккаунту, Password Cracking (T1110.002) — офлайн-взлом хешей, Password Spraying (T1110.003) — один пароль ко множеству аккаунтов. Брутфорс формы логина на HTB — почти всегда T1110.001.
HTB-машины easy-уровня специально проектируются так, чтобы подбор пароля был рабочим вектором. Это не «слишком просто». Это навык, без которого дальше первого экрана не пройдёшь.
Модуль курса: «Основы веб-атак» / Web Application Attacks — объясняет, почему аутентификация ломается и какие ошибки разработчиков к этому приводят.
Разведка перед атакой на форму авторизации
Без разведки брутфорс — стрельба вслепую. Прежде чем запускать инструмент подбора, нужно ответить на четыре вопроса: какие порты открыты, есть ли на сервере страница логина, как форма отправляет данные (GET или POST), какие дополнительные поля передаются вместе с логином и паролем.
Первые два вопроса закрывает сканирование. Предусловие: вы работаете в Kali Linux (или другом дистрибутиве с предустановленным nmap).
nmap -sC -sV -p- 10.10.10.X
Флаг -sC запускает стандартные NSE-скрипты (определение версий, баннеров, базовых уязвимостей), -sV — определение версий сервисов, -p- — сканирование всех 65535 портов. Ожидаемый результат: открытый порт 80 или 443 (HTTP/HTTPS). Если видите нестандартный порт (8080, 3000, 5000) — заходите браузером и туда. На таких портах часто прячутся веб-приложения, которые разработчик «спрятал» от случайных глаз.
После обнаружения веб-сервера — поиск директорий через ffuf, gobuster или dirsearch. Ищем эндпоинты вроде /login, /admin, /wp-login.php, /user/login. Выбор словаря: для начала хватит common.txt из SecLists, позже можно переключиться на directory-list-2.3-medium.txt.
Модуль курса: «Перечисление и сбор информации» / Enumeration & Information Gathering — учит систематически собирать данные о цели до начала атаки.
Как устроена веб-форма: разбираем HTTP-запрос для брутфорса
Нашли форму логина — не спешите запускать Hydra. Сначала нужно понять, как форма работает на уровне HTTP. Откройте DevTools в браузере (F12), перейдите на вкладку Network, введите любой логин и пароль, нажмите «Войти» и изучите перехваченный запрос.
Что именно смотреть в запросе
Метод. POST — данные в теле запроса, не видны в URL. GET — данные в параметрах адресной строки. Подавляющее большинство форм логина используют POST.
Имена полей. Форма может называть поля username и password, а может — user, pass, log, pwd, email, login_field. Имена берутся из атрибута name в HTML-коде или из перехваченного запроса. Частая ошибка новичков — угадывать имена полей вместо того, чтобы просто посмотреть.
Скрытые поля. Многие формы содержат невидимые пользователю поля: CSRF-токен (случайная строка, привязанная к сессии; защищает от межсайтовых подделок запросов), anti-bot маркеры, идентификатор формы. Если при брутфорсе не передать эти поля — сервер отклонит запрос даже с правильным паролем. Я видел, как люди тратили часы на «сломанную Hydra», хотя проблема была в пропущенном CSRF-токене.
Ответ сервера при неудачном входе. Введите заведомо неверные данные и проверьте: что возвращает сервер? Строку «Invalid credentials»? HTTP-статус 302 (редирект)? Изменение длины ответа? Эта информация — ключ к правильной настройке инструмента подбора.
Если используете Burp Suite (инструмент для перехвата и модификации HTTP-трафика; Community Edition бесплатна), перехватите запрос через Burp Proxy. Там сразу видны все заголовки, cookies и тело запроса. Один перехваченный запрос экономит час мучений с Hydra.
Модуль курса: «Работа с веб-запросами» / Web Requests — учит читать HTTP-запросы и ответы, разбираться в заголовках, cookies и методах.
Словари для подбора учётных данных: какой выбрать и почему
Словарная атака (dictionary attack) — перебор не всех возможных комбинаций символов, а списка наиболее вероятных паролей. Почему это работает: по данным Have I Been Pwned, в одном только комбо-листе Exploit.In (2016) оказались 593 миллиона уникальных email-адресов с паролями. Из таких утечек и собираются словари — реальные пароли реальных людей.
Стандартные словари для старта:
rockyou.txt— классика, около 14 миллионов паролей из утечки RockYou (2009). Путь в Kali:/usr/share/wordlists/rockyou.txt. Для easy-уровня HTB обычно хватает первых 10–50 тысяч строк- SecLists — коллекция словарей от Daniel Miessler. Для веб-форм часто берут
Passwords/Common-Credentials/10k-most-common.txt - Списки имён пользователей:
SecLists/Usernames/Names/names.txt
Критически важная деталь, которую новички пропускают: сначала определите логин, потом подбирайте пароль. Некоторые формы по-разному реагируют на несуществующий логин и неверный пароль к существующему: «User not found» в одном случае, «Wrong password» — в другом. Это позволяет сначала перечислить (enumerate) валидные логины, а потом брутфорсить пароль только к ним. Разница во времени — в сотни раз.
На HTB easy-уровне логины часто находятся при обычной разведке: в комментариях HTML-кода, на страницах «О нас», в метаданных файлов. Иногда логин очевиден — admin, root, administrator.
Модуль курса: «Атаки на пароли и словари» / Password Attacks — покрывает создание, оптимизацию словарей и инструменты генерации вроде CUPP (Common User Passwords Profiler — утилита, которая создаёт персонализированный словарь на основе информации о конкретном пользователе).
Hydra для брутфорса веб-формы: пошаговый разбор с объяснением
Hydra — инструмент для автоматизированного подбора учётных данных, поддерживает десятки протоколов: SSH, FTP, HTTP-GET, HTTP-POST-FORM и другие. Предустановлена в Kali Linux. Защитники про неё знают: в репозитории SigmaHQ для Hydra есть правило детектирования (proc_creation_win_hktl_hydra.yml).
Допустим, на разведке мы выяснили: форма отправляет POST-запрос на /login.php, поля называются username и password, при неудачном входе в ответе содержится строка «Invalid credentials».
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.X http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid credentials" -t 16
Разбор каждого элемента:
-l admin— фиксированный логин. Если логин неизвестен, используйте-L users.txtсо списком-P rockyou.txt— путь к файлу словаря паролей10.10.10.X— IP-адрес целиhttp-post-form— модуль Hydra для POST-форм (для GET —http-get-form)- Строка в кавычках содержит три части через двоеточие: путь к форме, тело запроса с маркерами
^USER^и^PASS^(Hydra подставит туда значения), строка неудачного входа (failure string) -t 16— количество параллельных потоков. На HTB можно ставить 16–32, на реальных целях — 4 и ниже, чтобы не вызвать блокировку
Ожидаемый вывод при успехе:
[80][http-post-form] host: 10.10.10.X login: admin password: monkey123
Hydra покажет найденную пару логин/пароль. Если за 5–10 минут ничего не нашлось на словаре из 10 тысяч записей — проблема почти наверняка в настройке, а не в пароле.
Частые ошибки при работе с Hydra
| Ошибка | Симптом | Решение |
|---|---|---|
| Неверная failure-строка | Hydra «находит» каждый пароль | Скопируйте строку из реального ответа через DevTools |
| Пропущены cookies | Сервер отклоняет все запросы | Добавьте заголовок: H=Cookie:PHPSESSID=abc123 |
| Пропущен CSRF-токен | Все попытки отвечают ошибкой 403 | Переходите к Burp Intruder |
| Неверное имя поля | 0 валидных результатов | Проверьте атрибут name= в HTML-коде |
| Слишком много потоков | IP заблокирован, таймауты | Снизьте до -t 4 |
Не указан путь /login.php |
Hydra бьёт в корень сайта | Скопируйте путь из перехваченного запроса |
По данным сравнительного тестирования 26 веб-приложений (pentest-tools.com, 2024), Hydra показала 27% точности в лабораторном сценарии и 15% в условиях с CSRF-токенами и динамическими формами. На простых формах без защиты (а на HTB easy именно такие) она работает быстро и надёжно. Но если форма сложнее — нужен другой подход.
Модуль курса: «Брутфорс логинов» / Login Brute Forcing — покрывает синтаксис Hydra и Medusa для HTTP, SSH, FTP с практическими лабами. По данным HTB Academy, модуль классифицирован как Easy и предполагает базовое знание командной строки Linux.
Burp Suite Intruder для брутфорса: когда Hydra не справляется
Если форма использует CSRF-токен, динамические скрытые поля или клиентский JavaScript для хеширования пароля — Hydra без дополнительных скриптов не справится. Burp Suite Intruder решает эту проблему: он работает на уровне HTTP-запросов с полным контролем над каждым параметром.
Пошаговый план (предусловие — установленный Burp Suite, настроен браузерный прокси на 127.0.0.1:8080):
Шаг 1: перехватите запрос. Включите Intercept в Burp Proxy, отправьте форму с любыми данными. Burp покажет полный HTTP-запрос со всеми заголовками, cookies и телом. Как понять, что получилось: во вкладке Proxy → Intercept появится перехваченный POST-запрос.
Шаг 2: отправьте в Intruder. Правый клик на запросе → Send to Intruder. Во вкладке Intruder → Positions выделите значение пароля как payload-позицию — Burp обрамит его символами §.
Шаг 3: настройте payload. Вкладка Payloads → Payload type: Simple list → загрузите словарь. Тип атаки — Sniper (один параметр перебирается, остальные фиксированы).
Шаг 4: если есть CSRF-токен. Создайте макрос (macro) в Project Options → Sessions → Session Handling Rules. Макрос будет автоматически запрашивать страницу формы, извлекать свежий токен и подставлять его в каждый следующий запрос. Без этого шага все попытки вернут ошибку. Настройка макроса — минут 10 работы, но без неё вы не сдвинетесь.
Шаг 5: запуск и фильтрация. После завершения отсортируйте результаты по столбцу Length (длина ответа). Успешный вход обычно возвращает ответ, длина которого заметно отличается от остальных — например, 8900 байт вместо стандартных 4500.
Для справки: тип атаки Cluster Bomb перебирает все комбинации из двух списков (логины × пароли) — подходит, когда оба неизвестны. Pitchfork берёт строки попарно (первый логин + первый пароль, второй + второй) — это для credential stuffing, когда пары уже известны из утечки.
Модуль курса: «Инструменты веб-пентеста» / Web Penetration Testing Tools — детальная работа с Burp Suite: Intruder, Repeater, Session Handling.
Фильтрация результатов: как отличить успешный вход от ложных срабатываний
Самая коварная ловушка при прохождении HTB-машины — принять ложное срабатывание за реальный результат. Hydra или Burp могут отметить пароль как «найденный», хотя сервер вернул ту же страницу ошибки в чуть другой обёртке.
Три надёжных индикатора:
Длина ответа. Если 999 из 1000 ответов имеют длину 4521 байт, а один — 8903 байта, этот выброс — кандидат на успешный вход. В Burp Intruder сортировка по колонке Length покажет его сразу.
HTTP-статус. Неудачный вход часто возвращает 200 (страница с сообщением об ошибке). Успешный — 302 (редирект в личный кабинет). Фильтр по статусу в Burp или Hydra отсечёт основной массив.
Заголовок Set-Cookie. При успешной аутентификации сервер обычно устанавливает сессионную cookie. Появление нового Set-Cookie в ответе — сильный сигнал.
Всегда проверяйте найденный пароль вручную — откройте браузер, введите пару логин/пароль и убедитесь, что попали за форму. Десять секунд работы спасают от ложных путей.
Ошибки новичков при прохождении HTB через брутфорс
За время менторства я собрал список ошибок, которые встречаю раз за разом:
Запуск огромного словаря сразу. Полный rockyou.txt — 14 миллионов записей. Для HTB easy хватает первых 10–50 тысяч строк. Команда head -n 10000 rockyou.txt > small.txt создаст укороченную версию. Не помогло — увеличивайте.
Игнорирование rate-limiting. На HTB это редкость, но на реальном пентесте — норма. Перед массовым перебором отправьте 5–10 запросов вручную через Burp Repeater и проверьте, не начинает ли сервер отвечать иначе. Появление задержки, CAPTCHA или HTTP 429 означает: снижайте скорость.
Проблемы с кодировкой. Если форма отправляет данные с URL-кодированием (пробел → %20, символ @ → %40), а инструмент передаёт символы как есть — сервер не распознает запрос. Burp кодирует автоматически, Hydra — не всегда.
Забытые cookies. Многие приложения присваивают cookie с сессией каждому, кто открыл веб-форму, а при получении данных проверяют, есть ли такая сессия. Без передачи cookie все попытки будут отклонены — даже с верным паролем.
Копирование команд из чужих writeup без адаптации. Каждая форма уникальна: имена полей, пути, failure-строки. Команда, сработавшая на одной машине, не сработает на другой без корректировки. Я на это смотрю так: writeup — это подсказка, а не рецепт.
После подбора пароля: маппинг пути HTB Easy на модули курса пентеста
Подобрали пароль — вошли в панель. На HTB-машинах easy-уровня после аутентификации обычно открывается один из сценариев: админ-панель с возможностью загрузки файлов (upload reverse shell), интерфейс с command injection (внедрение команд ОС через поле ввода) или доступ к конфигурации с паролями других пользователей и SSH-ключами.
Маппинг полного пути на модули учебной программы:
| Шаг на HTB-машине | Модуль курса | Ключевой навык |
|---|---|---|
| Сканирование портов, поиск веб-сервиса | Enumeration & Information Gathering | nmap, ffuf, сбор баннеров |
| Анализ HTTP-запроса формы | Web Requests | DevTools, Burp Proxy, чтение заголовков |
| Подбор словаря, перечисление пользователей | Password Attacks | SecLists, CUPP, enumeration |
| Запуск Hydra / Medusa | Login Brute Forcing | Синтаксис, failure string, потоки |
| Работа с Burp Intruder, CSRF-токены | Web Penetration Testing Tools | Intruder, макросы, фильтрация |
| Загрузка shell, reverse connection | Shells & Payloads | Reverse shell, bind shell, listeners |
| Повышение привилегий | Privilege Escalation | SUID, sudo, kernel exploits |
Каждый модуль — не абстрактная лекция, а набор лаб, где вы делаете ровно то же самое, но в контролируемой среде с проверкой результата. Прохождение одной HTB-машины easy-уровня задействует минимум четыре модуля. Десять машин — и вы закрыли практическую часть половины курса.
Я вижу устойчивый паттерн у людей, которые приходят в пентест из смежных IT-профессий: они пытаются учить инструменты, не понимая протокол. Запускают Hydra с копированной командой из чужого writeup, получают ноль результатов и решают, что «брутфорс не работает». Проблема не в инструменте. Проблема в том, что они не открыли DevTools. Не проверили, есть ли CSRF-токен. Не прочитали ответ сервера на заведомо неверный пароль.
Брутфорс веб-формы на пентесте — это не про скорость перебора. Это про понимание HTTP на уровне «могу собрать запрос руками в curl». Без этого фундамента Hydra, Burp, ffuf — бесполезные буквы в терминале. На HTB easy-уровне этот навык прокачивается идеально: машины простые, но каждая форма требует внимания к деталям. Если проходить их осмысленно, а не по готовым writeup, за 10–15 машин появляется уверенность, которая на реальном пентесте стоит дороже любого сертификата. Базовый трек IB Basics на codeby.school — это то, что я бы прошёл вместо того, чтобы тыкаться в YouTube.
Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.
