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

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

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

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

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Легко+30 XP ~15 мин php
CWE-639 · A01:2021 Pro
Обложка: IDOR: Просмотр чужих инвойсов Обложка: IDOR: Просмотр чужих инвойсов
Задача
# IDOR: чтение чужих счетов ## Сценарий Вы проводите аудит B2B-платформы снабжения «ПрофКрепёж» (нативный PHP, SQLite) перед подключением электронного документооборота. Клиентам выставляются счета; список «Мои счета» и страница счёта закрыты входом. Бухгалтерия уверена, что внешние контрагенты видят только свои документы, — ваш заказчик попросил проверить это утверждение до подписания договора с ЭДО-оператором. ## Цель 1. Войдите под обычной учётной записью и изучите раздел счетов: какой параметр адреса выбирает конкретный документ. 2. Прочитайте счёт, не принадлежащий вашему пользователю, не имея никаких административных прав. 3. Среди чужих счетов найдите конфиденциальный документ администратора со значением `flag{...}` и сдайте флаг. ## Теория IDOR (Insecure Direct Object Reference) — прямая ссылка на объект без проверки прав на него. Сервер проверяет аутентификацию — что сессия валидна, — но не авторизацию: вправе ли именно этот пользователь читать именно этот документ. Идентификатор объекта приходит из запроса, и атакующий подставляет чужой. **Уязвимый паттерн:** ```php $stmt = $db->prepare('SELECT id, user_id, recipient, amount, description, created_at FROM invoices WHERE id = ?'); $stmt->execute([$id]); $invoice = $stmt->fetch(); ``` Выборка фильтруется только по идентификатору из адреса — условие на владельца отсутствует. Любой вошедший пользователь, меняя номер в адресе, получает страницы чужих счетов: и счета других клиентов (горизонтальный доступ), и конфиденциальные документы администратора (вертикальный). Список «Мои счета» при этом честно показывает только свои записи — дыра живёт в странице деталей. ## Точка входа атаки `GET /invoice?id=<номер>` — страница конкретного счёта (список своих счетов: `GET /invoices`). * **Обычный пользователь:** `demo` / `demo` Флаг — строка `flag{...}` в описании одного из чужих счетов; она сдаётся в форме проверки лабы.

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

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

IDOR: Predictable Order IDs

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

+60 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: Доступ к чужому счету Обложка лабы: IDOR: Доступ к чужому счету
IDOR

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

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

+30 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Перебор заказов по последовательным ID Обложка лабы: IDOR: Перебор заказов по последовательным ID
IDOR

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

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

+30 XP
Go Pro
Exploit Fix