Mini tâches CTF

Salutations à tous les habrachitateli. Trois semaines se sont écoulées depuis que j'ai proposé à ceux qui souhaitent résoudre mon CTF et, je pense, il est temps de publier l'analyse des tâches. D'après ma propre expérience, je sais que c'est dommage d'être dans une situation où j'ai passé beaucoup de temps sur une tâche, mais je n'ai pas trouvé de solution, alors je poste l'analyse des tâches. Les solutions sont divisées en étapes et cachées sous un spoiler afin que, après chaque étape, vous puissiez essayer de résoudre le problème vous-même, en surmontant un moment difficile.

XT_CTF_01

XT_TASK_101

Étape 1
Ouvrez l'archive et voyez les noms de dossiers longs. Le dernier dossier contient des fichiers, mais sans mot de passe, leur contenu n'est pas disponible.

Nous écrivons les noms des dossiers:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
2346ad27d7568ba9896f1b7da6b5991251debdf2
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
bef21e9bfcf9fab0a5aebd46a735efe5434da96b
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8


Nous conduisons les séquences dans Google et découvrons rapidement que c'est sha1 des mots:

password
hash
1000
letters
a


Dans l'ensemble, nous supposons que le mot de passe est un hachage de 1000 lettres «a». Si sha1 a été utilisé pour les mots, nous allons essayer ici - 291e9a6c66994949b57ba5e650361e98fc36b1ba. Nous extrayons les fichiers en nous assurant que le mot de passe est correct.

