
Le 27 janvier 2019, l'événement SITIS CTF a eu lieu - un concours de sécurité de l'information pour les étudiants des écoles et des collèges. Environ 80 jeunes spécialistes et un phoque ont participé au tournoi. Le match s'est déroulé au bureau de Jet Infosystems, la jeune équipe SITIS était l'organisatrice des tâches et de la plateforme technique.
CTF
Le format de l'événement est un CTF basé sur les tâches (danger), dans lequel les joueurs résolvent des tâches (tâches) de différents niveaux de difficulté. La réponse peut être un jeu de caractères ou une phrase arbitraire. Pour chaque bonne réponse (capture de drapeau), les participants reçoivent un certain nombre de points. L'accès à une partie des tâches ne s'ouvre qu'après la décision des précédentes.
Les participants au jeu CTF ont réussi à résoudre presque toutes les tâches, mais deux d'entre eux n'ont pas cédé: très probablement, la fatigue a affecté - les jeunes pirates et les pirates ont «cassé» la tâche et le cerveau du matin au soir.
Missions
PPC
Chaîne (200 points)
Les participants ont reçu un ensemble de pixels, spécialement convertis en hexadécimal, parmi lesquels une chaîne de pixels clés. En traduisant un hex en image, vous pouvez obtenir une image avec un drapeau.
Peinture (200 points)
Les participants ont reçu une archive contenant environ 1 600 images monochromes représentant un nombre de 75 octets. La façon d'obtenir le drapeau consiste à ajouter des nombres dans les images en utilisant des zéros comme séparateurs et à traduire la liste résultante en une représentation sous forme de chaîne.
Kotorova (250 points)
Voir la section «Vraytapy».
Musique (300 points)
Voir la section «Vraytapy».
INVERSE
Razminka (75 points)
Les participants avaient besoin des compétences inverses initiales, le mot de passe a été stocké en tant que variables char dans la classe principale.
Ma création! (250 points)
Voir la section «Vraytapy».
CRYPTO
Rêve étrange (100 points)
Voir la section «Vraytapy».
Hmmmmmmm (150 points)
Voir la section «Vraytapy».
La joie
a (25 points)
Les participants devaient trouver un drapeau en petits caractères sur l'un des cadres dans un gif avec des sceaux.
Flocons de neige (75 points)
Les participants ont reçu un fichier html avec du code javascript obscurci. Il fallait faire un drapeau à partir des symboles tombant lentement sur la page.
Drapeau parmi nous (100 points)
Une photo était jointe à la mission.

Tout d'abord, tout le monde s'est précipité pour chercher un drapeau sur l'image. Le fouillant et s'assurant que le drapeau n'est pas là, cela valait la peine de revenir à la description et au titre de la tâche et de les relire attentivement. Le fait est qu'à la compétition elle-même, aux portes des salles où se tenait l'événement, il y avait des autocollants inhabituels avec des codes QR.

