# Cybernight 2021 : Ping Pong
###### tags: `Forensics` `Cybernight`
*Challenge et Write-Up par Maestran*

## La cybernight
La cybernight était un CTF étudiant qui a eu lieu du samedi 11 décembre 2021 au dimanche 12 décembre 2021 sur le campus d'EFREI Paris.
J'avais participé à la création d'environ une dixaine d'épreuves avec mon ancienne équipe de CTF.
- https://www.efrei.fr/cybernight-efrei-2021/
- https://www.efrei.fr/cybernight-efrei-2021-2/
## Description

On a notre disposition un fichier .pcap que l’on doit ouvrir avec wireshark qui contient du trafic ICMP :

## Résolution
On commence par parcourir les paquets un par un car la capture contient peu de paquet, on observe alors que certains paquets sont différents :

On a un id différent du reste, pas de n° de séquence et une taille différente dans ces paquets et lorsque l’on regarde le champ data avec wireshark, on voit une chaine qui commence par ``# !/bin/bash`` donc le début d’un script bash.
Il s’agit d’exfiltration ICMP. On va utiliser un filtre pour sélectionner les paquets qui nous intéressent et supprimer les doublons :

(On garde ici que les « request » car les data des « request » et des « reply » sont les mêmes)
On doit maintenant extraire toutes les données. J’utilise pour cela tshark qui est une version en ligne de commande de wireshark :


(J’ai également utilisé xxd qui est un outil permettant de convertir de l’hexadécimal)
On remarque qu’il y a des commentaires inutiles qui sont de l’ascii art. On va les supprimer avec sed :

Ok, on a donc un script bash qui définit des variables et qui fait à la fin une commande avec bash et curl. Il s’agit donc d’une chaine obfusquée.
Une méthode très simple pour afficher la chaine est de tout simplement la copier-coller et mettre un echo avant :

On aurait également pu lancer le script dans une VM avec un outil comme tcpdump ou autre capture de réseau pour voir ce qui était contacté par le script.
**En revanche, exécuter le script sans avoir désarmé la chaine au préalable et le faire sur sa machine est une très mauvaise pratique, j’aurais très bien pu cacher un autre script qui lachait un `rm -rf /*` ou un reverse shell me donnant accès à votre PC.**
On a alors le flag : ***CYBN{V1v3l3t3nn1sdet4bl3}***
On arrivait également sur https://ouest-vpn.fr, un site web parodique crée par l’un des fondateurs du CTF :

## Conception
Je voulais qu’il y ait une capture wireshark en forensic car c’est ce que l’on retrouve le plus souvent et c’est une épreuve très classique. J’ai décidé de faire de l’exfiltration ICMP car c’est relativement facile à faire et c’est très connu donc il n’y avait aucun piège.
J’ai d’abord créé un script légèrement obfusqué entouré avec un peu d’ascii art pour obliger le participant à extraire correctement tous les paquets afin qu’il ne puisse pas juste obtenir le flag sur un coup de chance.
Pour obtenir le .pcap, j’ai créé 2 VMs sous debian, et j’ai un peu modifié ce script : https://github.com/ualvesdias/PyngExfil
J’ai lancé le script et l’exfiltration en même temps qu’un tcpdump que j’ai exporté en .pcap, et j’ai vérifié qu’il était bien possible d’obtenir le script avec ma commande tshark.
J’ai décidé qu’il s’agissait d’un challenge de difficulté moyenne. Lors de mes tests, je n’ai pas réussi à extraire toutes les datas ICMP d’un coup en suivant le flux comme on peut le faire avec du TCP ou de l’UDP, ce qui forçait l’utilisation d’un autre outil que wireshark comme tshark ou scapy par exemple. Le script étant obfusqué, il était aussi illisible en essayant de parcourir les paquets ce qui obligeait de l’extraire.