help/content/responses/simple.md

152 lines
5.6 KiB
Markdown
Raw Normal View History

---
date: 2019-04-05T15:59:52+02:00
title: Flag simple
weight: 5
---
2021-05-08 20:59:01 +00:00
Ce type de flag s'utilise pour valider toute chaîne de caractères que l'on
retrouve brute dans les fichiers donnés (ou après un traitement
_déterministe_).
2023-04-10 19:58:01 +00:00
Attention, par défaut, les propositions ne sont pas sensibles à la
casse[^gocase].
2023-04-10 19:58:01 +00:00
[^gocase]: Casse selon les classes Unicode de caractères, cela 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
2019-07-05 16:13:19 +00:00
```toml
[[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
2019-07-05 16:13:19 +00:00
```toml
[[flag]]
label = "Mot de passe du compte"
raw = 'rech1aichoh2Tei1ohHe'
casesensitive = true
```
2021-05-08 20:59:01 +00:00
Pour un mot de passe, ou une chaîne de caractères comme un token, ... qui sera
forcément recopiée par les participants, on impose le respect strict de la
casse.
## Flag modulable
Parfois, plusieurs réponses peuvent être valides. Le système de validation se
contentant d'une seule comparaison de hash, il ne peut valider qu'une seule et
unique solution.
Pour que plusieurs réponses soient valides, il faut pouvoir sélectionner des
parties communes significatives. Ces parties seront utilisées pour la création
du hash initial, et ensuite, lorsqu'il faudra vérifier les soumissions des
participants.
{{% notice warning %}}
Dans aucune circonstance il n'est possible de valider deux chaînes complètement
différentes. Par exemple, il n'est pas possible de valider :\
Donnez un ingrédient de la choucroute : `(choux|pomme de terre|...)`\
Car il n'est pas possible d'avoir un hash qui valide à la fois `choux` et
`pomme de terre`.
{{% /notice %}}
2022-12-10 13:37:39 +00:00
On utilise l'attribut `capture_regexp` pour établir une expression rationnelle
qui servira à sélectionner les parties significatives de la réponse.
Par exemple :
2019-07-05 16:13:19 +00:00
```toml
[[flag]]
label = "Heure de l'exfiltration"
raw = '11:22:33+02:00'
2022-12-10 13:37:39 +00:00
capture_regexp = "([0-9]{1,2}):([0-9]{1,2}):[0-9]{1,2}"
```
Ici, nous demandons l'heure de l'exfiltration, mais plusieurs journaux
enregistrent l'exfiltration à des secondes différentes. Les secondes n'étant
2023-04-10 19:58:01 +00:00
pas significatives car la période de log donnée est sur plus d'une journée, on
peut considérer qu'un participant qui donne la bonne heure et la bonne minute a
répondu à la question. On le laisse cependant recopier le timestamp complet
pour qu'il fasse l'effort de trouver la bonne valeur selon lui (il pourrait
être tenté de ne pas aller au bout de la démarche si on lui demande directement
une valeur approximative).
On garde toujours dans le `raw` la valeur complète attendue, telle que l'on
2022-12-10 13:37:39 +00:00
peut la recopier. Et l'on indique une `capture_regexp` qui sélectionnera la
ou les valeurs significatives, à la fois dans le `raw` et dans les réponses des
participants.
La valeur qui sera hashée pour comparaison sera `1122`, ce qui correspond à la
concaténation de tous les groupes de notre expression rationnelle.
Il est préférable d'écrire une expression rationnelle vague, qui ne fait pas
2023-04-10 19:58:01 +00:00
apparaître les termes de la réponse. Ici, nous aurions pu utiliser
l'expression rationnelle suivante : `(11):(22):(?:33|34|35)`, mais cela aurait
fait apparaître clairement les termes de la réponse. L'attribut étant parfois
transmis aux participants pour être utilisé par l'interface, il est prérérable
de rester vague, en utilisant les caractères joker. Par exemple :
```toml
[[flag]]
label = "Commande utilisée pour l'exfiltration"
raw = 'apt-get search yolo'
2022-12-10 13:37:39 +00:00
capture_regexp = "^(?:sudo *)?(.*)$"
```
Dans cet exemple `sudo` est facultatif, plutôt que de sélectionner `(apt-get
search yolo)$`, on exclut plutôt `sudo`, en le plaçant dans un groupe
non-capturant (`?:`), ce qui ne révèle pas d'information.
2019-07-05 16:13:19 +00:00
## Propriétés
id
2022-01-21 13:43:56 +00:00
: (facultatif) identifiant du flag au sein de l'étape, pour définir des dépendances ;
label
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
raw
2024-04-13 08:14:08 +00:00
: drapeau exact à trouver ; sous [forme de tableau]({{% relref "/responses/vector.md" %}}), le participant n'aura pas connaissaance du nombre d'éléments ;
2022-12-10 13:37:39 +00:00
capture_regexp
2024-04-13 08:14:08 +00:00
: (facultatif) [expression rationnelle]({{% relref "/responses/simple.md#flag-modulable" %}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
2022-12-10 16:27:41 +00:00
sort\_capture\_regexp\_groups
: (facultatif, par défaut : `false`) trie les groupes capturant par ordre alphabétique avant concaténation ;
casesensitive
2023-04-10 19:58:01 +00:00
: (facultatif, par défaut : `false`) prend en compte la casse de ce drapeau lors de la validation ;
2021-05-08 20:59:01 +00:00
placeholder
2023-06-19 15:41:52 +00:00
: chaîne de caractères placée dans le champ du formulaire avant la frappe, idéale pour donner un exemple de ce qui serait attendu ou une indication de format ;
2021-05-08 20:59:01 +00:00
2021-10-25 09:28:38 +00:00
unit
: (facultatif) chaîne de caractères ajoutée à la fin du champ pour indiquer une information complétant le flag, par exemple l'unité de mesure attendue ;
help
2022-01-21 13:43:56 +00:00
: (facultatif, rarement utilisé) chaîne de caractères placée sous le champ du formulaire, idéale pour donner un détail supplémentaire. Cette propriété peut contenir du [Markdown](https://commonmark.org/).
2019-07-05 16:13:19 +00:00
2022-10-08 14:12:15 +00:00
bonus_gain
2024-04-13 08:14:08 +00:00
: (facultatif) Voir [flag bonus]({{% relref "/responses/bonus.md" %}}).
2022-10-08 14:12:15 +00:00
2019-07-05 16:13:19 +00:00
## Rendu
![Rendu flag simple](flag.png)