Après avoir rassemblé toutes les pièces, il a été possible d'obtenir la phrase HRGRH {9I3371M95_7i4e3o3i}. Le drapeau est évidemment tracé ici, mais il est crypté. Peu de points ont été donnés pour la tâche, il serait donc logique que le chiffrement ne soit pas compliqué. En recherchant les principales options, on pouvait conclure qu'Atbash était là. Drapeau SITIS {9R3371N95_7r4v3l3r}.
STEGO
Bug ou fonctionnalité? (50 points)
Un document texte était joint à la mission, dans lequel, à première vue, il n'y avait que 2 lignes. Cependant, en y regardant de plus près et en mettant en évidence le texte, on pouvait voir beaucoup d'espaces et de tabulations sur 39 lignes. Ceux qui l'ont déjà rencontré n'auraient eu aucun mal à obtenir un drapeau.
Poésie (75 points)
Les participants ont reçu une photo d'un cadre du film "The Game of Imitation". Il fallait trouver l'image originale et les comparer, et à partir des différents pixels pour faire une nouvelle image avec des vers de Byron, dont le nom de famille était le drapeau.
HISTOIRE
Bienvenue (50 points)
Droids Everywhere (100 points)
Il est temps de ventiler (105 points)
L'aide n'est jamais superflue (125 points)
Vous devez jouer un cerf (150 points)
Premier test sur le terrain (175 points)
Le plaisir commence p1 (200 points)
Le plaisir commence p2 (205 points)
Boss final (300 points)
Dans le bloc, les participants ont dû démêler plusieurs tâches connexes.
Il s'agissait de fournir aux participants une archive contenant divers fichiers, mais ils devaient trouver les coordonnées dans les méta-informations. L'indice a déclaré que l'auteur avait un crétinisme topographique, vous devez donc échanger la latitude et la longitude et obtenir un drapeau sous la forme du nom du lac.
Dans la deuxième tâche, il était nécessaire de trouver un fichier avec un indicateur dans le système de fichiers. Il y avait aussi un lien qui ouvrait l'accès à 3 tâches. Ensuite, le drapeau devait être trouvé sur la page enregistrée dans les archives Web. Dans les tâches suivantes, les participants ont dû trouver un pirate informatique populaire à partir d'une vidéo sur Youtube (son nom et son prénom étaient le drapeau), trouver son compte sur un forum de «hackers», où il y avait un drapeau et un indice pour pirater le site. Ensuite, il a été nécessaire de mener une attaque sur le site Web de CTfOS (trouver le mot de passe de hachage dans le cookie md5 et utiliser le service pour obtenir le mot de passe d'origine, le drapeau était la paire admin + mot de passe).
Ensuite, vous deviez vous connecter via ssh, voir l'archive, le télécharger via sftp, choisir un mot de passe, découvrir qu'au lieu de l'image à l'intérieur, il y avait en fait une archive et obtenir un drapeau. À la fin, le numéro de port était «65530», il a fallu sélectionner un mot de passe (dictionnaire rockyou), puis formater le système et fournir des preuves aux organisateurs.
Sitis
- INSTA (100 points)
Pour réussir, il fallait faire un post Instagram avec une photo du CTF et des hashtags thématiques. - MINI-POLL (125 points)
Dans le cadre de la tâche, les participants ont réussi une mini-enquête.
Vraytapy
Voici quelques analyses de tâches intéressantes des participants de la FCE.
Kotorova

Kotorova, accent mis sur le troisième "o". Tâche pour 250 points sur 300 possible. Le joueur reçoit une image (voir ci-dessus) et un texte étrange composé des mots "Miu", "Meow", "FRR" et "Face".

Par analyse visuelle de l'image (et par curiosité dans le passé), nous comprenons que le texte source n'est rien d'autre que le langage COW avec des opérateurs remplacés. Après avoir effectué les remplacements suivants, vous pouvez obtenir un message "vache": Miu => MOo, Meow => MoO, RDF => OOO, Lik => Moo. Exécutez le code résultant via l'interpréteur en ligne et obtenez le jeton convoité:

Un rêve étrange ...
Curieusement, mais l'idée de cette tâche est vraiment venue à l'esprit de l'un des organisateurs après s'être réveillé un matin froid de janvier. Description de la tâche:
J'ai rêvé d'une tâche ici, vérifiez la solvabilité pzh: 3
D'après le nom et la description, il est facile de deviner que la référence va à Dmitry Ivanovich, à savoir Mendeleev. Voyons maintenant ce que nous avons dans le fichier:
0x53 0x49 0x54 0x49 0x53 0x7b 0x6d 0x65 Mx3c 0x65 0x6c 0x65 0x65 Mx17 0x5f 0x65 Mx21 Mx27 0x5f Mx4b Mxf Mx39 Mx3a 0x6d 0x65 Mx7 Mx75 0x7d
Hex, mais avec d'étranges préfixes "M" à certains endroits.
Nous traduisons HEX en ASCII et obtenons immédiatement, à première vue, un drapeau cassé:

Après avoir traduit uniquement Hex avec le préfixe «M» dans le système décimal, nous obtenons la séquence suivante:
60 23 33 39 75 15 57 58 7 117
Nous rappelons la description.

Combinez ASCIInut HEX avec Mendeleev et obtenez le drapeau.
La musique
Nous avons réfléchi à la façon de traduire le texte en notes pendant longtemps, et finalement l'idée a été réalisée:

Tout d'abord, il a été décidé de traduire le texte en une représentation numérique en utilisant ord ()
"awsm_msic"
Un espace est laissé intentionnellement au début afin que les derniers bits ne gâchent pas le dernier caractère.
ord(): [97, 119, 115, 109, 95, 109, 115, 105, 99, 32]
Ensuite, traduisez-le en octets:
>>bin(): ['01100001', '01110111', '01110011', '01101101', '01011111', '01101101', '01110011', '01101001', '01100011', '00100000']
Concaténer:
concatenate:01100001011101110111001101101101010111110110110101110011011010010110001100100000
Divisez le texte résultant en caractères de trois (triplets). Étant donné que 8 nombres peuvent être encodés dans la plage de 000 à 111, nous utiliserons un ensemble de notes des octaves C5 et C6, composé de 8 notes:
['011', '000', '010', '111', '011', …] ["C5","D5","E5","F5","G5","A5","B5","C6"]
Cela reste juste un peu, nous traduisons les triplets dans le système de nombres décimaux et composons une nouvelle liste, basée sur les indices des notes:
['F5', 'C5', 'E5', 'C6', 'F5', 'A5', 'B5', 'F5', 'F5', 'F5', 'E5', 'A5', 'C6', 'A5', 'A5', 'A5', 'F5', 'G5', 'B5', 'B5', 'G5', 'A5', 'G5', 'F5', 'D5', 'C5']
Nous écrivons un fichier MIDI, si vous le souhaitez, vous pouvez utiliser n'importe quel instrument pour donner un son aux notes.

Marche arrière 250
Tout d'abord, nous démontons le programme (à l'aide de l'IDA), le convertissons en C et recherchons les lignes suspectes:

Nous pouvons conclure que v39 est un drapeau qui, dans le faux état, nous donnera la chaîne que nous recherchons.
Nous regardons où le drapeau change:

En regardant ce code, il est difficile de déterminer avec quelles variables nous devons apporter des modifications pour que l'indicateur soit décrémenté. En double-cliquant sur la variable Buffer, on accède à la fenêtre de visualisation de la pile du programme. Nous devons comprendre que Buffer est une chaîne (car nous pouvons entrer n'importe quoi dans le programme), ce qui signifie que nous allons définir cette taille afin que toutes les variables var_xxx soient dedans:

