diff --git a/content/files/_index.md b/content/files/_index.md index 14182c0..20185c7 100644 --- a/content/files/_index.md +++ b/content/files/_index.md @@ -7,7 +7,7 @@ weight: 10 Afin de pouvoir être importé automatiquement sur la plate-forme, vos scénarios doivent respecter une certaine arborescence que voici : -
+```
     .
     ├── AUTHORS.txt
     ├── overview.txt
@@ -32,7 +32,7 @@ doivent respecter une certaine arborescence que voici :
     ├── CHID-Titre du défi/
     │   └── ...
     └── ...
-
+``` {{% notice info %}} N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans @@ -54,15 +54,14 @@ contenu des fichiers : Dans les noms de dossiers, `CHID` correspond à un identifiant permettant de référencer votre défi (pour déclarer une dépendance sur celui-ci par exemple). L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le numéro d'ordre de l'exercice comme identifiant : -
+```
     .
     ├── 1-Titre du premier défi/
     │   └── ...
     ├── 2-Titre du deuxième défi/
     │   └── ...
     └── ...
-
-
+``` Dans cet exemple, si l'ordre était déterminé uniquement par l'ordre alphabétique des noms de dossiers, le **d**euxième serait devant le **p**remier (`d}}). ### `statement.txt` -contenant le scénario du challenge, tel qu'il sera affiché sur le site, à destination des participants -Une présentation rapide du défi (~1-2 phrases), compréhensible par un décideur, -petit schéma à l'appui si besoin. +L'énoncé du défi, tel qu'il sera affiché sur le site, à destination des participants. Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus grosse que les suivantes). Celle-ci correspond à la première ligne de votre @@ -197,10 +194,10 @@ Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition des participants. Chaque fichier doit avoir une entrée correspondante dans le fichier -`DIGESTS.txt` ; plus d'infos sur la page [`DIGESTS.txt`]({{}}). -- Pas plus 4GB à télécharger **par challenge** (ie. tous les fichiers de ce challenge) +- Pas plus 4GB à télécharger **par défi** (ie. tous les fichiers de ce défi) : 4GB, c'est 5 minutes 20 de téléchargement, c'est vraiment beaucoup lorsqu'on est impatient de faire le défi. - Archives `.tar.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ... - Compresser (sans tarball, juste via **gzip**[^gz]) 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. @@ -227,6 +224,6 @@ titre, ... ### `ressources/` Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés -pour le challenge : pour sa construction ou sa résolution, les schémas du SI au -premier challenge concerné, éventuellement un `README.txt` avec les liens des +pour le défi : pour sa construction ou sa résolution, les schémas du SI au +premier défi concerné, éventuellement un `README.txt` avec les liens des outils externes. diff --git a/content/files/challenge.md b/content/files/challenge.md index 60724bb..beb3f0c 100644 --- a/content/files/challenge.md +++ b/content/files/challenge.md @@ -4,44 +4,47 @@ title: challenge.txt weight: 20 --- -+ `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 ; - - `tags = ["Android", "RAT", "ROM"]` : mots-clefs de l'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]]` : chaîne de validation pour résoudre le challenge : - * `type = "key"` : (facultatif, par défaut "key") type de flag : - + `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}), - + `vector` : [liste de drapeaux]({{< relref "/responses/vector.md" >}}), - + `mcq` : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}), - + `ucq` : [liste de choix]({{< relref "/responses/ucq.md" >}}) ; - * `id = 42` : (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ; - * `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ; - * `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ; - * `ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ; - * `validator_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ; - * `casesensitive = true` : (facultatif, par défaut : `false`) prend en compte 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 ; - * `choices_cost = 42` : (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un drapeau `key` classique (à 0, les choix sont affichés directement) - * `noshuffle = true` : (facultatif, par défaut `false`) conserve l'ordre des propositions, au lieu de les mélanger ; - * `[[flag.unlock_file]]` : bloque l'accès à un fichier tant que le flag n'est pas obtenu : - + `filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ; - * `[[flag.need_flag]]` : liste des flags devant être validés avant de débloquer celui-ci : - + `id = 23` : identifiant du flag tel qu'il a été défini plus tôt dans le fichier ; - * `[[flag.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix (pour les `mcq` et `ucq`) : - + `label = "Intitulé de la réponse"`, - + `value = true` (facultatif, par défaut `false`, sauf si `raw` est précisé) : valeur attendue pour ce choix, - + `raw = "Justification"` (nécessaire pour un [QCM justifié]({{< relref "/responses/mcq_justified.md" >}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées), - + `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés, - + ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : `ordered`, `validator_regexp`, `casesensitive`, ... ; - - `[[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é, en markdown ; - * `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 ; - * `[[hint.need_flag]]` : liste des flags devant être validés pour débloquer cet indice : - + `id = 23` : identifiant du flag ; +Le fichier `challenge.txt` définit les paramètres de votre défi (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 ce défi ; +- `tags = ["Android", "RAT", "ROM"]` : mots-clefs du défi ; +- `[[depend]]` : dépendance à un autre défi : + * `id = CHID` : identifiant du défi ; + * `theme = "NomDuTheme"` : (facultatif) nom du scénario/thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ; +- `[[flag]]` : chaîne de validation pour résoudre le défi : + * `type = "key"` : (facultatif, par défaut "key") type de flag : + + `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}), + + `vector` : [liste de drapeaux]({{< relref "/responses/vector.md" >}}), + + `mcq` : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}), + + `ucq` : [liste de choix]({{< relref "/responses/ucq.md" >}}) ; + * `id = 42` : (facultatif) identifiant du flag au sein du défi, pour définir des dépendances ; + * `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ; + * `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ; + * `showlines = false` : (facultatif, par défaut : `false`) lorsque le drapeau est un tableau et que `showlines` est vrai, le nombre d'éléments du tableau sera donné au participant, sinon il devra déterminer lui-même le nombre d'éléments à trouver (pour l'instant cette option est limitée à un tableau de 9 éléments maximum, c'est normal si ça bug au delà, demandez-moi si vous avez besoin de plus) ; + * `ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ; + * `validator_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ; + * `casesensitive = true` : (facultatif, par défaut : `false`) prend en compte la case de ce drapeau ; + * `placeholder = "dd/mm/yyyy"` : (facultatif) chaîne de caractères initiale placée dans le champ du formulaire, idéale pour donner une indication de format ; + * `help = "Complément"` : (facultatif) petit paragrpahe placée sous le champ du formulaire, idéal pour donner une indication complémentaire ; + * `choices_cost = 42` : (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un drapeau `key` classique (à 0, les choix sont affichés directement) + * `noshuffle = true` : (facultatif, par défaut `false`) conserve l'ordre des propositions, au lieu de les mélanger ; + * `[[flag.unlock_file]]` : bloque l'accès à un fichier tant que le flag n'est pas obtenu : + + `filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ; + * `[[flag.need_flag]]` : liste des flags devant être validés avant de débloquer celui-ci : + + `id = 23` : identifiant du flag tel qu'il a été défini plus tôt dans le fichier ; + * `[[flag.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix (pour les `mcq` et `ucq`) : + + `label = "Intitulé de la réponse"` (facultatif, par défaut `raw`), + + `value = true` (facultatif, par défaut `false`, sauf si `raw` est précisé) : valeur attendue pour ce choix, + + `raw = "Justification"` (nécessaire pour un [QCM justifié]({{< relref "/responses/mcq_justified.md" >}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées), + + `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés, + + ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : `ordered`, `validator_regexp`, `casesensitive`, ... ; +- `[[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é, en markdown ; + * `cost = 10` : (facultatif, par défaut 1/4 des gains du défi) coût de l'indice ; + * `title = "Foo Bar"` : (facultatif, par défaut "Astuce $id") titre de l'astuce dans l'interface ; + * `[[hint.need_flag]]` : liste des flags devant être validés pour débloquer cet indice : + + `id = 23` : identifiant du flag ; Voir aussi [la section sur les flags]({{< relref "/responses" >}}). @@ -55,13 +58,12 @@ id = 2 [[flag]] label = "Date d'exfiltration" -help= "Format : yyyy-mm" +help= "yyyy-mm" raw = '2015-12' [[flag]] label = "IPv6 d'exfiltration" raw = 'fe80::319c:1002:7c60:68fa' -casesensitive = false [[flag]] type = "mcq" diff --git a/content/files/digests.md b/content/files/digests.md index fac1c6b..55e248c 100644 --- a/content/files/digests.md +++ b/content/files/digests.md @@ -8,7 +8,7 @@ Le fichier `DIGESTS.txt` se trouve dans le répertoire `files/` ou `hints/` d'un défi. Il contient les condensats des fichiers se trouvant dans le dossier respectif. -Il génére avec la commande : +On le génére avec la commande suivante : ```sh b2sum * > DIGESTS.txt diff --git a/content/intro/_index.md b/content/intro/_index.md index cdbf85c..9fd8331 100644 --- a/content/intro/_index.md +++ b/content/intro/_index.md @@ -7,4 +7,4 @@ weight: 5 {{% notice note %}}Ébauche à compléter {{% /notice %}} -Revoir la [présentation](/fic/presentation.pdf). +Revoir la [présentation](/fic/intro/presentation.pdf). diff --git a/static/img/fic.png b/static/img/fic.png index b44e051..848424e 100644 Binary files a/static/img/fic.png and b/static/img/fic.png differ diff --git a/static/intro/presentation.pdf b/static/intro/presentation.pdf index 034c94c..9b7fce5 100644 Binary files a/static/intro/presentation.pdf and b/static/intro/presentation.pdf differ diff --git a/themes/hugo-theme-learn b/themes/hugo-theme-learn index 18212e6..b5c759a 160000 --- a/themes/hugo-theme-learn +++ b/themes/hugo-theme-learn @@ -1 +1 @@ -Subproject commit 18212e67599813e4f97ecc66ebf3f8b32f54a0b5 +Subproject commit b5c759a3c7ba7a7303a538f7d1982ec578812684