Règlements du CTF
Informations générales
- L'interface web principale (https://ctf.hackin.ca/) doit être utilisée pour soumettre les flags et obtenir les points associés.
- Les épreuves sont majoritairement indépendantes (non liées entre elles).
- Toutes les épreuves sont catégorisées (on appelle ça un Jeopardy) et sont presque toutes initialement disponibles.
- Les épreuves fournissent des fichiers et/ou des points d'accès (https, tcp/s ou ssh). Si besoin, les identifiants sont fournis.
- Le pointage des épreuves est fixe et connu d'avance.
Interdictions
- Ne pas noyer l'interface web principale avec des tentatives de flag (on surveille).
- Ne pas attaquer, tenter de corrompre ou tenter d'exfiltrer de l'information de l'interface web principale ni des autres joueuses et joueurs.
- Les services attaquables sont dans
*.chals.hackin.ca
mais pour la qualité de service, il est interdit d'énumérer les services ou de tenter des dénis de services (il n'y a aucun flag ou secret à trouver ainsi). - Ne pas partager ou voler des flags ou de l'information d'autres personnes.
- En cas d'infraction ou jeu irrégulier, les organisateurs se réservent un droit discrétionnaire pour pénaliser ou bannir.
Catégories
Pour vous guider, les épreuves sont groupées en catégories plus ou moins perméables. Une même épreuve peut faire appel à des concepts ou des technologies de plusieurs catégories (ou hors catégories).
- Commencer ici: pour débuter.
- Crypto: problèmes de cryptologie.
- Enquête: analyses de preuves pour en extraire de l'information et de fichiers variés (science forensique).
- Grep: Catégorie dédiée à une track unique.
- Linux: épreuves qui implique une connaissance de composantes Linux/UNIX et de concepts de systèmes d'exploitation.
- Physique: exercices qui étaient initialement distribués sous forme papier.
- Prisons: environnements limitants desquels on doit s'évader.
- Prog: exercices de programmation variés.
- Pwn: exploitation de programmes compilés, parfois avec le code source.
- Rev: rétro-ingénierie de programmes compilés, parfois avec le code source.
- Sqli: injections SQL.
- Web: langages, cadriciels, protocoles et autres technologies du web.
Que doit-on faire?
Pour chaque épreuve, il y a un flag à trouver.
Les flags sont généralement des courtes chaines de caractères de la forme JFFI{[^}]+}
, parfois INF600C{.*}
et des fois autres chose.
Si un format particulier de flag est utilisé, la description de l'épreuve l'indique.
Par exemple, pour l'épreuve Règlements, le flag à soumettre est JFFI{JeLisDoncJeFlag}
. Essayez-le quand la compétition commence.
Voici quelques conseils.
Choisissez une épreuve
- Lisez et relisez les descriptions.
- Évitez le va-et-vient entre épreuves.
- Ne vous fiez pas trop à votre instinct. Certaines épreuves font peur, mais sont en réalité très abordables (et inversement!).
- Plusieurs épreuves appartiennent à une même famille (et peuvent réutiliser des fichiers ou points d'entrée). Il est souvent pertinent de les faire dans l'ordre, mais vous pouvez essayer de sauter un niveau si vous vous sentez bloqué.
- Le pointage est souvent plus un indicateur du temps nécessaire que de la difficulté. Ne gardez donc pas les épreuves à fort pointage pour la fin: vous n'aurez pas le temps!
Analysez les fichiers et points d'entrée
- Analysez ce que l'on vous donne, survolez les sources, analysez les binaires, explorez les liens, bricolez les URL et les chemins.
- Avez-vous bien regardé tout ce qui est disponible?
- Que pouvez-vous faire pour mieux comprendre l'épreuve?
Identifiez où agir
- Que pouvez-vous accéder, lire ou écrire?
- Sur quoi pouvez-vous agir?
- Sur quoi pouvez-vous baser vos décisions?
Essayer d'identifier où le flag est caché
- Important: le flag est votre seul objectif.
- Y a-t-il une entrée (input) particulière à utiliser? Comment trouver cette entrée?
- Y a-t-il une protection particulière ? Comment la briser ? la contourner ? prendre un chemin détourné ? en abuser ? la respecter, mais arriver quand même à vos fins.
- Le flag est-il chiffré ou codé d'une façon particulière ? Pouvez-vous le décoder ou le déchiffrer ?
- Le flag est-il une aiguille cachée dans une botte de foin? Aucun challenge ne nécessite de deviner tout ou partie du flag. Toutefois 1. vous connaissez le format du flag (vous pouvez utiliser cette information). 2. vous pouvez parfois tester tout ou partie du flag. Il est interdit de tester massivement dans l'interface web principale, mais il est autorisé de tester (même massivement) dans les challenges eux-mêmes via les points d'entrée ou dans les fichiers fournis par exemple.
Validez votre flag
- Soumettez-le dans le champ approprié du challenge dans l'interface web principale.
- Il n'y a pas de pénalité à soumettre un mauvais flag (ou à soumettre plusieurs fois un bon). Il est par contre interdit d'inonder l'interface web principale afin de deviner le flag ou de tenter toutes les combinaisons (c.f. section Interdiction).
Si le flag ne semble pas bon:
- Respecte-t-il le format
JFFI{[^}]+}
ou autre? - Avez-vous sélectionné le bon challenge dans l'interface?
- Avez-vous correctement copié-collé ou recopié à la main?
- Avez-vous bien respecté la case originale?
- Avez-vous par erreur essayé de deviner, d'ajouter ou d'enlever certaines parties? (le flag des épreuves est à utiliser tel quel)
Quand programme-t-on?
Il y a peu d'épreuves de pur développement du type « écrivez un programme qui fait ... ».
Toutefois, la réussite de plusieurs épreuves nécessite une résolution programmative.
Cela peut être pour l'analyse de fichiers (fournis ou exfiltrés à partir des points d'accès) ou pour automatiser des interactions avec les services *.chals.hackin.ca
.
Il vous revient alors la responsabilité de déterminer les meilleures approches, technologies, algorithmes, structures de données et choix de conceptions à utiliser. Notez que la qualité logicielle du code importe peu. Seuls les flags comptent.
Dois-je connaître la technologie/le langage XYZ?
- RTFM. Vous avez accès au manpages de vos machines et à internet pour toute la documentation. Savoir trouver rapidement l'information pertinente est très valorisé.
- Vous êtes la plupart du temps libre des langages et des technologies; utilisez donc ce que vous connaissez et maîtrisez.
- Il n'est jamais nécessaire de comprendre les détails de chaque épreuve (certaines épreuves s'amusent même à inonder les participants d'information et de technologies superflues). Concentrez-vous sur les vrais objectifs: les flags.
Toutefois, plusieurs épreuves supposent un accès ou une familiarité avec un environnement Unix (Linux, MacOS, WSL, etc.), en particulier en ligne de commande.
- Quelques langages et technos pertinentes: C, Java, JavaScript, HTTP, PHP, Python, Ruby, Shell, SQL.
- Quelques commandes pertinentes: base64, curl, grep, man, ssh, xxd.
Les modèles de scripts à https://ctf.hackin.ca/modeles vous seront particulièrement utiles.