Источник: https://github.com/AnaktaCTF/CTF/blob/main — WEB/working with API.md
Capture The Flag (CTF) — это формат соревнований в области информационной безопасности, где участники решают задачи, связанные с нахождением уязвимостей в системах и приложениях. Одной из ключевых тем, обсуждаемых на CTF, является работа с API (Application Programming Interface).
Основы работы с API
API представляет собой набор правил и протоколов, позволяющих различным программным приложениям взаимодействовать друг с другом. В контексте CTF, работа с API может включать:
• Аутентификацию: процесс проверки подлинности пользователя.
• Авторизацию: процесс определения прав доступа пользователя к ресурсам.
• Обмен данными: отправка и получение данных между клиентом и сервером.
Уязвимости API
Существует множество уязвимостей, которые могут быть использованы для атаки на API. Рассмотрим несколько наиболее распространенных:
- Небезопасные прямые ссылки на объекты (IDOR)
IDOR (Insecure Direct Object Reference) — это уязвимость, позволяющая злоумышленнику получить доступ к объектам или данным, к которым он не должен иметь доступа. Например, если API позволяет запрашивать данные по идентификатору пользователя, злоумышленник может изменить идентификатор в запросе и получить доступ к данным другого пользователя.

Злоумышленник может изменить 2 на 1 и получить данные другого пользователя.
- Недостатки аутентификации пользователей
Многие API имеют недостатки в механизмах аутентификации. Это может включать использование предсказуемых токенов или отсутствие проверки подлинности для определенных запросов. Злоумышленники могут использовать эти недостатки для получения несанкционированного доступа к ресурсам.
- Избыточная передача данных
Иногда API возвращает больше данных, чем необходимо. Это может привести к утечкам конфиденциальной информации. Например, если запрос на получение данных о пользователе возвращает не только имя и email, но и ответ на секретный вопрос.
Методы защиты API
Для защиты API от уязвимостей необходимо применять ряд методов:
- Использование HTTPS
Все данные, передаваемые через API, должны шифроваться с помощью HTTPS. Это предотвращает перехват токенов и других конфиденциальных данных во время передачи
- Проверка прав доступа
Каждый запрос к API должен проверять права доступа пользователя. Это включает в себя проверку токенов аутентификации и авторизации
- Ограничение доступа по IP
Можно ограничить доступ к API только для определенных IP-адресов или диапазонов адресов. Это поможет предотвратить атаки из внешних источников.
- Логирование и мониторинг
Необходимо вести логи всех запросов к API и мониторить их на предмет подозрительной активности. Это поможет выявить возможные атаки на ранней стадии
Примеры задач CTF с использованием API

Ваш друг разработал платформу для регистрации и создания приватных заметок. Всё работает через API. Перед тем как приступить к разработке фронтенда, друг попросил вас проверить что всё безопасно.
Решение:
Переходим на страницу задания:
http://challenge01.root-me.org:59088/

И мы сразу видим интерфейс Swagger.
Swagger позволяет:
• интерактивно просматривать спецификацию и отправлять запросы;
• генерировать документацию на основе существующего кода на основе Java Annotation;
• создавать клиентов для неё.
В визуальном веб-GUI Swagger можно:
• просмотреть типы поддерживаемых HTTP-методов и описание схемы используемых данных;
• протестировать их.
Имеем четыре функции API:
• /api/signup — регистрация пользователя
• /api/login — вход в приложение
• /api/user — получение информации о пользователе
• /api/note — редактирование заметки
Регистрируем нового пользователя, здесь же в GUI.


Пользователь зарегистрирован.
Мы видим путь, куда отправляется POST запрос и результат выполнения.
Попробуем отредактировать свою заметку. Судя по описанию, нам нужно просто отправить значение note.


Прочитаем данные о своём пользователе.

/api/user имеет параметр user_id
{
"note": "Привет из internet-lab.ru!",
"userid": 5,
"username": "internet"
}

Получаем нашу заметку, имя и идентификатор пользователя.
Этот параметр имеет приписку (path). Т.е. он используется в пути.
http://challenge01.root-me.org:59088/api/user/5

И получаем тот же JSON. А в URL-то у нас идентификатор пользователя, подставим единицу:
http://challenge01.root-me.org:59088/api/user/1

Заключение
Работа с API в контексте CTF представляет собой важный аспект изучения безопасности информационных систем. Понимание основных уязвимостей и методов защиты помогает не только в соревнованиях, но и в реальной практике разработки безопасных приложений. Участие в CTF-соревнованиях позволяет практиковаться в нахождении уязвимостей и разработке эффективных методов защиты, что является важным навыком для специалистов в области информационной безопасности.
Рекомендации по дальнейшему изучению
• Изучите OWASP Top Ten — список наиболее распространенных уязвимостей веб-приложений.
• Практикуйтесь на платформах CTF, таких как Hack The Box или TryHackMe.
• Ознакомьтесь с инструментами для тестирования безопасности API, такими как Postman или Burp Suite.
Используемые источники:
http://challenge01.root-me.org:59088/
https://dzen.ru/a/Zi7BVxkUjnghD1oE
https://internet-lab.ru/ctf_api_broken_access
https://lins05.gitbooks.io/seafile-docs/content/develop/web_api.html