Piratage en grec ancien: résultats de la phase en ligne de NeoQUEST-2019


Pour résumer la scène en ligne de NeoQUEST-2019 : sous le cutter nous parlerons des tâches, regardons les statistiques de leur progression et féliciterons les gagnants!


Avis de non-responsabilité: le produit peut contenir des traces d'arachides et de spoilers pour ceux qui n'ont pas encore terminé la tâche, mais qui vont honnêtement (et il y a une telle opportunité - le site en ligne continue de fonctionner!). Il n'est pas recommandé de l'utiliser si vous n'avez pas fait preuve de suffisamment de persévérance pour obtenir toutes les clés vous-même.


Qui est le meilleur?


Cette année, nos gagnants ont donc été:


1ère place - AV1ct0r, 952 points;
2e place - OLD_NA_MESTE, 766 points;
3e place - gurgenhopar, 505 points.


Les enfants honorent et respectent! Il est à noter que les gagnants de 1-2 places étaient déjà déterminés dès le premier jour de la compétition, et n'ont concédé leurs positions à personne (sauf qu'ils ont échangé des places entre eux). Mais la lutte pour la troisième place était ardue: parfois le participant «bronze» changeait plusieurs fois par jour!


Les trois premiers attendent des cadeaux bien mérités, et tous ceux qui ont accompli au moins une tâche au complet sont des souvenirs de l'équipe NeoQUEST! (oui, au fait: si vous avez résolu au moins une tâche, mais ne nous avez pas encore dit comment vous aimeriez recevoir un cadeau - c'est le moment de le faire en écrivant à support@neoquest.ru )


Révéler les secrets


Pour les participants, nous avons préparé 10 tâches, de complexité et de sujet variables. Nous en parlerons en détail, et le reste sera bientôt publié sur Habré sous forme d'articles séparés!


Tâche numéro 1 - "Écho de Némée"
Dans cette tâche, les participants ont reçu le serveur dit d'écho, que vous pouvez connecter à un port spécifique et envoyer des données. En réponse, le serveur envoie le même que celui qui lui a été envoyé. Le drapeau se trouve sur le serveur, et il doit être obtenu avec seulement une adresse IP et un port.


Devoir n ° 2 - «Doux et soyeux»
L'histoire est banale - des informations très importantes fuient dans le réseau. Les participants reçoivent deux fichiers: le fichier binaire lui-même, qui a généré le trafic qui fuit, et le vidage PCAP de ce trafic. L'indicateur est dans un vidage pcap, mais sous forme cryptée, et vous devez décompresser le fichier binaire pour décrypter les données et obtenir l'indicateur.


Les tâches de débriefing numéro 1 et numéro 2 viendront séparément Habrastatami!


Tâche numéro 3 - "Communication avec le ciel"
Presque tous les participants ont réussi à établir des liens célestes, la tâche est devenue le chef de file en matière de cross-country. Données initiales - lien vers le bot de télégramme.


La première étape a été d'ajouter un bot et de lire sa description. Il dit que le bot «se fige» dans son réseau social préféré et nulle part ailleurs. Pour toutes les tentatives de lui parler au moins d'une manière ou d'une autre, le bot le rejette et lui demande de lui écrire à Olimpia. Nous allons à l'adresse indiquée par le bot et accédons à la page avec autorisation dans le réseau social "divin" (non).


Lorsque vous communiquez avec le bot, vous pouvez recevoir le message suivant: "Je ne suis pas des liens inconnus!", Ce qui peut nous donner l'idée que le bot pourrait suivre le lien familier.