La lecture du code est devenue beaucoup plus facile:

Considérons maintenant le bloc qui change les caractères de notre chaîne.

Nous analysons:
- v38 est la somme des valeurs des variables symboliques (par la condition 1231).
- L'élément de 7 lignes (Buffer_6) est décalé de 7 bits, c'est-à-dire il est impossible d'inverser la conversion (quel que soit le nombre converti ici, le résultat sera 0).
- La boucle avec les variables v35, v41, v34 est utilisée pour détourner l'attention (copie la valeur d'une ligne à une autre pour enregistrer la traduction correcte du binaire en hexadécimal, puisque nous changeons la ligne d'origine).
- Le cycle avec les trois premiers caractères est une simple multiplication par 2.
- La quatrième à la sixième est un peu plus difficile. Il est nécessaire de résoudre l'équation (pour le quatrième caractère, cela ressemblera à ceci: (x * 2) ^ 57 = 95). Bien que XOR soit une opération irréversible, il est tout à fait possible de sélectionner une valeur en utilisant l'énumération, et même avec des compétences initiales, cela peut être complété en quelques secondes.
- Les changements sont terminés, nous revenons au bloc de conditions et établissons des équations simples pour les éléments restants.
Nous avons (x - inconnu, 0 - connu): 000000x00000x. La somme des valeurs = 1231. Soustrayez les nombres connus de ce nombre et obtenez que la somme des nombres inconnus = 164. Par conséquent, nous prenons deux caractères dont la somme sera 164. D'après la signification du premier mot, que ce soit 'R' et 'R'.

Après avoir entré la clé, nous obtiendrons la phrase souhaitée.
Hmmmmm
Lors de l'ouverture de la tâche, nous obtenons deux fichiers: data.txt et Hmmmm.png:


Évidemment, la première ligne du fichier texte est un encodage. En effet, il s'agit d'un Base64 ordinaire, mais sans le signe "=" qui lui est propre à la fin.
Après avoir décodé, nous voyons des nombres étrangement similaires aux degrés:

