Vous avez probablement entendu parler de compétitions Capture The Flag (CTF) sur les réseaux sociaux tels que LinkedIn, mais vous êtes vous déjà demandé comment réaliser un tel évènement ? Vous rêvez d’organiser une compétition CTF inoubliable mais vous ne savez pas par où commencer ? CTFd est peut-être la solution idéale.
Parmi les outils les plus populaires pour organiser ces compétitions, il existe l’outil CTFd qui se distingue en tant que plateforme open source, simple à utiliser, mais également très puissante et flexible. Cet article détaille tout ce que vous devez savoir sur CTFd, ses fonctionnalités, ses avantages, et comment l’utiliser pour créer des compétitions inoubliables.
Avant de continuer cet article, assurez-vous de bien comprendre ce qu’est un CTF. Dans le cas contraire, je vous recommande cet article : CTF : améliorer ses compétences cyber grâce au Capture The Flag.
CTFd : qu’est-ce que cette plateforme de CTF et pourquoi l’utiliser ?
CTFd, à prononcer « CTF-dee », est une plateforme open source développée spécialement pour les compétitions de type Jeopardy. Lancée initialement en 2016 par Kevin Chung sous le pseudonyme GitHub ColdHeat, CTFd a rapidement gagné en popularité grâce à sa facilité d’utilisation et à sa flexibilité.
On constate que ColdHeat est toujours actif sur le projet puisque sa dernière contribution remonte à moins d’un mois.

CTFd permet aux organisateurs de compétitions de créer et de gérer des défis pour les participants. La plateforme propose une interface intuitive, autant pour les administrateurs que pour les participants, et inclut de nombreuses fonctionnalités qui facilitent l’organisation de compétitions. De plus, étant open source, elle est hautement personnalisable et adaptable aux besoins spécifiques de chaque événement. Nous élaborerons en détail les autres fonctionnalités de CTFd.
CTFd : une communauté active

Lorsque l’on se rend sur le repository GitHub, on constate plusieurs signaux positifs :
- Le dernier commit date d’il y a moins d’un mois, le projet est donc maintenu et non pas archivé.
- Il y a plus de 2 000 forks et près de 6 000 stars ;
- et 137 contributeurs.
Une version de démo de CTFd est disponible et se réinitialise toutes les 30 minutes.
Cas d’utilisation et exemples
Éducation et milieu académique
De nombreuses écoles et universités utilisent CTFd pour enseigner la cybersécurité de manière pratique. Les étudiants apprennent en résolvant des problèmes concrets, ce qui renforce leur compréhension des concepts techniques.
Dans les lycées, c’est utilisé comme un moyen de sensibiliser les étudiants et susciter des passions ou permettre aux étudiants de prendre des décisions plus facilement quant à leur futur.
Milieu professionnel
Les entreprises quant à elles utilisent CTFd pour tester et améliorer les compétences de leurs équipes cyber mais surtout pour passer un bon moment autour de sujets passionnants. Contrairement au milieu académique où l’on peut avoir des scénarios improbables, les entreprises optent pour des scénarios plus réalistes et de tester les compétences des employés.
Fonctionnalités principales de CTFd

CTFd offre une vaste gamme de fonctionnalités pour satisfaire aussi bien les organisateurs que les participants. Voici une description détaillée de ses capacités :
Gestion des défis et des flags
CTFd permet aux administrateurs de créer des défis personnalisés en adaptant chaque aspect selon leurs besoins :
- Création et personnalisation des défis : les administrateurs peuvent configurer des titres, des descriptions, des catégories et même des défis déverrouillables basés sur des conditions précises.
- Gestion des flags : les flags peuvent être statiques ou basés sur des expressions régulières. Pour des besoins avancés, des plugins de flags personnalisés peuvent être ajoutés.
- Indications : ajoutez des indices qui peuvent être déverrouillés contre une réduction de points, offrant une aide stratégique aux participants.
- Fichiers à télécharger : fournissez aux utilisateurs des ressources à analyser, stockées localement ou dans un backend compatible avec du stockage objet Amazon S3.
- Protection contre le bruteforce : limitez les tentatives pour chaque défi afin de prévenir les soumissions abusives.
Gestion du scoring et de la visualisation
CTFd intègre un système de scoring qui vous permettra de vous adapter en fonction de votre contexte :
- Scoreboard dynamique : affichez les scores des équipes ou des participants en temps réel, avec résolution automatique des égalités.
- Gel et masquage des scores : les administrateurs peuvent cacher les scores publics ou geler le tableau à une heure précise pour des résultats plus stratégiques.
- Graphiques de progression : comparez les performances des 10 meilleures équipes et suivez la progression individuelle de chaque équipe grâce à des visualisations graphiques.

