GithubHelp home page GithubHelp logo

as3ng / breizhctf-2024 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from breizhctf/breizhctf-2024

0.0 0.0 0.0 272.2 MB

Breizh CTF 2024 - Challenges

Shell 0.67% JavaScript 0.26% C++ 0.28% Python 3.13% C 1.06% PHP 1.23% Java 0.04% Rust 0.02% Dart 0.05% TypeScript 0.29% CSS 0.04% Hack 0.04% Makefile 0.10% HTML 91.52% CMake 0.04% HLSL 0.18% Blade 0.65% Dockerfile 0.19% EJS 0.21% Roff 0.01%

breizhctf-2024's Introduction

Breizh CTF 2024

Logo

Pool (par ordre alphabétique)

Main

  • BDI (Organisateur)
  • Kaluche (Co-fondateur, lead pool technique)
  • SaxX (Co-fondateur)

Chall Makers

Osint Makers

Infra Makers

Full Scoreboard !

Scoreboard

Challenges Breizh CTF 2024

Répo contenant les challenges du Breizh CTF 2024

Suivi des challenges

La développement, le test et l'intégration des challenges sont suivi dans le Google Sheet : TODO.

Développement d'un challenge

Le cycle de vie d'un challenge passe par plusieurs étapes :

  1. Développement du challenge sur une branche git dédiée (on ne push pas sur main 💀)
  2. Création d'une merge request dans Gitlab pour demander la validation du challenge par les pairs. N'hésitez pas à le notifier sur Discord. Une ou plusieurs personnes peuvent tester le challenge, mais l'équipe infra doit forcement approuver la merge request pour vérifier l'intégration dans l'infrastructure.
  3. La merge request est approuvé : le challenge est terminé

Architecture d'un challenge

Vous trouverez des exemples concrets dans le dossier _exemple du projet.

.
└── nom_categorie
    └── nom_challenge
        ├── dist
        ├── README.md
        ├── solve
        └── src
            └── ...

Note : le nom des dossiers doit être sans accents en camel_case (tout en minuscule avec des underscores à la place des espaces)

Le README.md :

  • Mettez-y l'énoncé, les tags s'il y en a, l'auteur (vous ! afin de savoir à qui s'adresser lors du CTF s'il y a un problème). Et toute information complémentaire. Vous pouvez également mettre une checkbox afin de savoir si le challenge a été testé !

Dans src :

  • Mettez toutes les sources du challenge.
  • Si le challenge est un challenge hébergé sur un conteneur, mettez-y un Dockerfile. Idéalement le Dockerfile devrait utiliser une des images de bases, plus d'informations sur la construction d'un Dockerfile dans la section #Dockerfile de ce README.
  • Le dossier src ne devrait PAS stocker des binaires compilés. Chaque fichier doit être reproductible en compilant à travers un environnement générique.
    Exception : pour les challenges demandant des actions manuelles tels que les challenges de forensiques ou certains challenges de reverse qui demandent des modifications manuelles, il sera possible de stocker directement vos fichiers sur le git.
  • Concernant les gros fichiers (> 20Mo), ils devront être obligatoirement être stockés en utilisant git LFS. Sans git LFS, ces gros fichiers impacteraient fortement les temps de git clone et git pull de toute l'équipe.
  • Pensez à configurer les .gitignore correctement pour ne pas envoyer de fichiers inutiles tels que les node_modukes, les pycache ou les dossiers vendor de vos projets.

Dans files :

  • Les fichiers que vous voulez fournir aux joueurs tel que les sources d'un challenge ou les fichiers d'un challenge forensique.
  • Pour les archives de code sources, il serait idéal de créer un script qui zip automatiquement les sources du challenge pour produire le zip en question. Cela évitera de modifier les sources d'un challenge en oubliant de mettre à jour le zip à donner aux joueurs.
  • Pour les binaires compilés, il serait idéal de fournir un script qui compile le binaire dans un docker. Cela permettra d'éviter les différences de compilateurs qui peuvent dépendre de l'OS du chall maker.

Dans solve :

  • Un README.md expliquant la procédure de résolution complète du challenge. Vous pouvez utiliser des spoiler pour ne pas dévoiler toute la solution dès la première ouverture du fichier.
  • Un script permettant de résoudre le challenge automatiquement (permet de vérifier que le challenge fonctionne correctement notamment). Ce script sera utiliser pendant la phase de validation pour vérifier que le challenge fonctionne correctement et pendant le CTF pour vérifier qu'un challenge n'est pas tombé. Ce fichier doit prendre en argument l'adresse où est hébergé le challenge pour aussi bien fonctionné en local qu'à distance.

Le challenge.yml :

  • Le challenge.yml sera utilisé par plusieurs outils automatisés pour configurer le CTFd et déployer l'infrastructure. Remplissez-le en suivant les exemples
  • Faites-attention à la catégorie qui doit commencer par une majuscule. Exemple : Pwn Forensique Web

Construction d'une image docker

Afin d'homogénéiser les images Docker, plusieurs modèles d'image sont à votre disposition dans le projet "docker" dans gitlab. L'objectif du dossier docker n'est pas de copier son contenu, mais de l'utiliser comme image de base.

Le dossier contient 3 images de base :

  • tcp qui est une image debian 12 avec socat préconfiguré sur le port 1337. Le programme lancé par socat doit se trouver dans /challenge/challenge dans le conteneur. Vous trouverez un exemple d'utilisation dans le dossier _exemple_tcp
  • web qui est une image alpine avec apache2+php8 d'installé. La racine du serveur web se trouve dans le dossier /challenge du conteneur. Vous trouverez un exemple d'utilisation dans le dossier _exemple_web
  • python-flask qui est une image avec nginx configuré pour fonctionner avec un programme uwsgi. Le programme par défaut doit se trouver dans le dossier /challenge/challenge.py du conteneur

Si votre challenge assez générique peut utiliser l'une de ces 3 images, utilisez les. Si la nature de votre challenge est trop compliqué pour utilisez l'une de ces images, demandez un avis à la team infra avant de merge votre projet

Vous retrouverez des exemples complets dans le dossier _exemple

Validation d'un challenge

Le développement d'un challenge se déroule sur une branche dédiée. Lorsque vous êtes prêt à merge un challenge, vous pouvez créer une Merge Request dans Gitlab:

  • Menu Merge request -> New merge request
  • Sélectionnez la branche sur laquelle vous avez développée le challenge et continuez
  • Pour le titre, renseignez le nom du challenge
  • Pour la description, vous pouvez sélectionner le template new_challenge Selection du template
  • Validez la création de la merge request
  • Une fois la merge request créée, vous pouvez cocher la checklist pour vérifier que vous avez bien rempli tous les points :
  • Checklist

breizhctf-2024's People

Contributors

adam-lebon avatar kaluche avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.