Write some stuff from legacy memo-tree.md
This commit is contained in:
parent
9a1e0bd506
commit
0d11a21389
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: Préparation du challenge forensic
|
||||
chapter: true
|
||||
---
|
||||
|
||||
# Préparation du challenge forensic
|
||||
|
||||
![Le challenge au FIC](home.jpg)
|
|
@ -0,0 +1,180 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: Arborescence et fichiers
|
||||
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
|
||||
├── heading.jpg
|
||||
├── CHID-Titre du défi/
|
||||
│ ├── challenge.txt
|
||||
│ ├── finished.txt (opt.)
|
||||
│ ├── links.txt
|
||||
│ ├── overview.txt
|
||||
│ ├── resolution.mp4
|
||||
│ ├── statement.txt
|
||||
│ ├── hints/ (opt.)
|
||||
│ │ ├── DIGESTS.txt
|
||||
│ │ └── ...
|
||||
│ ├── files/
|
||||
│ │ ├── DIGESTS.txt
|
||||
│ │ └── ...
|
||||
│ └── ressources/
|
||||
│ └── ...
|
||||
│
|
||||
├── CHID-Titre du défi/
|
||||
│ └── ...
|
||||
└── ...
|
||||
</pre>
|
||||
|
||||
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans
|
||||
doute être optionnels.
|
||||
|
||||
|
||||
## Fichiers pour un scénario
|
||||
|
||||
### `AUTHORS.txt`
|
||||
|
||||
Voir la [page dédiée]({{<relref "authors">}}).
|
||||
|
||||
|
||||
### `heading.jpg`
|
||||
|
||||
Chaque scénario devrait avoir une image/photo représentative. Je vous invite
|
||||
donc à trouver votre bonheur sur : [Unsplash](https://unsplash.com/) ou à
|
||||
partager un travail personnel. Mais attention aux licences et contraintes
|
||||
(notamment l'obligation de citer la source ou le photographe) si vous utilisez
|
||||
un autre service qu'unsplash.
|
||||
|
||||
La taille et l'orientation de l'image n'a pas d'importance, mais gardez en tête
|
||||
que c'est son centre qui sera affiché, si la hauteur dépasse la taille prévue.
|
||||
|
||||
|
||||
### `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.
|
||||
|
||||
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
|
||||
fichier.
|
||||
|
||||
Comme l'ensemble des textes importés, vous pouvez utiliser du
|
||||
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
|
||||
vos textes.
|
||||
|
||||
Vous pouvez insérer des images dans tous les textes :
|
||||
|
||||
![alt](path title)
|
||||
|
||||
Le chemin *doit* être un chemin _absolu_ vers l'image, considérant la racine
|
||||
comme étant le dossier du scémario (pour l'overview du thème) ou de l'exercice
|
||||
(pour les autres textes).
|
||||
|
||||
|
||||
## Fichiers pour un défi
|
||||
|
||||
### `challenge.txt`
|
||||
|
||||
Voir la [page dédiée]({{<relref "challenge">}}).
|
||||
|
||||
|
||||
### `finished.txt`
|
||||
|
||||
Remplissez ce fichier optionnel, lorsque vous souhaitez apporter une
|
||||
information aux participants une fois qu'ils ont validé votre défi.
|
||||
|
||||
Comme l'ensemble des textes importés, vous pouvez utiliser du
|
||||
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
|
||||
vos textes.
|
||||
|
||||
|
||||
### `links.txt`
|
||||
|
||||
Voir la [page dédiée]({{<relref "links">}}).
|
||||
|
||||
|
||||
### `overview.txt`
|
||||
|
||||
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
|
||||
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
|
||||
fichier.
|
||||
|
||||
Comme l'ensemble des textes importés, vous pouvez utiliser du
|
||||
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
|
||||
vos textes.
|
||||
|
||||
Gardez en tête que les *overview*, que ce soit scénario ou exercices, sont
|
||||
affichées au public : il s'agit à la fois d'aguicher le participant pour qu'il
|
||||
fasse votre scénario plutôt que celui d'un autre groupe, mais aussi de donner
|
||||
envie au public de lire plus en détail.
|
||||
|
||||
|
||||
### `resolution.mp4`
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
fichier.
|
||||
|
||||
Comme l'ensemble des textes importés, vous pouvez utiliser du
|
||||
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
|
||||
vos textes.
|
||||
|
||||
|
||||
### `files/`
|
||||
|
||||
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">}}).
|
||||
|
||||
- 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**[^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.
|
||||
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`.
|
||||
|
||||
[^gz]: l'intérêt de `gzip` est que le serveur web sera capable de distribuer le fichier sans faire apparaître la compression. Voir le [module nginx utilisé](https://nginx.org/en/docs/http/ngx_http_gzip_static_module.html).
|
||||
|
||||
|
||||
### `hints/`
|
||||
|
||||
Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition,
|
||||
dans le cadre d'indices.
|
||||
|
||||
Chaque fichier doit avoir une entrée correspondante dans le fichier
|
||||
`DIGESTS.txt` ; plus d'infos sur la page [`DIGESTS.txt`]({{<relref
|
||||
"digests">}}).
|
||||
|
||||
De plus, chaque fichier doit également posséder une entrée dans le fichier
|
||||
[`challenge.txt`]({{<relref "challenge">}}), afin de lui attribuer son coût,
|
||||
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
|
||||
outils externes.
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: AUTHORS.txt
|
||||
weight: 10
|
||||
---
|
||||
|
||||
Le fichier `AUTHORS.txt`, à la racine de chaque thème, contient vos noms, tels
|
||||
qu'ils apparraîtront sur la plate-forme.
|
||||
|
||||
## Format du fichier
|
||||
|
||||
Chaque ligne contient le nom qui apparaîtra sur le site, suivi, éventuellement
|
||||
d'un [lien hypertexte complet](https://tools.ietf.org/html/rfc2396), placé
|
||||
entre chevrons. Ce lien peut être, par exemple, l'adresse du blog de l'auteur
|
||||
correspondant ou son adresse électronique.
|
||||
|
||||
### Exemple
|
||||
|
||||
```text
|
||||
Courtois J. <mailto:courto_j@epita.fr>
|
||||
Bombal S.
|
||||
Mercier P-O. <https://nemunai.re/>
|
||||
```
|
||||
|
||||
### Rendu
|
||||
|
||||
![Rendu AUTHORS.txt](screenshoot.png)
|
|
@ -0,0 +1,129 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
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]]` : drapeau classique à valider pour résoudre le challenge :
|
||||
* `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 exact à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
||||
* `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) ;
|
||||
* `ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ;
|
||||
* `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.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_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 ; pour un QCM justifié, utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et justifiées),
|
||||
+ `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés ;
|
||||
- `[[flag_ucq]]` : drapeau sous forme de question à choix unique :
|
||||
* `id = 42` : (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||||
* `label = "Intitulé du groupe"` : (facultatif) intitulé du groupe de choix ;
|
||||
* `raw = 'MieH2athxuPhai6u'` : drapeau attendu parmi les propositions ;
|
||||
* `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) ;
|
||||
* `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`) ;
|
||||
* `[[flag_ucq.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_ucq.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 ;
|
||||
- `[[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 ;
|
||||
|
||||
Voir aussi [la section sur les flags]({{< relref "/responses" >}}).
|
||||
|
||||
## Exemple
|
||||
|
||||
```
|
||||
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'
|
||||
ignorecase = true
|
||||
displayAs = "select"
|
||||
|
||||
[[flag_ucq.choice]]
|
||||
value = 'Noir'
|
||||
|
||||
[[flag_ucq.choice]]
|
||||
label = 'Roux'
|
||||
value = 'Alezan'
|
||||
|
||||
[[flag_ucq.choice]]
|
||||
label = 'Brun'
|
||||
value = 'Alezan'
|
||||
|
||||
[[flag_ucq.choice]]
|
||||
label = "Crème"
|
||||
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 = 'enocean-specs.pdf'
|
||||
title = "Spécifications du protocole utilisé"
|
||||
|
||||
[[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
|
||||
```
|
||||
|
||||
|
||||
## Rendu
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: DIGESTS.txt
|
||||
weight: 15
|
||||
---
|
||||
|
||||
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 :
|
||||
|
||||
```sh
|
||||
b2sum * > DIGESTS.txt
|
||||
```
|
||||
|
||||
{{% notice warning %}}
|
||||
Ce fichier est à générer **avant** l'upload. Son utilité est d'avoir un moyen
|
||||
de vérifier, une fois sur place, sans connexion Internet, que l'intégralité de
|
||||
l'arborescence n'a pas été altérée et que les fichiers servis sont bien les
|
||||
mêmes que sur vos dépôts Git.
|
||||
{{% /notice %}}
|
||||
|
||||
La commande `b2sum` fait parti des *GNU Core Utilities* depuis la [version
|
||||
8.26](https://github.com/coreutils/coreutils/commit/ea94589e9ef02624a3837f97f80efd7d3dcf56bf).
|
||||
|
||||
L'algorithme [blake2b](https://blake2.net/) est utilisé à la place d'un SHA-1
|
||||
ou MD5 car il est plus rapide que ces derniers et est encore considéré comme
|
||||
sûr.
|
||||
|
||||
|
||||
## Cas des fichiers en plusieurs parties
|
||||
|
||||
Dans le cas où vous êtes contraint de découper vos fichiers avant de les
|
||||
uploader, seule la somme de contrôle du fichier entier, avant découpage, est
|
||||
nécessaire.
|
||||
|
||||
|
||||
## Exemple
|
||||
|
||||
```
|
||||
3222734c6c8782682a9c36135a3518e8f4d1facabf76e702cf50da0037a4ed0a425e51266c2914fb83828573e397f96c2a95d419bd85919055479d028f51dba5 fic2016.jpg
|
||||
023939b0c52b0dfce66954318ab82f7a8c10af4c79c8d5781612b58c74f3ace056067d7b15967e612b176a186b46d3d900c4db8881ba47202521eec33e5bb87b fic.org
|
||||
7c91450239cf9b0717642c55c3429dd7326db26e87d4ca198758053333f0640ee89d2dd9b2f1919598f89644b06aa8fc2085648e3d1e542a6db324c9b16a0bdf header.tex
|
||||
```
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: links.txt
|
||||
weight: 30
|
||||
---
|
||||
|
||||
+ `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, ...
|
||||
|
||||
|
||||
## Exemple
|
||||
|
||||
```
|
||||
https://media.ccc.de/... Vidéo d'inspiration
|
||||
https://metasplo.it/ Exploit utilisé
|
||||
https://nist.gov/ CVE-2016-4242
|
||||
```
|
||||
|
||||
|
||||
## Rendu
|
||||
|
||||
{{% notice info %}}
|
||||
Le contenu du fichier `links.txt` n'est pas encore rendu sur la plate-forme.
|
||||
{{% /notice %}}
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: resolution.mp4
|
||||
weight: 35
|
||||
---
|
||||
|
||||
+ `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
|
||||
- `ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 -f alsa -ac 2 -i hw:0 -strict experimental resolution.mp4`
|
||||
- [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
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: Présentation
|
||||
weight: 5
|
||||
---
|
||||
|
||||
{{% notice note %}}Ébauche à compléter
|
||||
{{% /notice %}}
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
date: 2019-04-04T15:59:52+02:00
|
||||
title: Flags
|
||||
weight: 15
|
||||
---
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
date: 2019-04-05T15:59:52+02:00
|
||||
title: QCM
|
||||
weight: 10
|
||||
---
|
||||
|
||||
{{% notice note %}}Ébauche à compléter
|
||||
{{% /notice %}}
|
||||
|
||||
|
||||
# Propriétés
|
||||
|
||||
id
|
||||
: (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||||
|
||||
label
|
||||
: (facultatif, par défaut : `Flag`) intitulé du questionnaire ;
|
||||
|
||||
noshuffle
|
||||
: (facultatif, par défaut : `false`) conserve l'ordre des propositions, au lieu de les mélanger ;
|
||||
|
||||
help
|
||||
: (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
date: 2019-04-05T15:59:52+02:00
|
||||
title: QCM justifiés
|
||||
weight: 15
|
||||
---
|
||||
|
||||
{{% notice note %}}Ébauche à compléter
|
||||
{{% /notice %}}
|
||||
|
||||
|
||||
# Propriétés
|
||||
|
||||
id
|
||||
: (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||||
|
||||
label
|
||||
: (facultatif, par défaut : `Flag`) intitulé du questionnaire ;
|
||||
|
||||
noshuffle
|
||||
: (facultatif, par défaut : `false`) conserve l'ordre des propositions, au lieu de les mélanger ;
|
||||
|
||||
help
|
||||
: (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
|
|
@ -0,0 +1,87 @@
|
|||
---
|
||||
date: 2019-04-05T15:59:52+02:00
|
||||
title: Flag simple
|
||||
weight: 5
|
||||
---
|
||||
|
||||
Ce type de flag s'utilise pour valider toute chaîne de caractère que l'on
|
||||
retrouve brute dans les fichiers donnés (ou après un traitement
|
||||
_déterministe_).
|
||||
|
||||
Attention, par défaut, les propositions ne sont pas sensible à la
|
||||
casse[^gocase].
|
||||
|
||||
[^gocase]: Casse selon les classes Unicode de charactères, ce ne concerne pas
|
||||
que l'alphabet traditionnel. Pour plus d'infos, consultez la [documentation
|
||||
de la fonction utilisée](https://golang.org/pkg/bytes/#ToLower).
|
||||
|
||||
### Exemple
|
||||
|
||||
```
|
||||
[[flag]]
|
||||
label = "IPv6 d'exfiltration"
|
||||
raw = 'fe80::319c:1002:7c60:68fa'
|
||||
```
|
||||
|
||||
Dans cet exemple, l'importance de la casse de l'IPv6 n'est pas importante, on
|
||||
laissera donc le participant entrer l'IPv6 comme il le désire, même si elle
|
||||
peut être copiée/collée.
|
||||
|
||||
|
||||
## Flag strict, sensible à la casse
|
||||
|
||||
On utilise la propriété `casesensitive` pour forcer la prise en compte de la
|
||||
casse lors de la vérification du flag.
|
||||
|
||||
|
||||
### Exemple
|
||||
|
||||
```
|
||||
[[flag]]
|
||||
label = "Mot de passe du compte"
|
||||
raw = 'rech1aichoh2Tei1ohHe'
|
||||
casesensitive = true
|
||||
```
|
||||
|
||||
Pour un mot de passe, ou une chaîne de caractère comme un token, ... qui sera
|
||||
forcément recopiée par les participants, on impose le respect strict de la
|
||||
casse.
|
||||
|
||||
|
||||
## Flag modulable
|
||||
|
||||
|
||||
### Exemple
|
||||
|
||||
Si par exemple, on estime que plusieurs réponses sont correctes (ici, plusieurs secondes) :
|
||||
|
||||
```
|
||||
[[flag]]
|
||||
label = "Heure de l'exfiltration"
|
||||
raw = '11:22:33+02:00'
|
||||
validator_regexp = "([0-9]{1,2}):([0-9]{1,2}):[0-9]{1,2}"
|
||||
```
|
||||
|
||||
|
||||
# Propriétés
|
||||
|
||||
id
|
||||
: (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||||
|
||||
label
|
||||
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||||
|
||||
raw
|
||||
: drapeau exact à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
||||
|
||||
validator_regexp
|
||||
: (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) ;
|
||||
|
||||
ordered
|
||||
: (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ;
|
||||
|
||||
casesensitive
|
||||
: (facultatif, par défaut : `false`) prend en compte la la casse de ce drapeau lors de la validation ;
|
||||
|
||||
help
|
||||
: (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
date: 2019-04-05T15:59:52+02:00
|
||||
title: Liste de choix
|
||||
weight: 20
|
||||
---
|
||||
|
||||
{{% notice note %}}Ébauche à compléter
|
||||
{{% /notice %}}
|
||||
|
||||
|
||||
# Propriétés
|
||||
|
||||
id
|
||||
: (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||||
|
||||
label
|
||||
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||||
|
||||
raw
|
||||
: drapeau exact à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
||||
|
||||
validator_regexp
|
||||
: (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) ;
|
||||
|
||||
ordered
|
||||
: (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ;
|
||||
|
||||
casesensitive
|
||||
: (facultatif, par défaut : `false`) prend en compte la la casse de ce drapeau lors de la validation ;
|
||||
|
||||
help
|
||||
: (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
|
||||
|
||||
choice_cost
|
||||
: (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un `flag` classique (à 0, les choix sont affichés directement) ;
|
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
Binary file not shown.
After Width: | Height: | Size: 175 KiB |
Loading…
Reference in New Issue