Étape 2
L'examen des fichiers montre qu'ils sont tous composés selon un principe à peu près général: le nom du format xt + nombre, le contenu de quelques lignes, où la première est de quelques lettres et la seconde est une séquence de caractères hexadécimaux. Il est plutôt inintéressant de considérer des séquences hexadécimales, car elles contiennent 79 caractères chacune (à l'exception du fichier xt121785230414240585522142219912, où il y en a 58) - ce ne sont certainement pas des hachages et pas quelque chose d'encodé.

Puisqu'il en est de même partout et qu'il y en a moins dans un seul fichier, on peut supposer que toutes les séquences hexadécimales doivent être combinées, et la partie la plus petite n'est que la dernière. Reste à comprendre la commande. Il était possible de jouer avec les noms, mais de ne rien obtenir d'intéressant, mais si vous faites attention aux premières lignes des fichiers, vous pouvez également trouver un motif en utilisant le regard.

Ici, je vais indiquer quelques lignes: he, li, n, o, ne, mg, si, ca, cu, zn, br, kr, ag ...

Quand ils sont proches, il est beaucoup plus facile de reconnaître la désignation des éléments chimiques en eux. Nous ouvrons le tableau périodique et collectons la séquence hexadécimale dans un fichier (il y a 53 fichiers au total, c'est le numéro de la dernière partie avec le symbole i, ce qui correspond à Yod, 53 éléments).

Le résultat est un fichier PNG avec un rectangle vert.

Étape 3
Il est peu probable que les métadonnées soient contenues dans le fichier sous forme claire, car nous voyons tous les octets dans la représentation hexadécimale. Par conséquent, nous travaillerons avec l'image elle-même. Vous pouvez remarquer (pas avec l'œil, bien sûr, mais avec des outils) que plus d'une couleur est réellement utilisée. Nous allons utiliser le remplissage et voir le guide de l'étape suivante.



Étape 4
Nous hachons sha1 tous les noms de fichiers et les organisons selon l'ordre de l'étape précédente.

696e7400b8a8c7da1c52e63550ddfdf8ae03be73
206d6100f4eb7c768890e8502db2bdeb81718301
696e2800f1c5c0df7676667ffca16856e808f9dd
297b69008e0d05b67df33c751da3c6f17a3fdb9d
6e742000bf96cea16e609731aa7397ac2b9f7b15
613d3400d2fedbf43ad7c43d678382d2ef83dde8
36303900b909f396c69c6d47ccb623cc83d5e2ea
313132007f6fdde9d3abad5545f44b2d2661b0be
3b696e0002582f22cab7aeaf730680b87780279a
74206200267e505a621cf264e303d3df63222fa7
3d343600ac031f166103b5319a273a867d5247ae
36393700d9e521b0e0d488b47fde51e5f5f9650d
37323b00bdf3caa241b2936f0355ad89e420389c
696e7400a1f9f8e62cd64c8e25d852e433bda80c
20633d009932d3b69b7a74296c7b75894bcddbc1
373639000ca31548a80fe28adf263bbe89f03069
33393400f56920f247d4d66798bb2c54e3db668c
373b6900222283ee79a5e7e3e79d55d4b159ffb1
6e742000fac60ac1f78aa90201e98b30a9c4adbc
643d3700b55bc0dda8bd748983716018b29fbd6f
38323300176db95a8aa4aaf1770346c353fd4753
32313400644e234a3899bd84e9f7d61a12bfecab
3b696e00654b4b7d8fb3b022777c6346342eba91
742065009720d2693f833788e69a6641e8de22f6
3d363800b1e40956ec8ca6a64013c8a651eff0f7
3435340008b5419f5139553c85b605009e3fb343
38393b004e5d66b6980c7cf14dc9bf0acf09e444
696e7400e648ffad4cde46b4d845f1ffad075da5
20663d00b9bdab8cb8721581f5aa8a2c2522d9de
3334330054fb4abaf144e818ec1199b7b4ffec47
34353900378490c3ba53a356327af1bbb2d2c8b0
313b69008803024e711baf3695402d3a13e0c905
6e7420006434f491ab51a923995a3daf56a65f5e
673d3800c5198ae1565cc5744d23ac492f6d2506
3231380000217a2c380bf9c9a6e122b1c01e90ea
373339003ef4f423f0d9c54ea5d8fbe4d8bf518c
3b70720073caad02c9cba60debf81f72c0ac23ad
696e7400d9ddb857a7608947aae60ed6d054c039
6628220061a3a81dcc20ce43903a18cea28b77db
2573250065285f647ed3e22a9233974ac24509a1
73257300678138427cc07ee072c987583db2fc5e
25732500d183d5303ed6bda0606eb5e4ccc1e7c8
73257300c5e9d7bfdb76b5fee122fe57bc8aa81a
25735c003675c4f732d95ae6a0d9bcc6769f94ca
6e222c0088503423d1f56148bbf2573a6e2e0518
26612c007c8d1d6b90d252fa7b2084bd8695a8f9
26622c00ec96a4edbdeb286484af38395a3fc928
26632c004a1db36cdef743283e6bc853b6995555
26642c00dd66db502138413e272deb2da78d4f57
26652c00bb1785b4e41444da4230b602f1860557
26662c00e739c24f55c0899b8eae2a948622c7d7
26672900f4b4843d0056571d293bec879cd1968f
3b7d20006750ebb44ffd784dc8afdd5b0f76816a


Si vous faites tout avec des stylos, vous remarquerez assez rapidement que 4 octets sont toujours nuls et à gauche se trouvent des caractères imprimés. Nous ne laissons qu'eux, collectons en une seule ligne.

Nous obtenons la ligne suivante:

 int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);} 


Nous exécutons ce code en C , par conséquent, nous obtenons un indicateur. Nous vérifions le hachage pour nous assurer une fois de plus - oui, c'est le drapeau souhaité.

XT_TASK_102

Étape 1
Ouvrez l'archive et voyez immédiatement les noms de fichiers dans l'hex. Le contenu du fichier n'est pas disponible car un mot de passe est requis. Commençons à tordre les noms.

