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

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

IDOR: Predictable Order IDs

Заказы используют последовательные integer ID. Атакующий перебирает ID и просматривает чужие заказы.

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Средне+60 XP ~30 мин php
CWE-639 · A01:2021 Pro
Обложка: IDOR: Predictable Order IDs Обложка: IDOR: Predictable Order IDs
Задача
# IDOR: чтение чужих заказов по предсказуемым номерам ## Сценарий Вы проводите аудит магазина мебели «Дубрава» (нативный PHP, SQLite) перед запуском программы отзывов: покупатели будут делиться ссылками на свои заказы. Служба поддержки уверена, что ссылка на заказ приватна, — заказчик попросил убедиться, что по ссылке заказ увидит только его владелец. Ваше внимание сразу привлекли номера заказов в профиле: они идут сплошной нумерацией. ## Цель 1. Войдите под обычной учётной записью и изучите историю своих заказов: как выглядят номера и ссылки на страницу деталей. 2. По формату собственных номеров предскажите идентификаторы чужих заказов. 3. Откройте чужой заказ и найдите среди перебираемых — заказ на товар «CTF Flag»: на его странице отображается флаг. ## Теория Дефектов здесь два, и они усиливают друг друга. Первый — предсказуемые идентификаторы: сплошная нумерация позволяет вычислить чужие номера, зная только свои. Второй — идентификатор трактуется как пропуск: знание номера считается доказательством права на доступ (антипаттерн «identifier as capability»). Аутентификация проверяется, а авторизация на конкретный объект — нет. **Уязвимый паттерн:** ```php $stmt = $db->prepare('SELECT id, user_id, product_name, price, created_at FROM orders WHERE id = ?'); $stmt->execute([$orderId]); $order = $stmt->fetch(); ``` Выборка фильтруется только по номеру из адреса — связи с текущим пользователем нет. Любой вошедший перебирает соседние значения от своего номера и читает заказы всех покупателей магазина: состав, суммы, даты. Предсказуемость делает разведку дешёвой, но корень проблемы — отсутствие проверки владельца: даже случайный идентификатор не спас бы без неё. ## Точка входа атаки `GET /order/<номер>` — страница деталей заказа (свой список заказов виден в профиле). * **Обычный пользователь:** `demo` / `demo` * **Регистрация:** можно создать собственного пользователя через `/register` Флаг — строка `flag{...}` на странице чужого заказа с товаром «CTF Flag»; сдаётся в форме проверки лабы.

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

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

IDOR: Просмотр чужих инвойсов

Эндпоинт /invoice?id=N возвращает инвойс без проверки владельца. Атакующий перебирает ID и читает чужие данные.

+30 XP
PHP 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
Обложка лабы: IDOR: Mass Assignment — эскалация через JSON Обложка лабы: IDOR: Mass Assignment — эскалация через JSON
IDOR

IDOR: Mass Assignment — эскалация через JSON

API-эндпоинт обновления профиля принимает все JSON-поля, включая role.

+60 XP
Python Pro
Exploit Fix