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

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

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

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

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

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

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

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

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

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: IDOR: предсказание UUID v1 по таймстампу Обложка лабы: IDOR: предсказание UUID v1 по таймстампу
IDOR

IDOR: предсказание UUID v1 по таймстампу

Заказы интернет-магазина идентифицируются UUID v1 (timestamp + MAC + clock_seq). Все заказы созданы внутри одного процесса, поэтому делят те же node/clock_seq биты — отличаются только по timestamp. Эндпоинт /order/:uuid не проверяет владельца, и атакующий, имея один свой UUID, угадывает UUID соседних заказов и получает чужие данные, включая CTF-флаг.

+90 XP
Node.js 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