Proposer une épreuve
Vous avez une idée d'épreuve et vous comptez nous la proposer ? Dans ce cas cette page est faite pour vous.
Avant de commencer à créer ou rédiger/coder quoi que ce soit, prenez le temps de lire ce document.
Conditions générales
Votre épreuve doit proposer quelque-chose de nouveau sur le site.
Qu'elle tourne autour d'une faille, d'une énigme, de l'application d'un algorithme, etc... Il faut que ce soit inédit
sur le site.
Il est toutefois autorisé d'utiliser des éléments déjà présents dans d'autres épreuves si et seulement si ce n'est
pas la partie principale de votre épreuve.
Par exemple, si l'objectif de votre épreuve est de résoudre une énigme A mais qu'une autre épreuve tourne autour de cette énigme, l'épreuve sera refusée. En revanche, si l'objectif est de résoudre une énigme B mais que votre épreuve demande de résoudre A pour y arriver, même si A est déjà présente dans une autre épreuve, votre épreuve pourra être acceptée.
La création d'un challenge demande donc de connaitre un minimum les épreuves et le site, c'est pour cela que vous devez impérativement avoir au moins 200 points sur le site avant de pouvoir proposer une épreuve.
Si vous n'êtes pas sûr de l'exclusivité de votre épreuve, vous pouvez toujours contacter un admin où demander à un membre ayant validé plus d'épreuves si votre concept est déjà présent sur le site ou non.
Votre épreuve doit admettre un titre, une description, un mot de passe et être lié à une catégorie. Merci de prendre le temps de rédiger proprement les champs textuels. Chaque catégorie possède des règles précises (définies plus bas).
Le champ mot de passe est totalement libre, mais il est recommandé qu'il respecte quelques règles :
- Une longueur minimum pour éviter toute tentative de brute force (au moins 20 caractères)
- Des caractères mélangés (majuscules, minuscules, chiffres, symboles, etc...)
De plus, nous instaurons de plus en plus la mise en place du pattern suivant pour les mots de
passes :
NC{Une_chaine_de_caractères_plutôt_longue}
Avec le texte de votre choix à la place de Une_chaine_de_caractères_plutôt_longue. Cela permet aux
challengeurs de repérer plus simplement la fin d'une épreuve.
Le non-respect d'une de ces règles n'entraîne pas forcément le refus de l'épreuve, mais il pourra vous êtes demandé de la corriger ultérieurement si nous constatons un problème.
Si votre épreuve possède des ressources (images, codes sources ou tout autre fichier), il vous est demandé de les uploader vous-même jusqu'à ce que nous l'hébergions sur nos serveurs. Choisissez le site que vous voulez mais faites toutefois attention à la durée de vie des fichiers/liens d'accès. Nous ne sommes pas disponibles h24 et il se peut que votre épreuve reste en fil d'attente pendant plusieurs jours.
Il est également souhaitable de nous transmettre la méthode de résolution en commentaire (si nécessaire).
Une fois votre épreuve soumise, elle passera par différentes étapes :
- Vérification de l'intégrité de l'épreuve et mise en place par les administrateurs
- Envoi à l'équipe de béta-testeur pour vérifier que l'on peut la résoudre, qu'une épreuve similaire n'existe pas déjà et qu'elle n'admet pas de faille/raccourcis dans la résolution
- Validation ou refus de l'épreuve
Cette procédure prend du temps et implique différent membres qui ne sont pas forcément tout le temps disponible. Soyez donc patient ! Inutile de nous contacter tous les jours pour savoir où en est votre épreuve. Vous aurez accès à un espace pour voir l'avancement des vérifications de votre épreuve.
Conditions par catégories
En plus des règles précédentes, merci de suivre les règles spécifiques à la catégorie de votre épreuve (si existantes). Toute épreuve ne respectant pas ces instructions sera refusée.
ClientSide
Une information qui ne concerne pas toutes les épreuves : les épreuves basées sur une technologie ne fonctionnant plus sur des navigateurs modernes sont désormais bannis. Vous pouvez donc abandonner vos idées autour d'applets java.
Crackme / Wargame
Il est nécessaire de nous transmettre les sources du binaire, l'environnement ainsi que les options de compilations en plus de l'épreuve en elle-même.
Concernant les wargames, nous n'avons actuellement qu'une seule machine linux x86 (32 bits) avec l'ASLR désactivé. Inutile de nous envoyer des challenges ne pouvant fonctionner sur ce système.
Cryptographie / Stéganographie
Les épreuves de cryptographie et stéganographie se divisent globalement en deux catégories :
Celles utilisant un algorithme connu (dans le sens existant et/ou populaire). Dans ce cas de figure, merci de faire attention à ce que cet algorithme ne soit pas déjà présent dans une autre épreuve.
Celles utilisant un algorithme homemade (que vous avez créé). Ce genre d'épreuve est évidemment plus difficile à mettre en place/vérifier. Assurez-vous que les challengeurs aient suffisamment d'informations pour trouver et/ou comprendre votre algorithme, que celui-ci soit évidemment soluble, et qu'il ne demande pas de deviner les étapes.
Hacking
La procédure de conception pour un challenge de hacking est très précise et doit être suivie à la lettre !
Chaque épreuve de hacking est orchestrée par Docker, aucune
exception.
Un template est disponible à cette
adresse, il vous est fortement recommandé de l'utiliser.
Dans cet exemple, le fichier docker-compose.yml défini un service web PHP et une base de données MariaDB.
Libre à vous d'adapter ce template en fonction de votre épreuve (autre service web, absence de BDD, Sélénium,
etc...).
Il est également interdit d'utiliser un framework ou CMS pour ce type d'épreuve. Si la faille concerne un CMS/framework précis, merci de la remettre en condition manuellement.
En cas de doute, n'hésitez pas à contacter un administrateur.
Logique
Les suites logiques ne sont désormais plus acceptées sur le site.
Programmation
La procédure de conception d'épreuves de programmation est assez précise.
Avec ça, il est généralement plus long et conséquent de créer ce genre de challenges par rapport
aux autres types d'épreuves.
Il existe néanmoins 2 manières de faire dépendant du contexte de l'épreuve :
Pour les épreuves ne nécessitant qu'un unique échange client-serveur (typiquement une énigme
générée avec un résultat attendu), nous recommandons d'utiliser l'interface web.
Ce genre d'épreuve doit alors être codée en PHP pour pouvoir tourner sur nos serveurs.
Un template est disponible à cette
adresse, il vous est fortement recommandé de l'utiliser.
L'interface web peut également convenir au cas particulier des épreuves nécessitant un nombre d'échanges
client-serveur défini à l'avance.
Pour les épreuves nécessitant plusieurs échanges client-serveur (comme par exemple une partie
d'échecs, de morpion, etc...), nous recommandons d'utiliser l'interface socket.
Concernant ce genre d'épreuve, il est impératif d'utiliser le template se trouvant à cette adresse.
L'épreuve devra donc être codée en Python. Vous pouvez adapter l'ensemble des fichiers du template à
l'exception du fichier classes/connector.py qui doit rester le même pour
tous les challenges.
Foire aux questions
Les procédures de validations prennent du temps, soyez patient. Si vous voulez avoir des informations sur l'avancement de votre épreuve, vous pouvez contacter un béta-testeur.
Cela dépend du nombre d'épreuve en béta déjà validée. Nous essayons de sortir les épreuves dans leurs ordres d'arrivées en alternant au maximum les catégories.
Pour définir la catégorie de votre épreuve, vous pouvez demander à un admin ou un membre ayant un bon nombre de validations à son actif de vous aiguiller. Dans le cas où il faudrait une nouvelle catégorie, contactez directement un administrateur.
Premièrement, vous pouvez contacter un béta-testeur ou un administrateur pour savoir pourquoi votre épreuve a été refusée. Ensuite, si c'est possible, il vous sera demandé de la corriger. Il est également possible que les béta-testeurs vous suggères des améliorations possibles.
Aucun souci, nous acceptons toutes les difficultés de challenges. L'idéal est d'en avoir pour tous les goûts.
Dans ce genre de cas précis, contactez directement un administrateur et exposez lui votre idée.
Soumission de l'épreuve
Vous n'êtes pas authentifié !
Vous devez être authentifié pour soumettre une épreuve.