Введение
Fieldnote готовится к Northline Print Fair. Участники выставки входят в систему, чтобы получить пакет своего стенда: время прибытия, место доставки и упаковочный список. Первый тест Hydra как будто находит несколько действующих входов. Часть этих результатов на самом деле соответствует страницам ошибок. Ваша задача — отличить настоящую аутентификацию от обманчивого ответа, а затем получить полный пакет назначенного участника.
Достаточно базового ввода в терминале, понимания путей и переключения вкладок. Hydra и локальный портал уже подготовлены. Перед использованием вы разберёте поля формы, условия сопоставления и работу с cookie. Workstation — ваш терминал, Exhibitor Portal — сайт. Это два интерфейса одного изолированного учебного контейнера, а не два узла. Все аккаунты и деловые данные синтетические. Проверяйте только объявленную учебную форму и назначенный аккаунт с предоставленными кандидатами. Не меняйте сервер, аккаунты и документы.
Оценка в 55 минут включает чтение и обычные ошибки; время не измерялось на начинающих. Вашими результатами станут повторно используемый аргумент формы, исходный результат Hydra и пакет стенда, полученный после аутентификации, а не письменный отчёт.
Увидеть результат настоящего входа
На этом шаге откройте заведомо работающий демонстрационный аккаунт и сопоставьте его с данными его собственного стенда. Успешный HTTP-запрос означает, что сервер отправил ответ; успешная аутентификация означает, что сервер принял определённую учётную запись. Это разные факты.
Откройте вкладку Exhibitor Portal. Выберите Start at the practice desk, затем Practice sign-in. Введите ID участника preview и пароль Preview24, затем выберите Sign in. В результате появится Signed in as preview. Выберите Open your workspace. Стенд обозначен как DEMO, а упаковочная заметка указывает, что это учебный документ. Так выглядит нормальный рабочий процесс; демонстрационный пакет не является вашим итоговым заданием. Выберите Sign out, затем ссылку Practice desk в навигации.