Tous les noms ont la même longueur, sauf pour un fichier avec l'extension 64F00000 (il est plus court). En général, les extensions sont étranges, atypiques. Mais il est assez facile de remarquer que tous les fichiers ont des longueurs d'extension différentes, et c'est de 1 à 7. Le nom avec l'extension la plus longue est le plus court. Il est logique de supposer que vous devez combiner toutes les séquences hexadécimales en fonction de la longueur des extensions de fichier.

Nous enregistrons la séquence d'octets séparément, sachant qu'il s'agit d'une archive 7z, depuis les deux premiers octets (0x37 0x7a - 7z).

Étape 2
La deuxième archive est à nouveau protégée par mot de passe, mais cette fois nous avons des noms de fichier courts et un contenu de petit fichier. Il est bon que la visionneuse d'archives affiche les métadonnées des fichiers, à savoir leurs sommes de contrôle.

Malgré le fait que le crc soit googlé assez mal, vous pouvez toujours vérifier toutes les séquences et constater qu'à la demande du crc 90c1667d, il existe toujours un prototype de «quatre». Ou tout simplement brutaliser une séquence de trois octets pour les fichiers les plus courts. Chacune des méthodes a conduit au fait que le contenu des fichiers était facile à installer - il s'agissait des chiffres anglais «un», «deux», «trois», «quatre», «cinq» et «six». Nous n'avons d'autre choix que de joindre les noms de fichiers dans cet ordre. Nous obtenons VVNFIENSQzMy. Nous vérifions le mot de passe de la première archive - il convient.

Étape 3
Les solveurs observateurs, même avant le mot de passe, pourraient remarquer que crc32 des fichiers d'archives a une forme plutôt spécifique, à savoir 0xC0DExxxx. Il n'y a pas de telles correspondances dans les FFC.

Les fichiers eux-mêmes sont des images PNG avec du texte. Étant donné qu'à chaque étape, nous avons considéré crc32, cela vaut la peine de continuer à le faire. Après avoir vérifié le premier texte de l'image (par exemple, qnGyaQBc), il devient clair que nous sommes sur la bonne voie, car crc32 est 0xc0de0831. Nous considérons crc de tout ce qui reste et collectons en un seul tas.

CRC Ă  partir d'images:
0xc0de094e
0xc0de054e
0xc0de0d7d
0xc0de0343
0xc0de0b52
0xc0de0734
0xc0de0154


CRC Ă  partir du texte:
0xc0de0831
0xc0de0430
0xc0de0c35
0xc0de027b
0xc0de0a33
0xc0de0654
0xc0de0058


On jette la partie commune, on voit qu'à partir de la valeur du premier octet des deux va de 0x00 à 0x0d. Il semble que ce soit un numéro de série. Nous collectons, nous recevons un drapeau. Nous vérifions sha1 et vérifions en outre que tout est correct.

XT_QUEST_103

list1
Étant donné une séquence de nombres. Nous prenons simplement les caractères avec les numéros indiqués sur la carte, la numérotation à partir de zéro et les sauts de ligne à sauter. Il est logique de scénariser cette action - elle sera nécessaire plusieurs fois.

Réponse: awEs0me_sTart

list2
Beaucoup de chiffres. Le nom du fichier suggère que vous devez connaître le nombre de chiffres 5. Nous comptons le nombre non seulement de cinq, mais généralement tous les chiffres de 0 à 7. Nous obtenons la séquence: 135, 95, 61, 27, 58, 57, 85, 190. Nous mettons la carte, nous obtenons la réponse.

Réponse: b1g_sTEp

list3
Nous voyons une image avec un polynôme. On substitue n de zéro à 9, comme on conseille le nom du fichier, on obtient une séquence qui, superposée sur la carte, donne une réponse.

Réponse: coOl2math!

list4
Nom de fichier étrange et contenu étrange. Si vous google fdhvdu, parmi les résultats non pertinents, vous pouvez trouver une indication que ce mot césar codé par le chiffre de César est un décalage de 3 caractères par ordre alphabétique. Après avoir décodé le contenu, nous voyons des nombres romains. Je pense qu'il est clair que faire avec une séquence de nombres.

