ZenSecCTF Team

ZenSec CTF Team write up page

19 October 2021

Forensic - Docker Image

by Karzemrok

Description

I lost the password i use to encrypt my flag file. Could you retreive my flag ?

sudo docker pull mayfly277/sthack2021_docker_forensic

Fichier

Résolution

La première étape est de connaitre les différentes commandes docker utilisée lors de la construction de l’image.

Pour cela on peut le faire à la main ou en utilisant l’outil dive.

$ docker pull mayfly277/sthack2021_docker_forensic
$ docker save sthack2021_docker_forensic.tar

On peut lister les fichiers JSON:

$ tar -tvf sthack2021_docker_forensic.tar '*.json'     
-rw-r--r-- 0/0            2437 2021-09-09 15:40 df9bf87b22e3a6cb1e50a016f9add403c2024cd8dc82204f40979aa47ed58ed1.json
-rw-r--r-- 0/0             617 1970-01-01 01:00 manifest.json
$ tar xfO sthack2021_docker_forensic.tar 'df9bf87b22e3a6cb1e50a016f9add403c2024cd8dc82204f40979aa47ed58ed1.json' | jq '.history[] | .created_by' -r
/bin/sh -c #(nop) ADD file:d2abf27fe2e8b0b5f4da68c018560c73e11c53098329246e3e6fe176698ef941 in / 
/bin/sh -c #(nop)  CMD ["bash"]
/bin/sh -c apt update -y
/bin/sh -c apt install -y curl openssl
/bin/sh -c #(nop) COPY file:1a7183ad2543f172d82f35bd319cae411595c5fdfb76b1da1da6b6768ac3df6e in / 
/bin/sh -c echo -n $(curl -s https://pastebin.com/raw/ErwwdMja) | openssl enc -aes-256-cbc -iter 10 -pass pass:$(cat /pass.txt) -out flag.enc
/bin/sh -c rm /pass.txt

On voit dans les commandes la suppression du fichier pass.txt qui a servi dans la commande précédente au chiffrement d’un Pastebin via une commande OpenSSL.

On suppose donc qu’il a été ajouté grâce au COPY de l’étape d’avant.

Pour être sûr, il est possible de chercher le fichier pass.txt dans toutes les couches de l’image :

$ mkdir docker_image
$ tar xvf sthack2021_docker_forensic.tar -C docker_image
$ find docker_image -name layer.tar -exec tar xfO {} 'pass.txt' 2>/dev/null \;
MySupAAAS3cure_PassSSS

Le mot de passe est donc MySupAAAS3cure_PassSSS. Nous devons maintenant récupérer le fichier chiffré par OpenSSL.

$ find docker_image -name layer.tar -exec tar xfO {} 'flag.enc' 2>/dev/null \; > flag.enc

Il ne nous reste plus qu’à exécuter la commande OpenSSL de déchiffrement.

$ openssl aes-256-cbc -d -iter 10 -in flag.enc              
enter aes-256-cbc decryption password:
STHACK{08ae895ddfdcbdb5c8cfb848e7c7ae23}
<< Reverse - BreakThePass
Web - Online PDF Maker >>
tags: sthack2021 - forensic - ctf