Gestion des participants et des équipes
- Modes de participation : les utilisateurs peuvent jouer en solo ou former des équipes pour collaborer.
- Outils administratifs : les administrateurs peuvent cacher, gérer ou bannir des utilisateurs et équipes en cas de besoin.
- Gestion des comptes utilisateurs : intègre un système de confirmation par email, une fonction de réinitialisation de mot de passe, et la gestion des profils des utilisateurs.
Système de contenu et automatisation
- Markdown CMS : utilisez le système de gestion de contenu basé sur Markdown pour créer des pages et fournir des instructions claires.
- Planification automatique : configurez des compétitions avec des heures de début et de fin automatiques.
Personnalisation et extensibilité
- Thèmes personnalisés : modifiez l’apparence de la plateforme en utilisant du HTML, CSS et JavaScript.
- Plugins : créez des extensions pour ajouter des fonctionnalités spécifiques ou intégrer des systèmes externes.
- Exportation et importation : importez ou exportez les données des compétitions pour archivage ou migration vers un autre serveur.
Emails et notifications
- Intégration SMTP : envoi d’emails pour les notifications, confirmations ou communications.
- Mailgun : support natif pour des campagnes d’emailing.
Architecture
- Architecture flexible : la plateforme est compatible avec Docker.
- Multi-instance : capacité à héberger plusieurs compétitions sur le même serveur avec une configuration adaptée.
Installer CTFd
Bonne nouvelle : vous avez plusieurs façons d’installer CTFd, en fonction de votre niveau de motivation et de votre envie de bidouiller :
- Depuis les sources
- À l’aide de Docker
Installer CTFd depuis les sources : pour les curieux
Si vous souhaitez personnaliser CTFd, vous pouvez l’installer directement depuis son code source.
Cloner le repository
D’abord, clonons le répertoire contenant le code source :
git clone https://github.com/CTFd/CTFd.git
cd CTFd
Installer les dépendances
Exécutez la commande suivante pour installer toutes les dépendances nécessaires :
pip install -r requirements.txt
Configurer CTFd
Modifiez le fichier CTFd/config.ini selon vos besoins pour adapter la configuration de l’application.
Lancer CTFd
Exécutez l’une des commandes suivantes dans un terminal pour démarrer CTFd en mode debug :
python serve.py / python3 serve.py
# ou
flask run
Installer CTFd avec Docker : méthode facile
Si vous ne voulez pas vous embêter avec l’installation des dépendances et la configuration manuelle, Docker est votre meilleur ami. Avec cette méthode, vous pouvez déployer CTFd en quelques commandes.
⚠️ Attention, il faut installer Docker et Docker Compose au préalable.
Utiliser l’image officielle depuis Docker Hub
Vous pouvez utiliser l’image officielle qui est déjà build et publiée sur le repository public Docker Hub par CTFd à l’aide de cette commande :
docker run -p 8000:8000 -it ctfd/ctfd
Construire l’image soi-même
Si vous préférez avoir une image Docker personnalisée et être sûr d’utiliser la dernière version, il suffit de consulter et de modifier à votre guise le fichier Dockerfile. Vous pouvez vous référer à la section ci-dessus « Installer CTFd depuis les sources > Cloner le repository) pour obtenir ce fichier. Ensuite, vous pouvez exécuter cette commande pour build l’image et lancer CTFd automatiquement :
docker compose up --build
Héberger CTFd : où et comment ?
Une fois CTFd installé, il faut choisir où l’héberger en fonction de vos besoins. Trois grandes options s’offrent à vous :
- Hébergement local 🏠 : idéal pour des tests ou des petites compétitions internes. C’est ce que nous avons fait lors de l’installation précédente.
- Hébergement dans le cloud ☁️ : parfait pour une accessibilité globale et des événements plus importants. La manière changera sensiblement en fonction du fournisseur cloud que vous avez choisi.
- Hébergement managé 🛠️ : la solution « sans prise de tête » de CTFd, où tout est géré pour vous.
Pour vous donner plus de détails sur l’hébergement proposé par CTFd, trois plans sont disponibles selon vos besoins. L’offre Basic (50$/mois) est idéale pour les petits événements avec un domaine personnalisé, TLS/SSL, emails préconfigurés et 250 000 pages vues par mois sur 5 conteneurs. L’offre Plus (100$/mois) convient aux compétitions plus grandes avec 750 000 pages vues, 10 conteneurs et des fonctionnalités avancées comme les défis de programmation et l’intégration Slack / Discord. L’offre Professional (300$/mois) cible les grandes compétitions avec 3 millions de pages vues, 30 conteneurs, l’authentification SAML et des restrictions IP. Si vous avez des besoins spécifiques, l’offre Enterprise propose un hébergement illimité et des services sur-mesure (développement de thèmes, plugins et challenges personnalisés).
Il faut noter qu’il est possible d’exporter et importer ses données d’une instance managée vers une autre instance (cloud ou on-premise) et vice-versa.
Premiers pas avec CTFd
Peu importe la méthode d’installation et d’hébergement choisi, vous pouvez vous rendre sur l’adresse et le port défini (généralement 8000, 80 ou 443). En local, vous pouvez vous rendre sur http://localhost:8000/. En production, vous pouvez remplacer localhost par votre adresse IP publique.
Configuration graphique de CTFd
Si c’est la première fois que vous accédez à CTFd, vous serez rédirigé vers l’étape de configuration http://localhost:8000/setup.
La configuration se déroule en 7 étapes :
- General
- Mode
- Settings
- Administration
- Style
- Date & Time
- Integrations
General

