R50 d4aa69fc6ad4a10226a1c22d71f7c938
разработка сайтов

Платформа для проведения CTF соревнований ACLabs

Добавлено 14 янв 2025 в 12:32
Сайт доступен по адресу: https://aclabs.pro/ и включает в себя:
  • домашнюю страницу, на которой представлена основная информация;
  • страницу со списком всех заданий;
  • страницы с детальным описанием задания;
  • страницу с результатами;
  • страницу с обучающими материалами (Learning);
  • страницу с часто возникающими вопросами (FAQ);
Неавторизованным пользователям доступна только домашняя страница. Для идентификации участников при регистрации на платформе необходимо указать уникальный ключ-приглашение и адрес электронной почты. После отправки формы приходит ссылка для подтверждения участия в соревновании. Для каждого CTF определяются даты начала регистрации, старта и окончания соревнований, которые внесены в базу данных. При этом установлено ограничение для регистрации - она возможна только до начала соревнований.
После авторизации пользователю доступна страница с заданиями, на которой отображается таймер обратного отсчета до начала соревнования. Также открывается доступ к страницам FAQ и Learning.

После начала соревнований, у пользователей будет доступ ко всему спектру возможностей платформы включая описания задач, рейтинговые таблицы и ресурсы виртуальных машин.
В каждом из заданий может быть различное количество флагов, в зависимости от типа задания, а сложность взятия каждого из флагов определяется его стоимостью. Количество флагов в задании и их начальная стоимость указана на карточке задания в разделе Tasks. Также в правом верхнем углу карточки отображается суммарное количество взятых на данный момент флагов всеми пользователями для данного таска.
При клике на карточку задания, пользователь перенаправляется на страницу с заданием, где в разделе проверки флагов можно увидеть взятые флаги.
Для каждого участника CTF запускается своя уникальная виртуальная машина. При нажатии на кнопку «Start», генерируется отдельная сущность машины и через какое-то время появляется ее IP адрес.
Автоматически каждая машина запускается на 2 часа и появляется таймер обратного отсчета до удаления машины.
Если у пользователя осталось менее часа до остановки машины, можно добавить еще час времени. Эту процедуру можно повторять столько раз, сколько понадобиться времени на решение задания. После истечения времени работы машины, если по какой-либо причине не нажата кнопка «Terminate», машина удалится автоматически.
Пользователь одновременно можете запускать и работать только с одной машиной. Для старта машины в другом задании, предыдущая машина должна быть обязательно остановлена. Если же предыдущая машина не остановлена, то при переходе на страницу с заданиями, будет отображаться зеленый мигающий индикатор в верхнем левом углу карточки задания с работающей машиной. При попытке запустить машину из другого задания, появится сообщение о необходимости остановить предыдущую машину.
На странице Results выводится график для десяти лидеров соревнования, в таблице же доступны результаты всех пользователей.
При наведении на точки графика можно видеть какой флаг и когда был взят, а также общую стоимость баллов в тот момент. На графике можно выключать ненужные вам линии кликом по элементу легенды, также по умолчанию присутствует опция увеличения области до масштаба 1 к 50.

Стек: платформа написана на php фреймворке Laravel. Для флеш-сообщений использовалась библиотека Sweetalert и инструмент PHPFlasher. Стилизация платформы осуществлена на основе CSS фреймворков Bootstrap и Tailwind. JavaScript графика осуществлена с помощью D36.7.0 и particles.js. Для хранения данных применялась БД SQL.
A23cab096e 3e9c226070 3730c1f646 B634809e07 7cda1884d0