2021 update

This commit is contained in:
nemunaire 2020-11-13 10:24:48 +01:00
parent 16c5d728d1
commit ab99106592
7 changed files with 54 additions and 55 deletions

View File

@ -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 :
<pre>
```
.
├── AUTHORS.txt
├── overview.txt
@ -32,7 +32,7 @@ doivent respecter une certaine arborescence que voici :
├── CHID-Titre du défi/
│ └── ...
└── ...
</pre>
```
{{% 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 :
<pre>
```
.
├── 1-Titre du premier défi/
│ └── ...
├── 2-Titre du deuxième défi/
│ └── ...
└── ...
</pre>
```
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<p`).
Ajouter le numéro d'ordre permet de contrôler plus facilement l'ordre des exercices, sans que cela soit affiché dans l'interface.
@ -176,9 +175,7 @@ Voir la [page dédiée]({{<relref "resolution">}}).
### `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`]({{<relref
`DIGESTS.txt` ; plus d'infos sur [la page `DIGESTS.txt`]({{<relref
"digests">}}).
- 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.

View File

@ -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"

View File

@ -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

View File

@ -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).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

@ -1 +1 @@
Subproject commit 18212e67599813e4f97ecc66ebf3f8b32f54a0b5
Subproject commit b5c759a3c7ba7a7303a538f7d1982ec578812684