Lorsque vous essayez d'aller ailleurs que sur la page d'autorisation (vers la page d'index, par exemple), nous redirigeons de manière intéressante (en fait, cela se fait sur de nombreux sites, mais ils filtrent normalement le paramètre suivant):


connexion? next = index


La première chose qui me vient à l'esprit: "N'y a-t-il pas OpenRedirect-a?" Oui, mais cela ne fonctionne que pour un utilisateur autorisé sur un réseau social, qui est le dieu du ridicule et de la calomnie, maman , parce que constamment assis dedans. Ouais, augmentons notre site, comme paramètre suivant, passons le lien vers lui et voyons si le bot clique sur le lien? Nous élevons rapidement n'importe quel site sur un hébergement gratuit. Nous servons le bot:


http://213.170.100.214?next=https://your.freeapp.kek/


Le bot n'a pas atteint la page, la redirection n'a pas fonctionné. Tout est une question de filtre, les développeurs malheureux vérifient s'il y a une sous-chaîne http ou https dans le paramètre "suivant", dans l'espoir de rediriger l'utilisateur uniquement dans leur domaine. Naïf. Nous expédions:


http://213.170.100.214?next=//your.freeapp.kek/


III ... le bot va sur notre site! Mais il ne se passe rien d'autre. Le bot est entré, a regardé et est parti (le premier jour, ce n'était pas le cas, car le bot avait un bug: nous avons envoyé des cookies avec une session après une redirection vers le site Web de l'attaquant, ce qui a rendu la tâche un peu plus facile, le deuxième jour, l'échappatoire a été fermée le deuxième jour).


Cependant, si vous faites une copie de la page d'autorisation, le bot pensera qu'elle est connectée et connectez-vous à votre page. Nous copions les ressources de la page d'autorisation du réseau social et créons une page de phishing. Sur le serveur, nous écrivons dans les journaux tous les identifiants et mots de passe entrés. Nous envoyons le lien au bot et il se connecte inattentivement à la fausse page.


image

Nous prenons le nom d'utilisateur et le mot de passe et nous nous connectons au réseau social, nous obtenons la clé. Succès!


Pour cette mission, un article a été rédigé par l'un de nos participants, mr_umnik , lire ici .


Tâche numéro 4 - "Crypto Crypto"
La quatrième mission de «Crypto Crypto» est consacrée, curieusement, à la cryptographie! Et il ne s'agit pas du RSA CTF traditionnel, mais des chiffres du monde antique, lorsque l'art de la cryptographie n'en était qu'à ses balbutiements.
Ainsi, une archive avec trois fichiers est donnée. Le contenu du premier fichier comprend du texte lisible et une ligne cryptée:


Utilisez la sagesse que la déesse vous a donnée.
5fw909zcmxsc7sxn1m6m86wxs2xrhrx78r72333mms8rlkg1u41o4dm82n632n2c2s8r17nwx3673c6hnh8n8x3mn7dwrrdswmxm1nc3wc681d16rmdc8cx


La question se pose, de quel genre de déesse parlons-nous? Passons à la légende. La seule référence est la mention d'une femme sage dans un casque avec une lance dans les mains, représentée sur le médaillon Cerberus. De tels vêtements correspondent à la déesse de la sagesse Athéna, qui suggère immédiatement l'utilisation d'un chiffre affiné consonantique. Bonne vieille force brute autorisée à décrypter le message secret:


module 9b6598564ebfb1fd6576cac681c87000bb51
Ciphertext 2b174f07479751ce84d60f809fa4a14160b482dcc25db6be490d9f1e2efcb29196


Que faire ensuite? Peut-être que le deuxième fichier donnera plus d'informations? Donc son contenu:


Quel autre code ancien vous viendra à l'esprit? Commençons par un simple ...
35ub2b9slmkjonnqtsokomumqnphkinmrqlqoyz4aayvr4tzv4ax8vv19xrcvb9ayv6fayrx58vr4ayv58v3r4uayvtyz4v9v68v9v4avuayvtyz4v9vayv58v3d5


Le premier chiffre qui me vient à l'esprit est le chiffre de César . Heureusement, et il peut être facilement déchiffré! Nous obtenons:


module b45327669cb7375d596803165a9497
indice Les anciens Grecs nous ont donné le théorème de Pythagore et les Chinois ont présenté le théorème chinois à propos de vous savez quoi


Ouais! Voici un indice! De plus, suggérant le théorème du reste chinois . Ce théorème stipule qu'un certain nombre entier peut être reconstruit à partir de l'ensemble de ses résidus à partir de la division par des nombres à partir d'un ensemble de nombres mutuellement premiers.
Donc, donc, donc, nous avons 2 modules, ainsi qu'un certain Ciphertext. Peut-être que ce Ciphertext est le même entier restauré? Ensuite, pour retrouver les restes, il suffit de simplement mettre le Ciphertext en deux modules connus de nous. Nous obtenons:


