P'Hack - Cryptography

4 challenges dans cette catégorie, du très simple à un peu plus compliqué.

Guacamole - 128pts

Un bon avocat vous serait sûrement d'une aide précieuse..
M'ocd lbkfy ! Ox rywwkqo ke wosvvoeb kfymkd no xydbo qoxobkdsyx, vo pvkq ocd wkbCrkvvObsUCox. T'oczobo aeo vo toe no wyd fyec kebk zve ("K fked U")!
Le flag est à rendre au format `PHACK{...}`.

Un petit challenge assez simple pour démarrer, le contenu ressemble à un décalage de caractères du genre du chiffre de César, il nous faut juste trouver le décalage en question. Un site assez pratique pour cela : https://rot13.com, contrairement à son nom, il permet d'énumérer facilement les décalage de 1 à 25. On trouve donc que le décalage était de 16 et on récupère le message ci-dessous.

C'est bravo ! En hommage au meilleur avocat de notre generation, le flag est marShallEriKSen. J'espere que le jeu de mot vous aura plu ("A vaut K")!

Le flag est donc PHACK{marShallEriKSen}

Enchaîné - 128pts

Lors de votre phase de reconnaissance, vous avez trouvé une chaîne de caractères étrange :

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJQSGFja0NURiIsI
mlhdCI6MTYxNzM4NjQwMCwiZXhwIjoxNjE4MTY0MDAwLCJhdWQiOiIi
LCJzdWIiOiIiLCJmbGFnIjoiNTEzMTU2NGY1NTQ2NjgzNzVhMzM1NTc4N
WE2YzM4Nzc1OTU0NGU2NjYxNmE1MjZkNTgzMTU2MzI1NTU2NDU3YT
U5NTgzMDNkIn0.XsPHPbpV2oHwi8t1dPXblJ2IokuUNhJywOyqKdFB9cw

Il vous semble connaître ce format, mais sans certitude.

Pour le coup, c'est un format assez connu, on est clairement sur du json encodé en base64 (les trois premiers caractères eyJ en sont caractéristique). On voit 2 points dans le contenu, marqueurs caractéristiques d'un JWT. Le site https://jwt.io permet de décoder ce genre de token. On trouve le contenu :

{
  "iss": "PHackCTF",
  "iat": 1617386400,
  "exp": 1618164000,
  "aud": "",
  "sub": "",
  "flag": "5131564f554668375a3355785a6c387759544e66616a526d583156325556457a5958303d"
}

La propriété nommé flag nous intéresse pas mal, ça ressemble à de l'hexadécimal. On utilise le site https://www.rapidtables.com/convert/number/hex-to-ascii.html pour convertir l'hexadécimal en ASCII pour obtenir

Q1VOUFh7Z3UxZl8wYTNfajRmX1V2UVEzYX0=

On dirait encore du base64... Un petit tour sur https://www.base64decode.org nous permet de le décoder et d'obtenir quelque chose qui se rapproche d'un flag

CUNPX{gu1f_0a3_j4f_UvQQ3a}

On sait que le format des flags est PHACK{}, dans le doute, on va retourner sur le site https://rot13.com pour essayer le décalage de lettre. Et il s'agit finalement d'un ROT13 pour obtenir le flag final.

PHACK{th1s_0n3_w4s_HiDD3n}

Un challenge qui porte bien son nom du coup, plusieurs méthode enchaîné pour récupérer ce flag.

H3lp - 256pts