Réponse: dOinG_w3ll

list5
Le contenu de la tâche dit littéralement ce qui doit être fait. Hachez le fichier, nous obtenons 20 octets, qui peuvent être interprétés comme une séquence de chiffres pour la carte.

Réponse: exceLlenT_impECc4ble

visual1
Nous superposons le texte de la tâche sur le texte de la carte, de plus, nous le «superposons» littéralement.

Réponse: fa5t! One

visual2
Il y a 840 zéros et uns dans le texte du problème. Puisque le thème est visuel, nous essayons d'obtenir une représentation visuelle. Si le texte est divisé en 5 lignes de 168 caractères chacune, vous pouvez voir la séquence qui mène à la réponse.



Réponse: go_fUrth6r


visual3
Le nom du fichier nous parle assez directement des dominos. Nous essayons de connecter les articulations hexagonales et d'obtenir deux chaînes. L'une est circulaire et pas intéressante, la seconde peut être considérée comme une suite de chiffres pour une carte. Le résultat est soit une réponse, soit une réponse dans l'ordre inverse.

Réponse: heRoic_effOr7s

visual4
On nous donne seize nombres hexadécimaux dans lesquels il y a clairement de nombreuses unités de bits. Nous traduisons les nombres avec une calculatrice et "imposons" à nouveau littéralement. Les zéros binaires marquent les caractères souhaités. Nous lisons les symboles de haut en bas, de gauche à droite.

Réponse: ih8BiTs!

visuel5
Le nom du fichier donne à nouveau une indication. "B3s23" est la désignation de la configuration pour la durée de vie du jeu. Nous prenons un simulateur en ligne, saisissons l'emplacement initial, attendons cinq mouvements et lisons le nombre de cellules vivantes dans les rangées (ce que vous devez faire juste qui indique toujours le nom du fichier).

Réponse: jUsT_9ood

prog1
Dans le texte du problème, nous voyons quelque chose comme une machine de Turing à deux dimensions, qui doit juste être fait.

Réponse: k1l0_Byte

prog2
La tâche fournit explicitement le code de brainfuck, mais si vous l'exécutez sur l'émulateur, le programme affichera un message indiquant que la tâche ne concerne pas brainfuck. Oui, il vous suffit de calculer le nombre de caractères dans chaque ligne et de l'appliquer à la carte.

Réponse: l1kEl1On!

prog3
Brainfuck encore, mais cette fois la conclusion est d'accord avec nous. La séquence souhaitée pour la carte se trouve dans la mémoire.

Réponse: moRe_1nfO2me

prog4
Et puis brainfuck. Nous commençons et le programme nous affiche un message indiquant qu'il n'y a pas de mot de passe. Rien d'intéressant en mémoire non plus. Je dois comprendre le code.

Le code se compose de trois lignes. Le premier définit certaines valeurs, le second également, le troisième affiche l'état de la mémoire à l'écran.

Nous supprimons la deuxième ligne, exécutons et obtenons la séquence de la carte.

Réponse: nO_baRr13rs

prog5
La dernière tâche. Brainfuck code à nouveau. Nous voyons une indication que nous devons calculer une fonction à partir d'une ligne de la carte et du code. Nous exécutons le code, ce qui laisse un indice dans la mémoire que la fonction souhaitée est le décodage base64. Nous vérifions les lignes de la carte pour savoir ce qui se passera si elles sont décodées à partir de base64. Du coup, la chaîne KysrWz4rPis8PC1d est décodée en +++ [> +> + << -]. Nous exécutons le code avec cet ajout et voyons les instructions pour broder tous les caractères dans chacune des lignes de la carte. Le résultat sera le dernier mot de passe.

Réponse: ofF1ci4l! SuCceSs

C’est tout. À tous ceux qui ont participé - merci, si vous avez des questions, posez-les dans les commentaires.

Source: https://habr.com/ru/post/fr461487/


All Articles