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

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

IDOR: Перебор заказов по последовательным ID

Заказы используют последовательные целочисленные ID. Эндпоинт /order/{id} не проверяет владельца — можно перебрать чужие заказы и найти флаг.

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Легко+30 XP ~15 мин golang
CWE-639 · A01:2021 Pro
Обложка: IDOR: Перебор заказов по последовательным ID Обложка: IDOR: Перебор заказов по последовательным ID
Задача
# IDOR: перебор заказов по последовательным номерам ## Сценарий **TicketStorm** — сервис продажи билетов на митапы и мастер-классы. История заказов открывается из личного кабинета по ссылке с номером. Техлид Кирилл считает защиту достаточной: «номера — обычные числа, но эндпоинт требует входа». Организатор одного из мероприятий сообщил, что покупатель видел чужой заказ, и вас, внешнего аудитора, попросили воспроизвести проблему с обычной учётной записи. В системе есть служебный заказ администратора с конфиденциальными данными. ## Цель 1. Войдите как `demo` и найдите в личном кабинете номера собственных заказов. 2. Откройте заказ по ссылке и измените номер на не принадлежащий вам. 3. Найдите флаг в данных служебного заказа администратора. ## Теория IDOR (Insecure Direct Object Reference) становится особенно практичным, когда идентификаторы ресурсов предсказуемы: последовательные целые числа, монотонные счётчики, инкрементируемые номера. Атакующему не нужно знать внутреннюю схему — он перебирает соседние значения, и пространство поиска растёт линейно с числом записей. Непредсказуемые идентификаторы — UUID четвёртой версии, криптографически случайные токены — делают перебор вычислительно невозможным, но не устраняют саму уязвимость: знание идентификатора всё равно даёт доступ. **Уязвимый паттерн:** ```go // Выборка только по номеру заказа, владелец не проверяется: row := db.QueryRow("SELECT ... FROM orders WHERE id=?", id) ``` Аутентификация не спасает: атакующий регистрируется штатно, получает валидную сессию и читает чужие записи. Дополнительный фактор — самые ранние номера обычно достаются служебным и первым записям системы, поэтому именно они становятся первой целью перебора. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Учётные данные | `demo` / `demo` | | Личный кабинет | `GET /profile` | | Просмотр заказа | `GET /order/{id}` |

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

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

IDOR: Доступ к чужому счету

Эндпоинт просмотра счета не проверяет владельца. Получи флаг из счета другого пользователя.

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

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

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

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

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Доступ к чужому счёту в Express Обложка лабы: IDOR: Доступ к чужому счёту в Express
IDOR

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

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

+30 XP
Node.js Pro
Exploit Fix