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

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

IDOR: предсказание UUID v1 по таймстампу

Заказы интернет-магазина идентифицируются UUID v1 (timestamp + MAC + clock_seq). Все заказы созданы внутри одного процесса, поэтому делят те же node/clock_seq биты — отличаются только по timestamp. Эндпоинт /order/:uuid не проверяет владельца, и атакующий, имея один свой UUID, угадывает UUID соседних заказов и получает чужие данные, включая CTF-флаг.

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Сложно+90 XP ~60 мин nodejs
CWE-639 · A01:2021 Pro
Обложка: IDOR: предсказание UUID v1 по таймстампу Обложка: IDOR: предсказание UUID v1 по таймстампу
Задача
# IDOR: предсказуемые идентификаторы заказов ## Сценарий Экспресс-магазин **SwiftCart** обещает доставку «за сутки» и гордится аккуратной историей заказов: каждая позиция в профиле покупателя открывается по ссылке с длинным UUID. Владелец магазина считает такие ссылки «непросматриваемыми» — идентификатор выглядит случайным. Служба поддержки получила жалобу от клиента, увидевшего в приложении чужой заказ. Разберитесь, настолько ли непредсказуемы идентификаторы заказов и кто может читать чужие покупки, — среди заказов администрации есть конфиденциальный. ## Цель 1. Войдите покупателем и откройте в профиле детали своих заказов; соберите несколько идентификаторов из ссылок. 2. Сравните свои идентификаторы между собой: какие части совпадают, какие меняются, и что это говорит о способе генерации. 3. Восстановите идентификатор чужого заказа и откройте его страницу. 4. Найдите чужой заказ с товаром «CTF Flag» и получите флаг. ## Теория UUID бывает разным: одни версии строятся из случайных битов, другие — из метки времени и параметров машины. Если идентификаторы генерируются по времени, то соседние объекты, созданные одним процессом подряд, отличаются лишь полем времени, а остальные части у них общие. Зная один свой идентификатор, атакующий восстанавливает соседние перебором узкого диапазона. **Уязвимый паттерн:** ```js const order = db.prepare( 'SELECT id, uuid, user_id, product_name FROM orders WHERE uuid=?' ).get(req.params.uuid); ``` Запрос ищет заказ только по идентификатору из адреса и не сверяет владельца с текущей сессией: предсказуемость идентификаторов и отсутствие проверки доступа усиливают друг друга. ## Точка входа атаки `GET /order/<uuid>` — страница деталей заказа; свои заказы перечислены в профиле (`GET /profile`). * **Пользователь:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: IDOR: Доступ к чужому счёту в Express Обложка лабы: IDOR: Доступ к чужому счёту в Express
IDOR

IDOR: Доступ к чужому счёту в Express

Эндпоинт просмотра счёта в Express + better-sqlite3 не проверяет владельца ресурса. Получи доступ к счёту администратора и извлеки флаг.

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: IDOR: Вертикальная эскалация привилегий в Express Обложка лабы: IDOR: Вертикальная эскалация привилегий в Express
IDOR

IDOR: Вертикальная эскалация привилегий в Express

Админ-эндпоинты Express проверяют наличие сессии, но не роль пользователя. Любой залогиненный demo-пользователь может открыть /admin/stats и забрать флаг.

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: Vertical IDOR: Доступ к админ-панели без проверки роли Обложка лабы: Vertical IDOR: Доступ к админ-панели без проверки роли
IDOR

Vertical IDOR: Доступ к админ-панели без проверки роли

Admin-эндпоинты /admin/stats и /admin/users/delete защищены только аутентификацией, но не авторизацией. Обычный пользователь может выполнять действия администратора.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: IDOR: Mass Assignment — эскалация привилегий через профиль Обложка лабы: IDOR: Mass Assignment — эскалация привилегий через профиль
IDOR

IDOR: Mass Assignment — эскалация привилегий через профиль

Эндпоинт обновления профиля принимает JSON и записывает все поля, включая role. Отправь {"role":"admin"} и получи доступ к админ-панели с флагом.

+60 XP
Go Pro
Exploit Fix