Введение
У рыночного пункта Gearroom есть основная и мобильная страницы входа. Обе открывают выдачу одного участника. Политика уже считает по учётной записи, но страницы ведут отдельные счётчики. Участник, ограниченный на одной странице, ещё может аутентифицироваться на другой.
Продемонстрируйте этот обход ограниченными попытками Hydra, затем объедините входы общим ограничением учётной записи. Докажите оба направления, сохраните обычный вход другого участника и подтвердите восстановление после естественного окончания блокировки. Результат — действующая политика с реальной историей запросов и неизменёнными записями, не отчёт.
Работа опирается на Limit Attempts by Account: вы должны узнавать аргумент формы Hydra, известный положительный маркер, политику JSON, диагностику curl и команды deskctl. Механизмы не меняются. Среда подготовлена заново с другими участниками и записями; прежние файлы, сеансы и процессы не переносятся. Workstation — подготовленный терминал, Equipment Desk — сайт. Оба интерфейса принадлежат одному изолированному учебному контейнеру. Все учётные записи и данные — синтетические локальные ресурсы.
Отведите около 50 минут с учётом чтения и обычных ошибок; это авторская оценка, не замеры среди начинающих. Только заявленный тестовый участник может получать повторные неверные пароли. Контрольный участник должен использовать известный правильный пароль. Сохраните исходный сервис, учётные записи, данные и учебные значения.
Подтвердите два входа одной учётной записи
На этом шаге убедитесь, что страницы действительно аутентифицируют одного участника и открывают одну выдачу. Сходство надписей само по себе не доказывает общую личность.
Откройте Equipment Desk, затем Review brief. Разрешённый тестовый участник — samplemember, пароль Sample24. Обычный контрольный участник — deskteam, пароль Desk24.
Выберите Member sign-in, отправьте тестовые данные и откройте Open your record. Проверьте samplemember, выдачу LN-318, Jules Chen, Workshop camera kit, получение Friday 09:30, возврат Monday 16:00 и примечание о подписанном чехле для обеих батарей. Выберите Sign out.

