From 0d125071efaf6c42e93cacf277c559e08afee92a Mon Sep 17 00:00:00 2001 From: nemunaire Date: Wed, 2 May 2018 01:30:23 +0200 Subject: [PATCH] admin/sync: update README.md to introduce new syntax of the year --- admin/sync/README.md | 190 +++++++++++++++++++++++++++++-------------- 1 file changed, 131 insertions(+), 59 deletions(-) diff --git a/admin/sync/README.md b/admin/sync/README.md index 72948c88..0540a866 100644 --- a/admin/sync/README.md +++ b/admin/sync/README.md @@ -1,42 +1,57 @@ -Format des répertoires pour la synchronisation -============================================== +Détails de l'aborescence attendue +--------------------------------- -- Un dossier par groupe/scénario, contenant : - * `AUTHORS.txt` avec vos noms, tels qu'ils apparraîtront sur le site - * `introduction.txt` une présentation rapide du scenario (~2-3 phrases d'accroche pour lecture rapide), compréhensible par un décideur, petit schéma a l'appui - * Un dossier par challenge : `CHID-Titre du challenge` - + `scenario.txt` contenant le scénario du challenge, tel qu'il sera affiché sur le site, à destination des participants - + `introduction.txt` une présentation rapide du challenge (~1-2 phrases d'accroche), compréhensible par un décideur, petit schéma a l'appui si besoin - + `defines.txt` définitions de quelques paramètres (format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) : - - `gain = 42` : nombre de points que rapporte cet exercice ; - - `[[hint]]` : paramètres pour un indice : - * `filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `hints` ; - * `cost = 10` : coût de l'indice (par défaut 1/4 des gains du challenge) ; - * `title = "Foo Bar"` : titre de l'astuce dans l'interface (par défaut "Astuce $id") ; - + `depends.txt` contenant les dépendances : - - une dépendance par ligne - - format d'une ligne : `CHID` - + `flags.txt` contenant les flags : - - un flag par ligne - - format d'une ligne : `DescriptionFlag` - le premier caractère tabulation est utilisé comme séparateur entre la description et le flag. Prennez garde à ce que votre éditeur de texte ne remplace pas cette tabulation par des espaces ! - - la description est facultative (sera remplacé par « Flag »), mais la tabulation ne l'est pas. - + `flags-ucq.txt` pour un questionnaire type cases à cocher : - - une question par ligne - - format d'une ligne : `Intitulé` - le premier caractère `0` ou `1` indique si la bonne réponse est de cocher la case ou non. L'intitulé commence sans séparateur. - + `flags-mcq.txt` pour un questionnaire à choix multiple : - - une question par ligne avec ses réponses, séparé par des tabulations - - format d'une ligne : `QuestionRéponse 1Réponse 2<...>` +- Un dossier par thème `IDTEAM-Nom du thème` (`IDTEAM` peut être un mot, sans tiret `-` ; le nom du thème est celui qui sera affiché dans l'interface, soyez créatifs !), contenant : + * `AUTHORS.txt` avec vos noms, tels qu'ils apparraîtront sur le site (voir exemple [plus bas](#exemple-authorstxt)) + * `overview.txt` une présentation rapide du scenario (~2-3 phrases d'accroche pour lecture rapide), compréhensible par un décideur, petit schéma à l'appui + * Un dossier par challenge : `CHID-Titre du challenge` (avec `CHID` l'identifiant numérique du challenge, typiquement son numéro d'ordre), contenant : + + `overview.txt` une présentation rapide du challenge (~1-2 phrases d'accroche), compréhensible par un décideur, petit schéma à l'appui si besoin + + `statement.txt` contenant le scénario du challenge, tel qu'il sera affiché sur le site, à destination des participants + + `challenge.txt` définitions des paramètres de votre challenge (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) : + - `gain = 42` : nombre de points que rapporte cet exercice ; + - `[[depend]]` : dépendance à un autre exercice : + * `id = CHID` : identifiant du challenge ; + * `theme = "NomDuTheme"` : (facultatif) nom du thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ; + - `[[flag]]` : drapeau classique à valider pour résoudre le challenge : + * `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ; + * `raw = 'MieH2athxuPhai6u'` : drapeau exact à trouver ; + * `ignorecase = true` : (facultatif, par défaut : `false`) ignore la case de ce drapeau ; + * `help = "Indication"` : (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ; + - `[[flag_mcq]]` : drapeau sous forme de question à choix multiple (cases à cocher) : + * `label = "Intitulé du groupe"` : (facultatif) intitulé du groupe de choix ; + * `[[flag_mcq.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix : + + `label = "Intitulé de la réponse"`, + + `value = true` : (facultatif, par défaut `false`) valeur attendue pour ce choix ; + - `[[flag_ucq]]` : drapeau sous forme de question à choix unique : + * `label = "Intitulé du groupe"` : (facultatif) intitulé du groupe de choix ; + * `raw = 'MieH2athxuPhai6u'` : drapeau attendu parmi les propositions ; + * `help = "Indication"` : (facultatif, uniquement si `displayAs = select`) chaîne de caractères placée sous le champ du formulaire ; + * `displayAs = "select|radio"` : (facultatif, par défaut `radio`) manière dont est affichée le choix : `select` pour une liste de choix, `radio` pour des boutons radios ; + * `choices_cost = 20` : (facultatif, par défaut `0`) coût pour afficher les choix, avant l'affichage, se comporte comme un `flag` classique (à 0, les choix sont affichés directement) ; + * `[[flag_ucq.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix : + + `value = "response"` : valeur qui sera retournée pour comparaison avec la valeur `raw` du ucq, + + `label = "Intitulé de la réponse"` : (facultatif, par défaut identique à `value`) ; + - `[[hint]]` : paramètres pour un indice : + * `filename = "toto.txt"` : (mutuellement exclusif avec `content`) nom du fichier tel qu'il apparaît dans le dossier `hints` ; + * `content = "Contenu de l'indice"` : (mutuellement exclusif avec `filename`) contenu de l'indice affiché ; + * `cost = 10` : (facultatif, par défaut 1/4 des gains du challenge) coût de l'indice ; + * `title = "Foo Bar"` : (facultatif, par défaut "Astuce $id") titre de l'astuce dans l'interface ; + `links.txt` : webographie publiée avec les solutions - un lien par ligne - format d'une ligne : `https://lien Description` le premier ' ' est utilisé comme séparateur entre le lien et sa description - liens vers les CVE concernées, metasploit/exploitDB, article qui vous a aidé, extrait/dépôt de code, ... + `hints/` : dossier contenant des indices pour orienter le participant (qu'il débloquera en échange d'un certain nombre de points) - - l'ordre alphabétique détermine l'ordre dans lequel seront proposé les astuces (préfixez par des numéros si besoin d'ordre) - les fichiers textes de moins de 25 lignes sont affichés directement, les autres (autres types ou textes plus longs) sont proposés au téléchargement. - + `resolution/` : dossier contenant les vidéos de résolution + + `files/` : fichiers à distribuer aux participants + - `DIGESTS.txt` : contenant les condensats des fichiers : `$(b2sum * > DIGESTS.txt)` à générer avant l'upload ! + - Pas plus 4GB à télécharger **par challenge** (ie. tous les fichiers de ce challenge) + - Archives `.tar.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ... + - Compresser (sans tarball, juste via **gzip**) les fichiers lorsque c'est utile (memory dump, images BMP, disques, fichiers textes, ...) + - Utiliser `$(split -b 240M -d BIG_FILE BIG_FILE.)` pour uploader les gros fichiers sur owncloud. + Ces fichiers seront concaténés au moment de leur import sur l'interface. + Seul le hash du fichier entier est requis dans le fichier `DIGESTS.txt`. + + `resolution.mp4` : la vidéo de résolution, montée : - format MP4 (H.264 + AAC + 3GPP Timed Text) - utiliser les sous-titres pour commenter les étapes ; pas de commentaires audio - environ 2' par vidéo : maxi 1'30" pour les challenges simples, 3-4' maxi @@ -44,14 +59,6 @@ Format des répertoires pour la synchronisation - [recordMyDesktop](http://recordmydesktop.sourceforge.net/) sous Linux - [Screencast Capture Lite](http://cesarsouza.github.io/screencast-capture/) pour Windows (pas de logiciel de « démonstration » => il faut payer la licence pour publier une vidéo) - [Aegisub](http://www.aegisub.org/), [Gnome Subtitle](http://gnomesubtitles.org/), emacs/vim, ... pour les sous-titres - + `files/` : fichiers à distribuer aux participants - - `DIGESTS.txt` : contenant les condensats des fichiers : `$(b2sum * > DIGESTS.txt)` à générer avant l'upload ! - - Pas plus 4GB à télécharger **par challenge** (ie. tous les fichiers de ce challenge) - - Archives `.tader.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ... - - Compresser (sans tarball, j+wwwwwwwwwwwwwwwwwwuste via **gzip**) les fichiers lorsque c'est utile (memory dump, ...) - - Utiliser `$(split -b 240M -d BIG_FILE BIG_FILE.)` pour uploader les gros fichiers sur owncloud. - Ces fichiers seront concaténés au moment de leur import sur l'interface. - Seul le hash du fichier entier est requis dans le fichier `DIGESTS.txt`. + `ressources/` : - ressources et scripts que vous avez réalisés pour le challenge : pour sa construction ou sa résolution - schéma du SI au premier challenge concerné @@ -61,13 +68,13 @@ Format des répertoires pour la synchronisation Exemple d'arborescence ---------------------- - Active Directory/ + SATURN-Active Directory/ ... - Virtualisation légère/ + SATURN-Virtualisation légère/ ... - PDF/ + JUPITER-PDF/ AUTHORS.txt - introduction.txt + overview.txt 1-Cible cachée/ ... 2-Black&White/ @@ -79,21 +86,21 @@ Exemple d'arborescence big_clue.pdf.00 big_clue.pdf.01 big_clue.pdf.02 - resolution/ - resolution.mp4 ressources/ generator.pl PDFextractor.exe solver.py pdf_index_schema.svg - flags.txt - scenario.txt + challenge.txt links.txt + overview.txt + resolution.mp4 + scenario.txt ... -Exemple `AUTHORS.txt` -------------------- +Exemple `AUTHORS.txt` {#exemple-authorstxt} +--------------------- ``` Courtois J. @@ -106,20 +113,79 @@ Vous pouvez indiquer entre chevrons, un lien qui sera associé à votre nom. Vous pouvez utiliser un pseudo si vous n'êtes pas fier de vos réalisations. -Exemple `flags.txt` -------------------- +Exemple `challenge.txt` {#exemple-challengetxt} +----------------------- ``` -Date d'exfiltration (yyyy-mm) 2015-12 -IPv6 d'exfiltration fe80::319c:1002:7c60:68fa - CocoRik0 +gain = 42 + +[[depend]] +id = 2 + +[[flag]] +label = "Date d'exfiltration" +help= "Format : yyyy-mm" +raw = '2015-12' + +[[flag]] +label = "IPv6 d'exfiltration" +raw = 'fe80::319c:1002:7c60:68fa' +ignorecase = true + +[[flag_ucq]] +label = "Conditions générales de validation de challenge" +raw = 'conscent' + + [[flag_ucq.choice]] + label = "J'accepte les conditions" + value = 'conscent' + +[[flag_ucq]] +label = "Quelle est la couleur du cheval blanc d'Henri IV ?" +raw = 'blanc' +displayAs = "select" + + [[flag_ucq.choice]] + label = "Noir" + value = 'noir' + + [[flag_ucq.choice]] + label = "Vert" + value = 'vert' + + [[flag_ucq.choice]] + label = "Blanc" + value = 'blanc' + +[[flag_mcq]] +label = "Quels sont les films réalisés par C. Nolan ?" + + [[flag_mcq.choice]] + label = "Memento" + value = true + + [[flag_mcq.choice]] + label = "Inception" + value = true + + [[flag_mcq.choice]] + label = "Transcendance" + +[[hint]] +filename = 'top100.txt' +title = "L'astuce du siècle" + +[[hint]] +content = """ +Le TOML c'est magique. +Je peux avoir des chaînes de caractères sur plusieurs lignes ! +""" +title = "L'astuce du siècle" +cost = 30 ``` -Sans description comme sur cette dernière ligne, l'intitulé affiché du flag -sera "Flag :". - -Exemple `links.txt` +Exemple `links.txt` {#exemple-linkstxt} ------------------- ``` @@ -129,7 +195,7 @@ https://nist.gov/ CVE-2016-4242 ``` -Exemple `DIGESTS.txt` +Exemple `DIGESTS.txt` {#exemple-digeststxt} --------------------- ``` @@ -137,3 +203,9 @@ Exemple `DIGESTS.txt` 023939b0c52b0dfce66954318ab82f7a8c10af4c79c8d5781612b58c74f3ace056067d7b15967e612b176a186b46d3d900c4db8881ba47202521eec33e5bb87b fic.org 7c91450239cf9b0717642c55c3429dd7326db26e87d4ca198758053333f0640ee89d2dd9b2f1919598f89644b06aa8fc2085648e3d1e542a6db324c9b16a0bdf header.tex ``` + +--- +title: Format des répertoires pour la synchronisation +author: FIC team 2019 +date: "Dernière mise à jour du document : 08 mai 2018" +---