ID участника и стенд показывают, что это демонстрационный документ. Одна кнопка скачивания не доказывает, что перед вами назначенный пакет.
Переключитесь на Workstation. Команды этой работы начинаются в /home/labex/project/login-review. Интерфейс автоматически переходит в этот каталог; pwd выводит текущий каталог для проверки:
pwd
Ожидается /home/labex/project/login-review. Если вы в другом месте, cd меняет каталог:
cd /home/labex/project/login-review
Учебная форма входа отправляет запрос POST на /practice/login. POST передаёт именованные поля в теле запроса. Здесь они называются username и password, а & разделяет их. curl отправляет запрос из терминала независимо от браузера. В следующей команде --data задаёт поля, -s скрывает индикатор прогресса, -o сохраняет тело ответа, а -w выводит HTTP-статус. Одинарные кавычки удерживают пробелы, & и %{http_code} вместе для curl, не позволяя оболочке интерпретировать их.
Намеренно отправьте один неверный пароль:
curl -s -o wrong.html -w 'HTTP %{http_code}
' --data 'username=preview&password=Wrong24' http://127.0.0.1:8080/practice/login
Вывод — HTTP 200. Он означает, что приложение вернуло страницу, а не что пароль подошёл. wrong.html содержит эту страницу. grep ищет текст; опция -o выводит только совпавший текст, поэтому читать окружающую HTML-разметку не требуется:
grep -o 'Incorrect password' wrong.html
Ожидается Incorrect password. Один HTTP-статус может сопровождать и настоящий успех, и отказ во входе. Здесь обычную опечатку в пароле можно исправить: измените значение и отправьте снова. Ошибка соединения означает, что запрос не достиг сервиса; прежде чем интерпретировать вход, проверьте 127.0.0.1, порт 8080 и объявленный путь. Не сбрасывайте VM ради исправления опечатки.
Воспроизвести обманчивый результат
На этом шаге вы запустите намеренно ошибочное правило классификации на четырёх небольших учебных парах. Это демонстрация плохого теста, а не надёжный аудит.
Оставайтесь в Workstation. cat показывает файл. Подготовленный список содержит полные пары username:password, по одной на строку:
cat practice-pairs.txt
preview:Wrong24
retired:Wrong24
offline:Wrong24
preview:Preview24
retired — синтетический пример недоступного аккаунта. offline — контролируемый пример ошибки сервиса: учебный обработчик возвращает HTTP 503, не создавая сеанс. Это не настоящий сбой вышестоящего сервиса и не реальный участник. Последняя пара — заведомо работающий демонстрационный вход. Сохраняйте этот небольшой разрешённый набор; не расширяйте его до произвольных комбинаций имён и паролей.
Модуль Hydra http-post-form отправляет каждую пару в форму. Его аргумент содержит три части, разделённые двоеточиями: путь POST, поля и условие ответа. ^USER^ и ^PASS^ — подстановочные маркеры Hydra. F= означает «считать неудачным ответ, содержащий этот шаблон». Любой другой ответ может классифицироваться как успех. Эта команда намеренно распознаёт только Incorrect password, оставляя другие виды отказа без проверки.
Опции: -I игнорирует старое приглашение восстановления в этом рабочем каталоге, -C задаёт парных кандидатов, -s — порт, -t 1 — одного рабочего исполнителя, -o — имя файла результатов, -b json — формат JSON. Последний аргумент остаётся единым благодаря кавычкам, хотя содержит пробелы и &.
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o misleading.json -b json 127.0.0.1 http-post-form '/practice/login:username=^USER^&password=^PASS^:F=Incorrect password'
Чтобы читать JSON без написания программы, используйте встроенный форматировщик Python json.tool. python3 -m запускает установленный модуль:
python3 -m json.tool misleading.json
Прочитайте список results. Известная рабочая демонстрационная пара присутствует, но может появиться и пара недоступного аккаунта или ошибки сервиса. Находка — утверждение условия, а не доказательство аутентифицированного рабочего раздела. Верхнее поле success: true описывает выполнение Hydra, а не действительность каждого сообщённого пароля. Не используйте этот обманчивый файл как итоговый результат аудита.
Если Hydra сообщает об ошибке синтаксиса или соединения, сравните весь аргумент в кавычках и порт с командой выше, исправьте опечатку и повторите ограниченный учебный тест. Неудачное соединение не доказывает ни рабочий пароль, ни достоверное отсутствие находок.
Настроить условие по известным ответам
На этом шаге сохраните повторно используемое условие, которое принимает настоящий успех и отклоняет все три известных неуспешных случая. Оставайтесь в Workstation. Сначала изучите остальные ответы в том же формате запросов.
Запрос к недоступному аккаунту намеренно возвращает HTTP 200:
curl -s -o retired.html -w 'HTTP %{http_code}
' --data 'username=retired&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Sign-in unavailable' retired.html
Контролируемый запрос с ошибкой сервиса намеренно возвращает HTTP 503. Действительного сеанса нет, хотя страница не содержит Incorrect password:
curl -s -o offline.html -w 'HTTP %{http_code}
' --data 'username=offline&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Service unavailable' offline.html
Теперь получите известный успешный ответ. У этого запроса curl собственный сеанс, отдельный от браузера:
curl -s -o preview.html --data 'username=preview&password=Preview24' http://127.0.0.1:8080/practice/login
grep -o 'Signed in as preview' preview.html
Signed in as здесь обозначает аутентифицированный результат. Welcome встречается и на страницах отказа, поэтому не отличает аутентификацию. S= в Hydra задаёт положительный шаблон: ответ должен содержать его, чтобы считаться успешным. Посмотрите справку установленного модуля с помощью -U; она объясняет путь, поля и синтаксис условия:
hydra -U http-post-form
Сохраните полный учебный аргумент. cat > calibration.txt записывает текст в файл; > заменяет файл, если он уже существует. Here-document передаёт несколько строк до завершающей строки EOF. Кавычки вокруг 'EOF' сохраняют содержимое буквально. Закрывающий маркер должен находиться на отдельной строке без пробелов перед ним:
cat > calibration.txt <<'EOF'
/practice/login:username=^USER^&password=^PASS^:S=Signed in as
EOF
Переменная оболочки хранит текст для повторного использования в этом терминале. $(cat calibration.txt) читает файл; form= сохраняет результат без пробелов вокруг =. Кавычки в "$form" затем удерживают пробелы внутри одного аргумента. Эта переменная принадлежит текущему сеансу терминала; после переподключения повторите присваивание.
form=$(cat calibration.txt)
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o calibration.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool calibration.json
Сообщаться должна только пара preview:Preview24. Неверный пароль, недоступный аккаунт и HTTP 503 не являются аутентификацией. В настройку нужно включать и известный успешный пример: условие, отклоняющее всё, тоже неверно. Достаточно широкий шаблон отказа может быть эквивалентен этому положительному шаблону; конкретное написание S= не требуется. Сохранённый аргумент проверяется на каждом известном ответе отдельно, а не принимается только за наличие ключевого слова.
Получить пакет назначенного участника
На этом шаге примените настроенный метод к назначенному участнику, а затем независимо аутентифицируйтесь и получите его настоящий деловой документ.
Откройте Exhibitor Portal, затем Exhibitor sign-in и View your review assignment. Назначенный аккаунт — papertrail, его путь POST — /signin. Разрешены только три пароля из candidates.txt. Учебный аккаунт относится к другой форме. Переключитесь на Workstation и прочитайте кандидатов:
cat candidates.txt
Сохраните второй повторно используемый аргумент с назначенным путём, теми же полями и условием:
cat > form.txt <<'EOF'
/signin:username=^USER^&password=^PASS^:S=Signed in as
EOF
form=$(cat form.txt)
В отличие от -C, -l papertrail задаёт одно фиксированное имя, а -P candidates.txt — его разрешённые пароли. Выполните небольшой назначенный аудит и сохраните новый исходный JSON-результат:
hydra -I -l papertrail -P candidates.txt -s 8080 -t 1 -o findings.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool findings.json
Единственная настоящая находка — papertrail с паролем InkPaper7. Вывод применим только к объявленному аккаунту и набору кандидатов; он не утверждает, что весь сайт безопасен.
Переключитесь на Exhibitor Portal. Выберите Exhibitor sign-in, введите найденную пару и выберите Sign in, затем Open your workspace. Проверьте papertrail, стенд N-14, прибытие 09:15 и North loading door. Выберите Download booth kit, чтобы получить настоящее скачивание в браузере. Этот файл относится к папке загрузок браузера и не появляется автоматически внутри учебного контейнера.