После каждого реального входа сравнивайте Member и Record, оба времени и примечание об упаковке. Обе страницы должны открывать эту же запись.
Выберите Mobile sign-in, используйте те же тестовые данные и откройте запись. Подтвердите ту же личность, выдачу и все сведения, затем выйдите. Это два входа в один каталог участников, не разные учётные записи или хосты.
Выберите Member sign-in, используйте deskteam / Desk24 и откройте его запись. Это LN-087, Ari Lane, Folding projection screen, с напоминанием сохранять экран сухим перед упаковкой. Снова выйдите.
Переключитесь на Workstation. Интерфейс начинает работу в /home/labex/project/login-limits; pwd показывает расположение:
pwd
Если вы в другом месте, используйте прежнюю команду перехода:
cd /home/labex/project/login-limits
Прочитайте подготовленную и реально действующую политики:
cat policy.json
deskctl status
Ключ key уже равен account. В entry_groups путь /signin входит в desktop, а /mobile/signin — в mobile. Группа определяет, какие входы делят счётчик для этой учётной записи. Разные метки сейчас дают одному участнику отдельные счётчики. Сохраните три ошибки, окно 30 секунд и блокировку 12 секунд.
Наблюдайте обход через альтернативный вход
На этом шаге ограничьте основной вход и продемонстрируйте настоящую аутентификацию через мобильный во время той же блокировки.
Оставайтесь в Workstation. Подготовленный файл по-прежнему содержит только пять намеренно неверных кандидатов для разрешённого участника:
cat wrong-passwords.txt
Реальные пути POST указаны под обеими видимыми формами. Они используют одинаковые поля username и password. Адрес обратной петли 127.0.0.1 и порт 8080 ведут к этому локальному учебному сервису. Параметр Hydra -l теперь выбирает samplemember; -P, -s, -t 1, -I, аргумент POST в кавычках и S=Signed in as означают то же, что в первой работе. Все кандидаты неверны, поэтому завершённый запуск должен сообщить 0 valid password found. Сам по себе этот вывод не доказывает защищённость альтернативного входа.
Дождитесь естественного окончания прежних попыток:
deskctl wait
Выполните следующие четыре команды вместе, не останавливаясь читать между ними. Пробы curl используют известные правильные пароли; -o сохраняет каждое тело, -w показывает статус HTTP:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Ожидайте Main HTTP 429, Mobile HTTP 200 и Reference HTTP 200. Один и тот же участник ограничен на основном входе, но может аутентифицироваться на мобильном. Подтвердите мобильную личность, не доверяя одному 200:
grep -o 'Signed in as samplemember' mobile-probe.html
Прочитайте настоящие решения сервера:
deskctl events
Найдите в одной редакции порог samplemember на /signin, ограниченный основной вход и успешную аутентификацию на /mobile/signin. Ограниченное событие одного входа не доказывает общее ограничение. Контрольный участник остаётся отдельной записью; его успех не закрывает этот обход.
История доступна после блокировки. Если вы пропустили окно наблюдения, дождитесь окончания deskctl wait и повторите тот же ограниченный блок. При ошибке подключения или синтаксиса Hydra сначала исправьте полный аргумент, адрес, порт и указанный путь. HTTP 400 означает неправильные имена полей или структуру; 404 — неверный путь. Обычная опечатка не требует сброса VM.
Объедините страницы в группу одной учётной записи
На этом шаге заставьте оба пути POST использовать один счётчик для одного участника. Разные учётные записи должны оставаться независимыми.
Оставайтесь в Workstation. Замените файл политики полным объектом ниже. Here-document в кавычках сохраняет JSON буквально; закрывающий EOF должен находиться отдельно на строке без начальных пробелов. Как и прежде, > перезаписывает локальный файл:
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "members",
"/mobile/signin": "members"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
Теперь у обоих маршрутов одна метка группы. Это короткое непустое имя, а не специальное слово; допускается другое эквивалентное общее имя. Метка может содержать до 48 символов. Сохраните ключ учётной записи, оба настоящих ключа маршрутов и согласованные числа. Удаление маршрута, отключение формы или возврат к глобальному счётчику не выполняют задачу.
Явно примените файл:
deskctl apply policy.json --wait
Изменённые политики ждут естественного окончания существующего состояния попыток. Активные счётчики, история и записи участников не очищаются, процесс не перезапускается. Повторное применение той же политики ничего не меняет. Пропущенная запятая JSON или неверное поле оставляют прежнюю политику активной; исправьте файл перед повтором.
deskctl status
Подтвердите действующий ключ account и совпадающие метки группы в новой редакции. Правильного локального файла недостаточно, пока сервис его не использует. Теперь нужны события этой редакции, а не прежних раздельных групп.
Проверьте оба направления и сохраните доступ
На этом шаге докажите, что ошибки любой страницы ограничивают другую, контрольный участник продолжает работать, а тестовый естественно восстанавливается.
Оставайтесь в Workstation. Сначала проверьте направление от основного к мобильному входу:
deskctl wait
Выполните весь блок вместе:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Ожидайте ноль находок Hydra, Mobile HTTP 429 и Reference HTTP 200. Сохранённые тела должны соответствовать:
grep -o 'Too many attempts' mobile-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
Текущая редакция должна показать основной порог, мобильный отказ и обычную контрольную аутентификацию. Дождитесь естественного восстановления:
deskctl wait
Переключитесь на Equipment Desk, выберите Mobile sign-in, используйте samplemember / Sample24 и Open your record. Проверьте неизменённую камеру LN-318 и примечание о чехле для батарей, затем Sign out. Этот новый мобильный вход подтверждает восстановление после ограничения основного входа.
Вернитесь в Workstation. Теперь поменяйте направление:
deskctl wait
Выполните весь блок вместе:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/mobile/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/signin
Ожидайте ноль находок, Main HTTP 429 и Reference HTTP 200:
grep -o 'Too many attempts' main-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
Теперь после мобильного порога должен идти основной отказ. Это другое направление, а не переименованная копия первого результата. Если диагностика запоздала, дождитесь естественного завершения состояния и повторите это ограниченное направление. Не расширяйте набор кандидатов и не сбрасывайте счётчики.
deskctl wait
Переключитесь на Equipment Desk, выберите Member sign-in, используйте samplemember / Sample24 и откройте исходную LN-318. Этот основной вход демонстрирует восстановление после мобильного ограничения. Выйдите, затем используйте Member sign-in с deskteam / Desk24, чтобы открыть LN-087. Проверьте экран и примечание о сухой упаковке. Снова выйдите и откройте Visitor guide.
Браузер создаёт собственный сеанс после каждого настоящего входа; диагностические ответы curl не авторизуют его. При 403 для записи исправьте настоящий вход браузера и используйте Open your record. Исправляйте обычные ошибки пароля или пути без перезапуска сценария.
Оба настоящих входа теперь следуют одному ограничению для каждой записи: есть доказательства текущей политики в обоих направлениях, сохранён обычный контрольный доступ, естественное восстановление и исходные данные. Оценка читает существующие факты и публичные страницы, а не выполняет недостающие тесты или восстановление. Это доказывает заявленное локальное поведение одного процесса, а не распределённое промышленное ограничение или защиту от любого автоматизированного входа.
Резюме
Вы подтвердили, что две настоящие страницы входа используют одну личность, воспроизвели обход из-за отдельных групп и применили общий счётчик учётной записи. Ограниченные тесты Hydra затем доказали оба направления, обычный контрольный доступ и естественное восстановление к неизменённым записям. Ни отказ одной страницы, ни история прежней политики не подтверждают полный результат.



