Перейти к содержимому

Поиск по платформе

Брутфорс Формы Входа (Нет Rate Limiting) — Node.js

Форма входа Express-приложения не ограничивает количество попыток, позволяя подобрать пароль администратора перебором по словарю.

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Средне+60 XP ~35 мин nodejs
CWE-287 · A07:2021 Pro
Обложка: Брутфорс Формы Входа (Нет Rate Limiting) — Node.js Обложка: Брутфорс Формы Входа (Нет Rate Limiting) — Node.js
Задача
# Брутфорс формы входа: отсутствие rate limiting ## Сценарий Вы — пентестер, которого владелец **OrbitBay**, магазина гаджетов на Express, попросил проверить устойчивость формы входа к автоматизированному перебору. Недавний инцидент у конкурентов — взлом админской учётки по словарю — заставил руководство задуматься, устоит ли их собственный вход против такой же атаки. ## Цель 1. Убедитесь, что приложение работает: войдите под обычным аккаунтом и осмотритесь. 2. Проверьте поведение формы входа при серии неудачных попыток — есть ли противодействие перебору. 3. Подберите пароль администратора по словарю типичных паролей. 4. Войдите как `admin`, купите товар **CTF Flag** и получите флаг в профиле. ## Теория Брутфорс окупается лишь тогда, когда сервер позволяет гонять попытки с высокой частотой. Зрелая форма входа ограничивает число проверок с одного источника за временное окно, а после порога отвечает отказом «слишком много запросов». Здесь этого слоя нет: каждый запрос к обработчику входа обрабатывается независимо от предыдущих. **Уязвимый паттерн:** ```javascript // Обработчик входа без какого-либо учёта попыток: app.post('/login', (req, res) => { const row = db.prepare('SELECT id, password FROM users WHERE username=?').get(username); // ...сверка пароля и ответ — одинаково на каждый запрос... }); ``` Сервер отвечает на каждую попытку с одинаковой скоростью и без блокировок. Если у одной из учётных записей пароль из распространённого словаря, конечный список значений перебирается за секунды. ## Точка входа атаки `POST /login` — форма входа с полями `username` и `password`. * **Обычный пользователь:** `demo` / `demo` * **Целевая учётная запись:** `admin` / пароль из распространённого словаря

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Timing-атака на форму входа Обложка лабы: Timing-атака на форму входа
Auth

Timing-атака на форму входа

Обработчик входа раскрывает существование пользователей через разницу во времени ответа — bcrypt вызывается только для существующих аккаунтов.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: JWT alg:none — обход аутентификации без подписи Обложка лабы: JWT alg:none — обход аутентификации без подписи
Auth

JWT alg:none — обход аутентификации без подписи

Сервер принимает JWT с alg:none и доверяет роли из claims — подделайте токен для получения прав администратора в SecureShop.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: JWT: подбор слабого секрета и подделка admin-токена Обложка лабы: JWT: подбор слабого секрета и подделка admin-токена
Auth

JWT: подбор слабого секрета и подделка admin-токена

Сервер подписывает JWT слабым секретом из словаря. Получив один валидный токен, атакующий за секунды подбирает секрет по словарю офлайн, подписывает новый токен с role=admin и забирает флаг.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: Слабая Парольная Политика Обложка лабы: Слабая Парольная Политика
Auth

Слабая Парольная Политика

Регистрация принимает любой пароль без проверки сложности. Пароль администратора — 'admin'.

+30 XP
Node.js Pro
Exploit Fix