Mode
Dans cet écran de configuration de CTFd, vous devez choisir entre le Team Mode ou le User Mode, en fonction du type de compétition que vous souhaitez organiser.

- 🤝 Team Mode : l’esprit d’équipe est à l’honneur ! Les participants forment des équipes, et lorsqu’un membre résout un challenge, tout le monde en récolte les bénéfices.
- 👤 User Mode : chaque participant joue en solo. Les comptes sont individuels, mais rien n’empêche les joueurs de collaborer officieusement (attention au réglement !).
Settings
Sur cet écran, vous configurez la visibilité et les règles de base de votre compétition. Pas de panique, c’est simple ! D’abord, vous pouvez décider si les défis seront visibles uniquement pour les participants inscrits (mode privé) ou accessibles à tout le monde dès le départ (mode public).
Vous avez aussi la possibilité de demander une confirmation par e-mail lors de l’inscription. Pratique pour éviter les faux comptes, mais si vous voulez aller vite, vous pouvez désactiver cette option. Enfin, si vous avez activé le mode équipe, vous pouvez limiter le nombre de joueurs par équipe en indiquant une taille maximale.
Administration

Ici, vous configurez le compte administrateur de votre instance CTFd. Ce compte vous permettra de gérer toute la plateforme, donc prenez un moment pour bien remplir ces informations et l’enregistrer dans votre gestionnaire de mots de passe !
Si vous souhaitez rester à jour sur les nouveautés de CTFd, vous pouvez laisser la case « Abonnez-moi à la newsletter » cochée.
Style

Dans cet écran, vous personnalisez le style de votre plateforme CTFd pour lui donner une identité visuelle.
Commencez par ajouter un logo qui sera utilisé comme bouton de retour à la page d’accueil. Vous pouvez aussi définir une bannière pour embellir votre page d’accueil et capter l’attention des participants. N’oubliez pas le petit icône (favicon) visible dans les onglets du navigateur : il doit être au format PNG et de taille 32×32 pixels.
Ensuite, choisissez un thème parmi ceux proposés pour ajuster le design global. Le thème peut être modifié à tout moment. Enfin, sélectionnez une couleur principale (Theme Color) pour harmoniser les éléments visuels selon vos goûts ou les couleurs de votre événement.
Date & Time
Il est temps pour nous de définir les horaires de votre compétition pour l’aligner avec votre planning et celui de vos participants.
Commencez par indiquer la date et l’heure de début de votre CTF. Cela permet de verrouiller l’accès aux défis avant l’ouverture officielle. Ensuite, fixez la date et l’heure de fin pour clôturer la compétition en beauté. Les heures sont affichées avec un aperçu en UTC pour vous assurer que tout le monde est synchronisé, quel que soit son fuseau horaire.
Note : ces paramètres sont optionnels.
Integrations
Dans cet écran, on vous propose d’intégrer votre compétition à MajorLeagueCyber (MLC), un outil spécialement conçu pour suivre et promouvoir les événements cybersécurité. C’est une super option si vous voulez donner encore plus de visibilité à votre CTF !
Votre CTF pourra être affiché sur le site et la liste de diffusion de MLC, ce qui boostera sa visibilité. Vous pourrez également suivre les statistiques des participants et partager ces données, tout en envoyant des mises à jour en temps réel sur des plateformes comme Slack ou Discord pour garder vos équipes connectées. Enfin, MLC vous permettra d’archiver vos défis, la participation des équipes et d’autres informations essentielles.
Questions fréquentes CTFd
Dans cette section, je tâche de répondre aux questions qu’on m’a posé ou que j’ai pu me poser. N’hésitez pas à commenter l’article pour que je mette à jour la FAQ.
Comment importer ses challenges ?
Importer des challenges dans CTFd est assez simple, mais tout dépend de ce que vous voulez faire. Si vous avez une exportation complète d’une instance CTFd (un fichier .zip), vous pouvez tout importer via l’onglet d’administration. Rendez-vous dans Admin Panel > Config > Backup > Import & export > Import et uploadez votre fichier.
⚠️ Attention cependant : ce type d’importation effacera toutes les données existantes. Assurez-vous de ne rien perdre d’important avant de lancer l’import.

