Skip to content

SgffCTF/ms4me

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ms4me | CTF Attack-Defense service

ms4me представляет из себя сервис для CTF формата Attack-Defense, который содержит чекер совместимый с жюрейной системой ForcAD.

Оглавление

  1. Описание
  2. Запуск
  3. Структура директорий сервиса
  4. Диаграмма
  5. Уязвимости
  6. Чекер

Описание

Сервис представляет из себя онлайн игру "Сапёр".

Функциональные возможности сервиса:

  • Создание игр (публичные/приватные)

    Приватные игры доступны по ссылке. Доступ к ним можно получить только зная id игры.

  • Отображения списка игр в realtime

    Основной страницей является список игр, который содержит две вкладки:

    • Все игры
    • Мои игры - текущие игры, а также история предыдущих игр

    На основной странице игрок также подключается по websocket к серверу, чтобы список игр актуализировался по мере их добавления

  • Внутриигровой чат

    В игровых комнатах есть чат. Жизнь сообщений в нём 20 минут, после чего сообщения удаляются. Также историю сообщений можно посмотреть после игры во вкладке "Мои игры".

  • Отображения игрвого поля в realtime

    Во время входа в игру устанавливается websocket соединения. Далее по нему передаются все данные для отрисовки поля.

Сервис содержит следующие микросервисы:

  • game-srv - сервис необходимый для CRUD операций над играми, вывода в виде списка их, поиска и т.п. Также управляет пользователями и добавляет игроков в игры
  • ingame-srv - сервис необходимый для realtime действий, таких как чат, действия на игровом поле и т.п. Также сервис имеет http ручки для взаимодействия с полем и чатом.
  • База данных PostgreSQL - используется для хранения персистентных данных: пользователи, игры, игроки
  • База данных Redis - используется для хранения временных данных: текущая информация об игроках в игре, состояние игрового поля, чат.

Также стоит отметить:

  • Сервис game-srv иногда обращается к ingame-srv напрямую, чтобы получить информацию о состоянии готовности игры.
  • Сервис ingame-srv иногда обращается к game-srv напрямую. Это нужно для закрытия игры после получения информации о ивенте, который сообщает, что игра завершилась, а также для получения статуса игры из основной БД.

Сервис ingame-srv не осуществляет каких-либо операций создания/изменения. Он необходим только лишь для realtime уведомлений пользователей на игровом поле/в чате.

Сервис не содержит как такового auth сервиса, поэтому в качестве упрощения game-srv и ingame-srv для авторизации пользователей оба валидируют у себя токены одним и тем же секретом.

Хранение флага подразумевается в чате игры.

Запуск

cd service
chmod +x start.sh
./start.sh

Структура директорий сервиса

Проект состоит из нескольких основных компонентов:

  • service/deploy/: Dockerfile'ы для запуска сервисов
  • service/game_front/: Frontend, React
  • service/game-srv/: Микросервис game-srv для CRUD операций над играми, пользователями
  • service/ingame-srv/: Микросервис для realtime информации в игре, чате
  • service/migrations/: Миграции для PostgreSQL
  • service/docker-compose.yml: Docker-compose конфиг, который запускает все сервисы
  • service/start.sh: Скрипт для запуска сервисов

Диаграмма

Уязвимости

Сервис содержит 2 уязвимости. Разбор уязвимостей и эксплойты можно посмотреть тут.

Чекер

Чекер находится тут. Был протестирован на проверяющей системы ForcAD.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published