Déjà à ce stade, on peut deviner que nous parlons d'un réseau et de son angle d'inclinaison. Mais où est le pochoir lui-même? Bien sûr, nous avons toujours un ensemble binaire de nombres dans lequel le nombre écrasant est 1 et seulement 8 zéros.
Tester une hypothèse est très simple. L'atome dit que nous avons 256 caractères. Tout comme dans le tableau de la photo, et à partir de cela, nous pouvons également deviner que le réseau est carré.

La meilleure façon est probablement d'utiliser Excel pour tracer la grille. Alors faisons-le.
En fait, le voici:

Supposons, et pas en vain, qu'il s'agit de la position donnée du réseau par rapport à 0 degré. Ensuite, en utilisant les manipulations dans Excel ou Photoshop, écrivez les nombres à partir des fenêtres:

De quel type de chiffres s'agit-il? Hexadécimal ... Hex, bien sûr!

Hourra, nous sommes sur la bonne voie, il reste à tourner la grille et à écrire les chiffres restants:

Il s'avère que la séquence souhaitée est en cellules bleues, c'est-à-dire:
53 49 54 49 53 7b 43 61 72 64 61 6e 6f 5f 69 73 5f 70 72 6f 75 64 5f 6f 66 5f 79 6f 75 5f 21 7d

Le résultat est: SITIS {Cardano_is_proud_of you !}
Oui, oui, ce n'est qu'un réseau Cardano, proposé par lui au XVIe siècle. L'un des algorithmes cryptographiques les plus simples.
Néanmoins, malgré l'apparente simplicité et l'évidence de la tâche, une seule équipe a pu la résoudre - «10x», même en dépit de ces indices:


Les membres
Les concurrents étaient à la fois des vétérans de la FCE et des débutants.
1ère place, MLPWN:
Mon équipe a aimé. Quant aux tâches, il n'était pas très difficile pour nous, en tant qu'équipe plutôt expérimentée, de les résoudre, il était notable que les tâches étaient conçues pour les débutants, elles rencontraient moins l'idée d'une tâche cruelle difficile, combien un message à intéresser, ce qui est très cool. Quant à l'organisation, tout était au plus haut niveau, ce qui, pour être honnête, ne se trouve pas toujours dans les centres scolaires. Je souhaite bonne chance à l'équipe SITIS pour l'organisation du FSI SITIS suivant!
2 places, 10x
3e place, Inview:
C'était ma première visite à la FCE, car avant cela, je ne participais qu'à la FCE à Saint-Pétersbourg. Les tâches étaient assez intéressantes et difficiles, mais le seul problème qui était souvent simple était la chute d'Internet. J'adorerais venir l'année prochaine et j'espère que le SITIS CTF ne fera que s'améliorer. Je souhaite aux organisateurs de réussir à la fois les compétitions et l'organisation de tels événements.

Le gagnant était l'équipe MLPWN - My Little Pony (Pwnie).

Parmi les participants, il y avait pas mal de filles =)

Le combat était sérieux, parfois l'aide des organisateurs était requise:

Organisateurs
L'événement est organisé par la jeune équipe SITIS . Les partenaires du CTF étaient Jet Infosystems (partenaire général du SITIS CTF ), Group-IB, Elefus, BCS et FSBI Research Institute Voskhod.

Pour ceux qui sont venus pour un sceau. Il a été repéré dans l'équipe gagnante. Je pense que c'était un signe.
LV: dites quelques mots sur votre mascotte - sceau =)
lithium: en fait, ce n'est pas exactement notre mascotte c: Nous avons réuni cette équipe relativement récemment, avant que tous (enfin, presque tous) étaient dans des équipes différentes ou n'avaient pas d'équipe du tout. Theodore faisait partie de l'équipe SEAL, dont la mascotte est le phoque. Théodore le traîna. Nous nous attendions en fait à ce qu'il apporte son poney, qu'il a remporté à Sirius en tant que prix Pwnie)

Seal dit: ne soyez pas un phoque, jouez à la FCE, augmentez vos compétences!
La publication conserve la ponctuation et l'orthographe des membres de la FCE.