Перейти к содержимому
← Каталог php IDOR

IDOR: Predictable Order IDs

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

mediumphpPro
Задача
# IDOR через предсказуемые идентификаторы заказов ## Сценарий Перед вами интернет-магазин SecureShop, написанный на нативном PHP. В системе есть страница деталей заказа, доступная авторизованным пользователям и идентифицируемая через ID в URL. Каждый клиент видит в своём профиле список заказов и может перейти к деталям конкретного заказа по ссылке. В отличие от типичной «учебной» IDOR-уязвимости, в этой реализации соединились **два независимых дефекта**: 1. **Предсказуемый формат идентификаторов** — упрощает разведку. Атакующий не подбирает значения вслепую: ему достаточно посмотреть на собственный ID, чтобы понять схему нумерации, и сразу начать запрашивать соседние значения. 2. **Отсутствие проверки владельца** — делает разведку результативной. Сервер выдаёт страницу любого заказа любому аутентифицированному пользователю, не проверяя, имеет ли субъект право видеть конкретный объект. Каждый из этих дефектов сам по себе уже плох (один упрощает обнаружение, второй — снижает требования к доказательству права доступа), а вместе они дают практичный канал утечки чужих заказов с минимальным количеством запросов. Это классическая IDOR (Insecure Direct Object Reference, CWE-639) — одна из самых распространённых ошибок в современных веб-приложениях согласно OWASP A01:2021 (Broken Access Control). В одном из заказов в системе зашит CTF-флаг. Ваша задача — найти этот заказ через IDOR, используя как разведку формата идентификаторов, так и горизонтальную эскалацию доступа. ## Цели 1. Авторизуйтесь как обычный пользователь и изучите страницу профиля с историей своих заказов. 2. Проанализируйте формат идентификаторов в URL: что общего у ваших собственных номеров заказов и насколько легко предсказать чужие? 3. Подмените идентификатор в URL и убедитесь, что сервер действительно отдаёт сведения о чужих объектах без проверки субъекта. 4. Найдите заказ, который вам не принадлежит, но содержит CTF-флаг, и получите его значение. ## Данные для входа | Параметр | Значение | |----------|----------| | Пользователь | `demo` / `demo` | | Альтернатива | можно зарегистрировать своего пользователя через `/register` | ## Класс уязвимости - OWASP A01:2021 — Broken Access Control - CWE-639 — Authorization Bypass Through User-Controlled Key ## Что необходимо понять - Identifier-as-capability антипаттерн: сервер ошибочно трактует знание идентификатора как доказательство права на доступ к объекту. - Object-level access control: правильная защита проверяет связь между субъектом (текущей сессией) и конкретным объектом, а не только сам факт аутентификации. - Разница между аутентификацией («ты вошёл») и авторизацией («ты имеешь право видеть именно этот объект»): IDOR — это всегда дыра в авторизации, не в аутентификации.
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru