On reprend le script de
Un agent compromis 1/3 (Forensics)
et son tunnel DNS
On cherche les requêtes DNS du dump…
…et qui corresponde au domaine principal *.hallebarde.404ctf.fr
Cette forme de tunnel DNS est simpliste, mais existe aussi IRL:
l'attaquant dispose d'un nom de domaine type 404ctf.fr et du serveur DNS associé.
Ce serveur DNS de l'attaquant (qui a autorité sur le domaine, puisque c'est le domaine de l'attaquant)
va alors logger toutes les requêtes DNS qu'il reçoit (*.hallebarde.404ctf.fr).
A partir de ces logs, l'attaquant peut reconstruire les données d'un fichier ainsi exfiltré.
Le tunnel DNS marche ainsi:
- Une requête DNS "never-gonna-give-you-up" est faite pour marquer le début d'une exfiltration
- Une requete est faite pour exfiltrer le nom du fichier, sous forme d'une chaine hexadécimale
- Une requête est faite en hexa ("begin") pour marquer le début du fichier
- Le contenu du fichier est exfiltré par paquets de 32 octets
- Une requête est faite en hexa ("end") pour marquer la fin du fichier
On décode l'hexadécimal du sous-domaine, et on a le nom du fichier (flag.txt):
c'est prometteur
Pour voir, j'ai décodé les codes hexadécimaux des mots-clefs: "begin" et "end"
Pour faciliter le scripting, j'exporte le contenu du DNS dans un fichier depuis Wireshark
(en rajoutant au passage une colonne "Name" avec le nom de domaine de la requête DNS)
On crée alors un script PHP pour extraire les noms de domaine du fichier qu'on a exporté
Et on va le compléter en décodant ces noms de domaines pour retrouver les fichiers originaux
L'un des fichiers ainsi exfiltré est le script python lui-même
On se retrouve alors avec 4 fichiers exfiltrés par cette méthode
Et on se fait troller :) le fichier flag.txt ne contient pas le flag!
On a donc été bien inspiré de reconstruire tous les fichiers plutôt que "flag.txt" seulement
Flag
Mais en relisant le challenge, on nous demande en fait la liste des noms des fichiers dans l'ordre:
404CTF{exfiltration.py,flag.txt,hallebarde.png,super-secret.pdf}