Vous avez aussi la possibilité d’ajouter des challenges spécifiques via des fichiers CSV. C’est pratique si vous ne voulez pas écraser tout ce qui est déjà en place. Pour ça, allez dans Admin Panel > Config > Backup > Import & export > Import CSV, téléchargez le modèle de fichier (template), remplissez-le avec vos données et importez-le. Les colonnes comme description, flags, hints et tags sont facultatives, donc pas besoin de tout remplir si ce n’est pas nécessaire. Simple et efficace !

Comment exporter ses challenges ?
L’exportation dans CTFd vous permet de sauvegarder vos données ou de les partager avec d’autres utilisateurs. Vous avez deux options principales : exporter une instance complète ou extraire des données spécifiques sous forme de fichiers CSV.
Pour exporter une instance complète, rien de plus simple ! Si vous voulez une sauvegarde complète de votre instance (utilisateurs, scores, challenges, tout le bazar), vous pouvez créer un fichier .zip depuis Admin Panel > Config > Backup > Export. Ce fichier contient tout ce dont vous avez besoin pour restaurer ou migrer votre CTF. Pratique, non ?

Si vous préférez exporter uniquement les challenges, vous pouvez passer par l’onglet Challenges dans le panneau Admin. Là, vous avez la possibilité de générer un fichier CSV avec tous les détails de vos challenges, prêt à être partagé ou réutilisé. C’est l’option parfaite pour ceux qui veulent juste sauvegarder les défis sans tout embarquer.
Un petit conseil : avant de migrer vers une autre version de CTFd, assurez-vous que votre export est compatible. Si vous passez d’une version 1.x à une 2.x ou supérieure, vous pourriez avoir besoin d’un script de migration pour adapter les données. Mais une fois que tout est bon, l’export/import est un jeu d’enfant !
CTFd vous permet d’exporter des données spécifiques de votre instance sous forme de fichiers CSV, une option parfaite pour analyser vos données dans un tableur, les sauvegarder ou les partager. Pour exporter, il suffit de vous rendre dans Admin Panel > Config > Backup > Download CSV, puis de sélectionner la table que vous souhaitez exporter dans la liste déroulante. Que ce soit les défis (challenges), les utilisateurs avec leurs champs personnalisés (users+fields), ou encore le tableau des scores (scoreboard), vous pouvez choisir précisément ce qui vous intéresse. Une fois la table sélectionnée, téléchargez le fichier CSV généré pour l’utiliser comme bon vous semble.
⚠️ Attention : les fichiers CSV téléchargés ne sont pas garantis d’être réimportables directement dans CTFd sans ajustement préalable. Si vous prévoyez une réimportation, veillez à respecter les modèles CSV requis par la plateforme.
Comment faire des formats Attaque & Défense ?
Il n’est pas possible de faire des formats Attaque & Défense avec CTFd. Le format Attack & Defense n’est pas supporté nativement.
Comment limiter le nombre de tentatives sur un challenge ?
Pour éviter le bruteforce, CTFd propose une option « Max Attempts » lorsque vous créez un challenge. Vous pouvez définir un nombre maximum de tentatives avant que le défi ne soit bloqué.

Si vous voulez une protection plus avancée, vous pouvez utiliser Fail2ban pour bloquer les adresses IP qui abusent des tentatives de soumission.
Conclusion
CTFd est sans conteste l’une des meilleures solutions pour organiser des compétitions CTF à moindre coût. Avec son interface intuitive, sa flexibilité et sa communauté active, elle convient aussi bien aux événements éducatifs qu’aux compétitions professionnelles. Que vous soyez un enseignant, un professionnel de la cybersécurité ou un organisateur d’événements, CTFd offre tous les outils nécessaires pour créer une belle expérience !
Laisser un commentaire