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

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

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

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

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Легко+30 XP ~15 мин python
CWE-639 · A01:2021 Pro
Обложка: IDOR: Доступ к чужому счёту Обложка: IDOR: Доступ к чужому счёту
Задача
# IDOR: доступ к чужим счетам ## Сценарий Вы проводите аудит **NorthLedger** — платформы заказов на Flask, выросшей из небольшого магазина: у каждого покупателя есть личные счета — документы с суммами, покупками и платёжными деталями. Бухгалтерия настаивала, чтобы счета были «приватными как сейф», и разработчик заверил: доступ к ним только у авторизованных пользователей. Финансовый директор перед годовым отчётом заказал проверку независимым аудитом. Заверение верно лишь наполовину: авторизация на страницах счетов есть, но это аутентификация — проверка «вошёл ли пользователь». Проверки «вправе ли именно этот пользователь смотреть именно этот счёт» в одном из мест нет. Такая пара ошибок — классическая **Insecure Direct Object Reference**: идентификатор документа прямо в адресе, а владелец не сверяется. Среди счетей есть и чужой конфиденциальный — с флагом. ## Цель 1. Авторизуйтесь как обычный пользователь и изучите раздел своих счетов: как устроены адреса страниц деталей. 2. Определите, что именно решает, какие счета вам доступны, — и что произойдёт при подстановке в адрес идентификатора из чужого диапазона. 3. Прочитайте чужие счета, воспользовавшись отсутствием проверки владельца. 4. Найдите среди них конфиденциальный счёт с флагом. ## Теория Прямая ссылка на объект (`/invoice/<номер>`) — самый распространённый способ адресации ресурсов. Проблема возникает, когда сервер выбирает запись только по этому номеру, игнорируя, кому она принадлежит: аутентификация подтверждает личность, но не права на конкретный ресурс. Числовые идентификаторы предсказуемы и перебираются подряд, поэтому «скрытость» ссылки не защищает: любой вошедший пользователь способен пройтись по чужим документам, меняя номер в адресе. Защита строится на сверке владельца ресурса с текущим пользователем из серверной сессии — на каждом запросе. **Уязвимый паттерн:** ```python 'SELECT id, user_id, title, amount, description FROM invoices WHERE id=?' ``` Выборка выполняется только по идентификатору из адреса; условие на владельца отсутствует. ## Точка входа атаки `GET /invoice/<id>` — страница деталей счёта по числовому идентификатору. Список своих счетов — `GET /invoices`. **Обычный пользователь:** `demo` / `demo`

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

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

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

Админ-эндпоинты проверяют аутентификацию, но не роль пользователя.

+30 XP
Python 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
Обложка лабы: IDOR: Перебор заказов по последовательным ID Обложка лабы: IDOR: Перебор заказов по последовательным ID
IDOR

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

Заказы используют последовательные целочисленные ID без проверки владельца.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: IDOR: Доступ к чужому счету Обложка лабы: IDOR: Доступ к чужому счету
IDOR

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

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

+30 XP
Go Pro
Exploit Fix