InterIUT 2025 - Interception de la CASTEM

Ce challenge est divisé en trois parties de niveaux différents :
- Le premier est de niveau Moyen
- Le deuxième et le troisième sont de niveau Facile

Dans un premier temps, nous devons trouver les informations suivantes à partir d'une capture réseau:
- Le nom de l'application web qu'ils utilisent pour interagir avec leur serveur distant
- Nom d’utilisateur
- Mot de passe
- IP du serveur distant
- Le nom de domaine associé
- Hostname

En ouvrant la capture réseau nous remarquons beaucoup de paquets HTTP. La partie intéressante commence à la trame n°7937 quand la machine cliente fait une requête DNS vers le nom ec2-3-95-168-43.compute-1.amazonaws.com.
Quelques lignes plus tard nous voyons des échanges HTTP entre la machine cliente et le serveur en question 3.95.168.43. Dans celles-ci nous remarquons la mention à un applicatif nommé shellinabox.

Application shellinabox

Cette application sert à interagir avec un serveur via un terminal accessible par le web. Étant donné que l'application n'est pas protégée par une surcouche SSL (certificat SSL/TLS), nous pouvons accéder à l'intégralité des données qui sont transmises par le client vers le serveur web et inversement.

À cette étape, nous distinguons deux streams tcp importants:
- tcp.stream eq 96 => Stream où le client envoie les touches qu'il presse.
- tcp.stream eq 101 => Stream où le serveur envoie les données qui sont à afficher sur le client web.

En suivant les trames HTTP du second stream mentionné, on voit toutes les données affichées sur le terminal. Au début du stream on remarque l'une des informations que nous cherchons: le hostname du serveur.

Hostname du serveur

Des informations nécessaires, il ne nous manque plus que les identifiants (identifiant et mot de passe). En parcourant ce thread, on voit que les données retournées par le serveur dans le champ "data" sont les lettres entrées par l'utilisateur dans le terminal.

Premières lettres de l'identifiant

En les mettant les unes à la suite des autres, on obtient ce nom d'utilisateur: eclide.
Puis, en récupérant le codes des touches pressées par l'utilisateur dans le stream 96, on reconstitue la valeur du mot de passe: D7i_#!posil!.

Pour résumer, nous avons donc recueilli toutes ces informations:
- Le nom de l'application web: shellinabox
- Nom d'utilisateur: eclide
- Son mot de passe: D7i_#!posil!
- IP du serveur distant: 3.95.168.43
- Le nom de domaine associé: ec2-3-95-168-43.compute-1.amazonaws.com
- Hostname: Nore-Castem-BASTION

En remettant ces informations bout à bout au bon format, on trouve le flag.

FLAG 1/3:
interiut{shellinabox_eclide_D7i_#!posil!_3.95.168.43_ec2-3-95-168-43.compute-1.amazonaws.com_Nore-Castem-BASTION}


Pour la seconde partie, il nous est donc demandé de trouver le nom et le contenu du fichier lu par l'utilisateur sur le serveur distant.

En parcourant le stream 96, on voit que l'utilisateur tape sur les touches:

c a t [Espace] v a [Tab] [Entrée]

En recoupant les touches pressées par l'utilisateur et les données d'affichage renvoyées par le serveur, on reconstitue la trame de ce qui a été fait.

Touches pressées et données renvoyées par le serveur

On reconstitue donc le nom du fichier: vault.txt.
Juste après la complétion de la fin du fichier, on trouve la donnée "\r\n" qui correspond à un retour à la ligne (touch entrée). Puis, à la réponse du serveur suivante, on trouve le contenu du fichier et le prompt pour la prochaine commande.

Contenu du fichier vault.txt

On trouve donc le contenu: Dk_Dc!#dsq950.

FLAG 2/3:
interiut{vault.txt_Dk_Dc!#dsq950}


Pour cette troisième et dernière partie, il nous est fourni un fichier "suspect". Après un file sur ce fichier, on voit que c'est un fichier de type "LUKS encrypted file,".

$ file suspicious_data 
suspicious_data: LUKS encrypted file, ver 2 [, , sha256] UUID: 6b17d5b0-16e9-4ae0-af82-d0becd1d13bd

Pour monter ce fichier, j'utilise d'abord ces commandes:

sudo losetup --find --show suspicious_data
sudo cryptsetup luksOpen /dev/loop17 decrypted_suspicious

À cette étape il m'est demandé une passphrase. En reprenant les informations trouvées à la partie précédente, j'essaye le contenu du fichier "vault.txt": Dk_Dc!#dsq950.
Avec cette passphrase je n'obtiens pas d'erreur. Je peux donc ensuite le monter dans un dossier comme /mnt/suspicious:

sudo mkdir -p /mnt/suspicious
sudo mount /dev/mapper/decrypted_suspicious /mnt/suspicious

Dans ce dossier, je ne trouve qu'un fichier "chat.jpg" d'apparence banale:

Image récupérée après le montage

J'effectue un exiftool sur l'image et j'obtiens le flag:

$ exiftool chat.jpg 
ExifTool Version Number         : 12.40
File Name                       : chat.jpg
Directory                       : .
File Size                       : 4.2 MiB
File Modification Date/Time     : 2025:05:16 10:23:33+02:00
File Access Date/Time           : 2025:05:25 13:09:58+02:00
File Inode Change Date/Time     : 2025:05:16 10:23:33+02:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
Current IPTC Digest             : f3ccc7862d516e90ea39811bf6850c8e
Copyright Notice                : Bien joué ! interiut{QU1_U7i1i53_3NC0r3_sH311iN80XD?}
Application Record Version      : 4
Image Width                     : 3024
Image Height                    : 4032
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 3024x4032
Megapixels                      : 12.2

FLAG:
interiut{QU1_U7i1i53_3NC0r3_sH311iN80XD?}