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 Afin de pouvoir être importé automatiquement sur la plate-forme, vos scénarios
doivent respecter une certaine arborescence que voici : doivent respecter une certaine arborescence que voici :
<pre> ```
. .
├── AUTHORS.txt ├── AUTHORS.txt
├── overview.txt ├── overview.txt
@ -32,7 +32,7 @@ doivent respecter une certaine arborescence que voici :
├── CHID-Titre du défi/ ├── CHID-Titre du défi/
│ └── ... │ └── ...
└── ... └── ...
</pre> ```
{{% notice info %}} {{% notice info %}}
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans 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). 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 : 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/ ├── 1-Titre du premier défi/
│ └── ... │ └── ...
├── 2-Titre du deuxième 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`). 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. 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` ### `statement.txt`
contenant le scénario du challenge, tel qu'il sera affiché sur le site, à destination des participants L'énoncé du défi, 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.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus 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 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. des participants.
Chaque fichier doit avoir une entrée correspondante dans le fichier 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">}}). "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`, ... - 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, ...) - 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. - Utiliser `$(split -b 240M -d BIG_FILE BIG_FILE.)` pour uploader les gros fichiers sur owncloud.
@ -227,6 +224,6 @@ titre, ...
### `ressources/` ### `ressources/`
Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés 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 pour le défi : pour sa construction ou sa résolution, les schémas du SI au
premier challenge concerné, éventuellement un `README.txt` avec les liens des premier défi concerné, éventuellement un `README.txt` avec les liens des
outils externes. outils externes.

View File

@ -4,25 +4,28 @@ title: challenge.txt
weight: 20 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)) : 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 cet exercice ;
- `tags = ["Android", "RAT", "ROM"]` : mots-clefs de l'exercice ; - `gain = 42` : nombre de points que rapporte ce défi ;
- `[[depend]]` : dépendance à un autre exercice : - `tags = ["Android", "RAT", "ROM"]` : mots-clefs du défi ;
* `id = CHID` : identifiant du challenge ; - `[[depend]]` : dépendance à un autre défi :
* `theme = "NomDuTheme"` : (facultatif) nom du thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ; * `id = CHID` : identifiant du défi ;
- `[[flag]]` : chaîne de validation pour résoudre le challenge : * `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 : * `type = "key"` : (facultatif, par défaut "key") type de flag :
+ `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}), + `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}),
+ `vector` : [liste de drapeaux]({{< relref "/responses/vector.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" >}}), + `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" >}}) ; + `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 ; * `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 ; * `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 ; * `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 ; * `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) ; * `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 ; * `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 ; * `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) * `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 ; * `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 : * `[[flag.unlock_file]]` : bloque l'accès à un fichier tant que le flag n'est pas obtenu :
@ -30,15 +33,15 @@ weight: 20
* `[[flag.need_flag]]` : liste des flags devant être validés avant de débloquer celui-ci : * `[[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 ; + `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`) : * `[[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"`, + `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, + `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), + `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, + `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`, ... ; + ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : `ordered`, `validator_regexp`, `casesensitive`, ... ;
- `[[hint]]` : paramètres pour un indice : - `[[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` ; * `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 ; * `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 ; * `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 ; * `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 : * `[[hint.need_flag]]` : liste des flags devant être validés pour débloquer cet indice :
+ `id = 23` : identifiant du flag ; + `id = 23` : identifiant du flag ;
@ -55,13 +58,12 @@ id = 2
[[flag]] [[flag]]
label = "Date d'exfiltration" label = "Date d'exfiltration"
help= "Format : yyyy-mm" help= "yyyy-mm"
raw = '2015-12' raw = '2015-12'
[[flag]] [[flag]]
label = "IPv6 d'exfiltration" label = "IPv6 d'exfiltration"
raw = 'fe80::319c:1002:7c60:68fa' raw = 'fe80::319c:1002:7c60:68fa'
casesensitive = false
[[flag]] [[flag]]
type = "mcq" 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 défi. Il contient les condensats des fichiers se trouvant dans le dossier
respectif. respectif.
Il génére avec la commande : On le génére avec la commande suivante :
```sh ```sh
b2sum * > DIGESTS.txt b2sum * > DIGESTS.txt

View File

@ -7,4 +7,4 @@ weight: 5
{{% notice note %}}Ébauche à compléter {{% notice note %}}Ébauche à compléter
{{% /notice %}} {{% /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