Прежде чем использовать загрузку, проверьте участника и стенд над упаковочной заметкой.
Вернитесь в Workstation, чтобы сохранить необходимую копию в VM. Cookie — идентификатор сеанса, выданный сервером. -c exhibitor.cookies сохраняет cookie, полученные при этом входе из терминала. Этот файл cookie принадлежит curl; браузер и Hydra не используют его автоматически совместно. Тело ответа сохраняется в signin.html:
curl -s -c exhibitor.cookies -o signin.html --data 'username=papertrail&password=InkPaper7' http://127.0.0.1:8080/signin
Получите аутентифицированную загрузку с тем же файлом. -b отправляет его cookie. -f заставляет отказ HTTP возвращать ненулевой статус, вместо того чтобы незаметно сохранить страницу ошибки как пакет:
curl -f -s -b exhibitor.cookies http://127.0.0.1:8080/kit.json -o booth-kit.json
403 или код выхода curl 22 означает, что у этого клиента нет принятого сеанса. Проверьте имя, пароль, путь формы и имя файла cookie, повторите команду входа и затем скачивание. 404 означает неверный путь. Эти ошибки исправимы; не заменяйте пакет скопированным демонстрационным файлом.
python3 -m json.tool booth-kit.json
Сопоставьте участника, стенд и прибытие со страницей. Полный пакет также содержит три стойки для печатных материалов, две скатерти и заметку о пронумерованных защитных конвертах для отпечатков. Существование файла или совпавшее имя участника само по себе не доказывает правильность всего документа.
Наконец, откройте Visitor guide в Exhibitor Portal. Публичные сведения о прибытии должны оставаться доступны. Вы меняли только свои файлы и сеансы, сохраняя сервис, аккаунты и деловые данные. Итоговые файлы — form.txt, findings.json и booth-kit.json в рабочем каталоге. Проверки читают существующие факты входа и скачивания и испытывают сохранённый аргумент в отдельном временном сервисе; они не выполняют за вас недостающие действия на реальном портале.
Резюме
Вы сравнили действительно аутентифицированные рабочие разделы с ответами о неверном пароле, недоступном аккаунте и ошибке сервиса. Вы воспроизвели ложноположительный результат Hydra, настроили повторно используемое условие формы по успешным и неуспешным примерам, а затем подтвердили назначенный аккаунт и получили полный пакет с отдельным сеансом cookie. HTTP 200, признак успешного выполнения или общее сообщение Welcome сами по себе не доказывают аутентификацию.