Résidu 1: C1 = mod Ciphertext (module 1) = 8b53bd874ebfb1fd6576cac681c86ffc36e7
Résidu 2: C2 = mod Ciphertext (module 2) = 14327669cb7348d59680c6595418


Que faire ensuite? Prenons attention au troisième fichier:


Nous avions deux modules mutuellement simples, un cryptogramme crypté, une allusion à une technologie chinoise et ... l'impression de Sparte antique.
Non pas que c'était une réserve nécessaire pour résoudre le puzzle, mais depuis que j'ai commencé à collecter des indices, il est difficile de s'arrêter ... Peut-être qu'il est temps de commencer à le résoudre déjà?


Tout semble être en place ... à l'exception de l'estampe de Ancient Sparta. Pourquoi est-elle ici? Peut-être qu'il y a un tel chiffre? En effet, le chiffre de la Sparte antique est aussi appelé le chiffre de Szital .
Essayons de décrypter les résidus résultants. En conséquence, nous sélectionnons ceux dont les fragments coïncident avec les morceaux du drapeau donnés dans la légende. En conséquence, nous avons reçu:


M1 = 88b78fb7161c54fcc33eda86bb6c6edf56f7
M2 = 19d64c553b9927657384640168c8


Ensuite, le drapeau final prend la forme:


NQ2019 88b78fb7161c54fcc33eda86bb6c6edf56f719d64c553b9927657384640168c8


Tâche numéro 5 - "Lettre Apple"
Selon la légende, nous avons les données suivantes: une image d'une webcam qui indique "Robert B. GmbH" dessus. Et aussi - un fichier avec un contenu étrange. Pour obtenir la clé, vous devez remplir les champs suivants du formulaire:



De plus, le héros de la légende laisse entendre que l'image est une indication du numéro de téléphone et que le fichier devrait nous conduire en quelque sorte à l'identifiant de la caméra.


Nous traiterons d'abord de l'image. La recherche sur Internet ne mène à rien. Mais l'inscription «Robert B. GmbH» après la première demande dans Google nous indique que le fabricant de cet appareil photo est la société allemande Bosch, dont le fondateur est Robert Bosch. Et puis il est temps de se rappeler que dans le formulaire Web près du champ "Téléphone" était marqué "(.gr)". Eh bien, l'action se déroule en Grèce, c'est logique. Par conséquent, après quelques délibérations, nous passons au site Web grec de Bosch . Et le numéro de téléphone indiqué ici ( +30 210 5701360 ) est exactement ce dont nous avons besoin!


Nous passons au deuxième fichier. Il a le type d'entrée suivant:


... c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb ... olympic_shot.png


Nous devions deviner que nous avons un lien magnétique dans son format le plus simple, dans lequel il y a un hachage utilisé dans le réseau BitTorrent le plus courant! Il reste à restaurer correctement le format de lien magnétique.


aimant:? xt = urn: btih: c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb & dn = olympic_shot.png


Nous ajoutons ce lien au client torrent, téléchargez l'image:


image

À première vue, il n'y a rien de spécial, mais si vous regardez de près, vous pouvez voir que le professeur de l'ancienne école grecque ne pointe pas du doigt le vide, mais un lien tout à fait valable avec le groupe VKontakte.


Dans le groupe, nous trouvons un poste avec la prochaine partie de la mission. Il est nécessaire de télécharger un fichier écrit en C à partir de documents et d'y trouver des erreurs de syntaxe et de sémantique. Dans le fichier lui-même, vous pouvez observer une interprétation particulière des mythes grecs anciens.