Un message de votre ami intergalactique vient d'arriver !
Saurez-vous le décoder à temps ?
3()()¯¯V)--, '-- v^|--[]_|\|/ <(Z/\>-'v^ []_|¯¯U L!LL|_]_]^-]=[[]ZLL| |--() 3<[^<Z >-[]] .. '-- LLVVUU_] _|'--_V_\|/ -^() ^-WUU/\ 3<(v^ _V_'--¯¯VZ<{A_^-LL|¯¯V. E>- '--Z>LL|[/][--'--LD<||--'--()Zv^ <[A<W _]LL|<|/\'--ZLD EW [--[] |--]=[\|/ '--ZLL<{E()](/) N]A<LD.
E^< A_()|--<([--() <(Z/\ A<LL|>< <{^<W ]=[\|/_]A_'--ZLD ELL| ()Z |--]=['--v^. E\|/LL|[-- EVV |--[]Z'--LD]=[[--, |¯¯A_.E, <[[-- ^-'--NN<|^-_]<{ZUU[--. '-- ]=[\|/<{A<¯¯U |--]=[<||-- []Z\|/ []L|_ |--]=[\|/ _|'--[--|--_]VV LD^<LL|WZ EUUZ E'--LD]=[|-- ]=[<|>UU (/)UUWZ V\[]E\|/[--]=['--ZLD.
¯¯U()Z'|-- 3()^<A<>- U()3-^())-- .. 3VV ]=[<(>\|/ <( L|_A<'--UUZ¯¯U '--Z ZUUVV¯¯U, <{Z¯¯V 3W 3'--_|_| Z()[-- ^<LL|(/)|-- ]Z|--'--_| ]=[W'v^ [/]<|LLUU '--Z <|Z¯¯U)--'V\ ^<()[]E.
[--<{_V_W L|<[^<\|/.
AA]NN
Le flag est le lieu de rendez-vous en majuscules au format `PHACK{LIEU}`.

Ce challenge pour le coup nous a pris un peu plus la tête, le titre du challenge 'H3lp' nous donne plutôt un indice sur du leet speak ou quelque chose associé. En regardant le contenu du texte on voit bien des séquences de caractères qui se répètent. Les différents niveaux de leet speak ne contiennent pas une grande partie des caractères que l'on a ici, il semble donc qu'on a à faire à une version différentes. On fini par trouver le LSPK90 CW, le leet speak à 90°, ça devient beaucoup plus simple à lire d'un coup. Pour notre plus grand bonheur, il existe même un site web https://www.dcode.fr/lspk90-cw-leet-speak-90-degrees-clockwise qui permet de le décoder. On récupère donc le message :

WOODY, I STOLE ANDY'S OLD CELLPHONE TO WARN YOU : 
I FEEL LIKE BO PEED WAS KIDNAPPED. 
MY INVESTIGATIONS ARE LEADING ME TO THE INFAMOUS ZURG.
MR POTATO AND REX ARE HELPING ME ON THIS. 
MEET ME TONIGHT, 7P.M, AT PIZZAPLANET. 
I HEARD THAT ONE OF THE LITTLE GREEN MEN MIGHT HAVE SEEN SOMETHING.
DON'T WORRY COWBOY : WE HAVE A FRIEND IN NEED, 
AND WE WILL NOT REST UNTIL HE'S SAFE IN ANDY'S ROOM.
TAKE CARE.
BUZZ

Et donc le flag est PHACK{PIZZAPLANET}

Certifié sécurisé - 256pts

Une de vos connaissance sur le darknet vous informe avoir réussi à s'infiltrer sur l'ordinateur de l'un des admins du CTF.
Après avoir capturé un peu de trafic réseau et récupéré quelques fichiers, la connexion a été coupée subitement.

Il semblerait qu'il était en train de travailler sur l'un des challenges du CTF.
Voyez si vous arrivez à récupérer un mot de passe !

Format du flag : PHACK{mot_de_passe}

Ici on a un fichier zip joint 'stolen_data.zip', il ne reste plus qu'à voir ce qu'on peut faire avec. on trouve le chemin /home/admin et plusieurs fichiers dans le home de l'admin.

Après étude rapide de tous les fichiers, les 3 qui semblent nous intéresser sont les 3 premiers. D'abord le .bash_history va nous en apprendre un peu plus sur ce qui s'est passé sur cette machine :

La première ligne paraît bien trop évidente mais on a testé, ce n'est bien entendu pas le flag. Par rapport au nom du challenge, le fait qu'il y ai des certificats nous paraît intéressant. Mais comment les récupérer ? Le docker-build-push.sh peut nous faire penser qu'une image docker a été créé et qu'on va peut être pouvoir la récupérer. Et effectivement dans le docker-compose.yml, on trouve une image qui à l'air intéressante :

Un petit tour sur le docker hub et on trouve cette image : https://hub.docker.com/r/phackctf/challenge

On va run cette image et lancer un bash dedans pour voir ce qu'il s'y passe avec la commande docker run -it phackctf/challenge /bin/bash. On explore le contenu de l'image et on y trouve deux dossier intéressant : /chall et /cert

Le fichier index.php semble être ce qu'on cherche, puisqu'il contient la forme hashée de ce qu'on suppose être le mot de passe pour le flag.

Bien évidemment passer le hash dans https://crackstation.net n'a rien donné (ça aurait été trop simple :D).

Le dossier /cert contient le certificat et la clé privée RSA qui, on suppose, va avec pour servir la page php en https. À ce niveau là, il est intéressant d'aller voir le fichier capture.pcapng qui était présent dans le fichier zip. On l'ouvre avec wireshark et on récupère les trames réseaux qui ont été échangées. Comme imaginé, on y trouve les échanges avec la page index.php. Problème, c'est du https, il est donc nécessaire de charger la clé privée RSA pour pouvoir le décoder. Un petit tour dans le menu préférences -> RSA Keys de wireshark, on ajoute notre clé (récupérée depuis l'image docker) et là tout devient plus clair.

On a récupérer le mot de passe associé au compte admin pour la page présente dans le container docker. On le submit sous la forme PHACK{Th1sIsH3llOfAP4ssw0rd!} et le challenge est validé.

Afficher les commentaires