На странице
Перебор имён пользователей по времени отклика сервера
Лаборатория
Username enumeration via response timing · Practitioner
Решение
Дано
This lab is vulnerable to username enumeration using its response times. To solve the lab, enumerate a valid username, brute-force this user's password, then access their account page.
Your credentials: wiener:peter
Candidate usernames
Candidate passwords
Анализ задания
Нужно организовать брутфорс на основе анализа времени ответов сервера. Сперва добываем имя пользователя, потом — пароль для него. Словари имён и паролей предоставлены.
Разведка
Посмотрим, как устроена форма входа. Всё как обычно:
POST /login
username=xxx&password=123
Проведём брутфорс-атаку по именам. Обратим внимание на время получения ответа от сервера. Пароль зададим любой, только длинный — символов 100. Через десяток запросов в ответе стало приходить:
You have made too many incorrect login attempts. Please try again in 30 minute(s).
Ого!
На такой случай можно попробовать использовать заголовок X-Forwarded-For — он указывает бэкенду IP адрес клиента, сделавшего запрос, если тот проходил через прокси. Некоторые проверки по IP смотрят на этот заголовок, и задав его, мы можем обойти ограничение выше, как бы став другим IP адресом.
Для этого в Intruder надо выбрать тип атаки Pitchfork — появится возможность вставлять несколько переменных в запрос. В конец запроса перед телом добавим X-Forwarded-For:
X-Forwarded-For: §ip§
В первую нагрузку можно поставить тип Number, от 1 до 10000. Во вторую закидываем наш список пользователей.
После завершения атаки добавим столбец Response received, чтобы видеть время до начала получения ответа от сервера. Отсортируем запросы по колонке «Response received». Среди запросов видим один, у которого время до получения ответа 1414, в других случаях — не более 457.
Можем попробовать подобрать пароль для ajax — похоже, это наш кандидат. Нагрузка №1 с X-Forwarded-For остаётся. Нагрузка №2 теперь будет в поле password, а имя фиксируем — ajax. Ищем код 302 — редирект после успешного логина. Найден — summer, вернул 302.
Окей, получается ajax / summer.
Лаба решена.
Ещё в этой категории
Web Shell Upload через обход блек-листа расширений (PortSwigger Lab)
.php в блек-листе, но .htaccess заливается без вопросов — подсовываем свой конфиг Apache и заставляем сервер исполнять shell.bug как PHP.
Web Shell Upload через обфускацию расширения (PortSwigger Lab)
Блек-лист расширений не пускает .php, двойное расширение shell.php.jpg отдаётся как картинка — null-byte shell.php%00.jpg обходит обе проверки.
Remote Code Execution через загрузку web shell (PortSwigger Lab)
Загрузка аватарки без валидации — заливаем PHP web shell и читаем /home/carlos/secret.