Code source C
#include "AncientGreece.h" void eat (int who, int *whom) { *whom = 0; } int BirthOfAthena() { int Zeus = 10000; int Metis = 1000; int Athena = Zeus + Metis; eat(Zeus, &Metis); Athena = 0; bool headache = TRUE; int kick = -1000; do { kick++; if (kick = Athena) { Athena = 1000; headache = FALSE; } } while (headache); return Athena; } int ApplesOfTheHesperides() { int labour = 0; int Heracles = 100; int heaven = 100000; int Atlas = 1000; int golden_apples = 8222; /*why?*/ bool trick = TRUE; while(!Heracles_is_here) { Atlas = Atlas + heaven; if (labour == 10) break; labour++; } Heracles_is_here = TRUE; Atlas = Atlas - heaven; Heracles = Heracles + heaven; Atlas = Atlas + golden_apples; trick = TRUE; Atlas = Atlas - golden_apples; Heracles = Heracles - heaven; Atlas = Atlas + heaven; return Heracles + golden_apples } void BirthOfZeus() { int Cronus = 1000; int newborn_gods[] = {1000, 1000, 1000, 1000, 1000, 1000}; int i = 0; for (i = 0; i < 6; i++) { eat(Cronus, &newborn_gods[i]); } int Zeus = newborn_gods[6] + 10000; bool battle = TRUE; bool peace = FALSE; int Thetis = newborn_gods[0] + 1000; int Hera = newborn_gods[2] + 1000; int Hades = newborn_gods[3] + 1000; int Demeter = newborn_gods[1] + 1000; int Poseidon = newborn_gods[4] + 1000; Cronus = 0; battle = FALSE; peace = TRUE; } void main() { BirthOfZeus(); BirthOfAthena(); ApplesOfTheHesperides(); } 

Nous trouvons la fonction main () et comprenons qu'il est nécessaire de considérer les fonctions dans l'ordre de leurs appels dans main (). Les nombres dans cette tâche ont leur propre signification: l'enfant à naître / mort / dieu est désigné par le numéro 0, la personne par le nombre 100, tous les dieux et titans - 1000 et Zeus le Thunderer est 10 000.


Accédez à la fonction BirthOfZeus (). Il est logique de supposer que cette fonction parle de la naissance de Zeus, ainsi que de sa lutte pour le pouvoir. Donc, après avoir lu le mythe de la naissance de Zeus, nous regardons le code, et nous voyons qu'un cycle de 0 à 6 dans ce cas est une erreur sémantique - Kronos n'a pas mangé cinq de ses enfants, mais seulement cinq. Reste à comprendre comment composer une clé à partir de cela: la clé est compilée par des numéros de ligne avec des erreurs. La première partie de la clé - le numéro de ligne - est 60. Nous continuons.


La prochaine erreur nous attend sur la ligne 64 - tout est simple, dépassant les limites du tableau.


L'erreur suivante à la ligne 67. Le fait est que Thétis, à savoir la déesse Thétis, n'était pas la fille de Cronos et la sœur de Zeus. Au lieu de cela, il devrait y avoir la déesse Hestia.


Dans la fonction BirthOfAthena (), une erreur nous attend pour la plus grande prudence: dans la condition de la ligne 20, un signe égal est écrit, et selon la norme du langage C, deux signes égaux sont nécessaires pour la comparaison.


La fonction la plus complexe était ApplesOfTheHesperides (). Une branche d'une tâche directe surgit littéralement immédiatement. Pourquoi int golden_apples = 8222? Ce n’est pas encore clair.


Le post VKontakte a également quelques conseils pour cette tâche:


1) Où chercher la réponse? En ouverture, ce qui s'est produit le 1er mars.


En regardant brièvement les événements du premier mars (ou vous pouvez immédiatement trouver ce dont vous avez besoin en vous souvenant du message et de la mention de l'alchimie), c'est la découverte du tableau périodique de D.I. Super, continuez!


2) Que faut-il utiliser pour rédiger une partie de la clé? (notez l'emplacement du puzzle dans le texte)


• Qu'est-ce qui unit les trois mots suivants: Mnemosyne, Ocean, Huygens?
• Qui a incendié les gens?


Google et trouvez la réponse: TITAN OF PROMETHES. Comme indiqué dans la tâche, cela vous aidera à compiler la clé. Reste à comprendre pourquoi exactement 8222. Ce n'est pas en vain que nous avons cherché des informations sur le tableau périodique: il est évident qu'il faut y chercher la réponse. En se souvenant de la chimie, nous trouvons le numéro de série de l'or = 79.


Mais qu'en est-il de la pomme? Probablement, la chimie sera également utile ici d'une manière ou d'une autre. On découvre que la pomme contient le plus de potassium. Son numéro de série est 19. Nous approchons du grand secret: pourquoi 8222, et non 7919? Bien sûr, le bon vieux code César. On décale chaque élément 3 vers la droite, on obtient notre valeur de 8222.


Il restait une bagatelle: chiffrer le TITAN de PROMETEI selon le tableau périodique. Ces deux éléments sont dans le tableau, nous obtenons: 2564. Remarquablement, nous procédons à la recherche supplémentaire d'erreurs dans le code.


Dans la même fonction, une variable non initialisée est attendue à la ligne 38, une erreur sémantique à la ligne 41 (c'était l'exploit d'Hercule 12!) Et l'absence d'un point-virgule à la ligne 52. Fuh, nous avons réussi. Le code résultant = 606467202564384152. C'est l'identifiant de notre caméra. Étrange, mais dans la Grèce antique, cela ne se produit tout simplement pas.


Nous entrons ces deux valeurs dans le formulaire, nous prouvons au monde entier que nous ne sommes pas un robot, et nous obtenons la clé précieuse!


Tâche numéro 6 - «Va, le taureau, se balance»
La tâche numéro 6 de cette année a été très difficile, mais intéressante. Nous allons l'analyser en détail dans un Habrastatya séparé, mais pour l'instant, disons brièvement: vous avez dû jouer avec le Minotaure en utilisant une application dans laquelle quelque chose manque.


Tâche numéro 7 - "Vous êtes plus précis? Non, vite! "
Dans cette tâche (qui sera également une rédaction séparée!), Les participants ont été invités à traiter avec une application qui crypte les données saisies en utilisant la valeur des paramètres d'accéléromètre de l'appareil pris tout en appuyant sur les boutons du clavier. Pour terminer la tâche, il était nécessaire de saisir diverses données dans l'application et d'analyser soigneusement les biais qui en résultent.


Tâche numéro 8 - "L'interprète divin"
Nos participants réguliers ont peut-être appris cette tâche - elle est restée l'année dernière. Puis personne n'est passé par la deuxième partie, et nous avons décidé de lui donner une seconde chance. Selon la première partie de la mission, il y a notre article sur Habré, où il raconte principalement la recherche de vulnérabilités. Cette année, l'objectif de la mission n'était pas axé sur la recherche, mais sur l'exploitation des vulnérabilités - et pour cela, nous allons, une fois de plus, identifier un Habrastaty distinct.


L'essentiel est que le programme d'interpréteur de commandes s'exécute sur le port réseau du serveur. Le programme binaire est attaché à la tâche. Le serveur exécute Windows Server 2016 et, entre autres, le mécanisme de protection CFG y est inclus. Tout ce que l'on sait de la clé, c'est qu'elle se compose de 70 caractères et se trouve dans le fichier key.txt à côté de l'exécutable sur le serveur.


Tâches №9 - «Le jeu dans la boîte»
Dans cette mission, nous avons deux serveurs. Vous pouvez envoyer des archives RAR au serveur n ° 1, qui y sont décompressées, et peuvent aider à cacher la clé sur le serveur n ° 2.


Tâche numéro 10 - "Ne frappez pas, Ulysse"
Cette tâche a été l'une des plus difficiles - un seul participant l'a maîtrisée. Données initiales - archivage avec infrastructure réseau, tous les fichiers nécessaires dans lesquels ont été chiffrés. Et s'il est chiffré, il n'y a qu'une seule façon - de déchiffrer!


Les tâches de débriefing numéro 9 et numéro 10 viendront également séparément Habrastatami!


Des scientifiques britanniques ont établi


Les petites statistiques de cette année:


  • Le nombre de participants inscrits est de 1014 personnes.
  • Le nombre de tâches terminées - 10/10
  • Le nombre de participants qui ont accompli au moins une tâche en entier est de 33.

Le nombre de clés valides pour chaque tâche



Le nombre de clés valides pour chaque jour de la compétition



Pour toute la période de la phase en ligne de NeoQUEST-2019, 94 clés ont été reçues.



Et ensuite?


Et puis - «Confrontation» le 26 juin, à Saint-Pétersbourg, qui accueillera la finale de notre compétition! Nous attendons tous les meilleurs hackers pour nous assurer que vous êtes vraiment les meilleurs! Et pour ceux qui ne viennent pas, nous penserons comme ça ...



Suivez l'actualité sur le site de l' événement estival!

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


All Articles