Outils d'utilisateurs

Outils du Site


ndhquals2015:bpythonastic

Bpythonastic (Forensic300)

lien pour télécharger l'archive : http://repo.zenk-security.com/ctfs/ndh2k15/Bpythonastic.tar.gz

Après avoir extrait l'archive, on se retrouve face à un fichier “chall.raw”.
On comprend rapidement que ce fichier est un dump mémoire d'une machine tournant sur linux. En effet, “dump.raw” contient plein de fichiers de différentes sortes et un coup de string nous donne la version exacte de la distribution linux utilisée :

$ strings chall.raw | grep "Linux version"

Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze6) (jmm@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Tue May 13 16:34:35 UTC 2014

Volatility, depuis sa version 2.2 supporte les dumps mémoires linux à condition de lui fournir le bon profile (donc dans notre cas le profile Debian 2.6.32-5-amd64).

Cette page explique bien comment créer un profile : https://code.google.com/p/volatility/wiki/LinuxMemoryForensics

Ayant eu la flemme d'en créer un, j'ai cherché sur le net le profile correspondant au dump et … c'est dans les répos d'ubuntu que j'ai trouvé le st graal : http://packages.ubuntu.com/trusty/utils/volatility-profiles !

Dans cette archive on trouve pas mal de profile dont “_Debian_Squeeze_2.6.32-5-amd64_.zip”. Parfait !

On copie le profile zippé dans le répertoire : volatility/plugins/overlays/linux/ puis on vérifie si il est bien reconnu par volatility :

$ ./vol.py --plugins=profiles --info | head

Volatility Foundation Volatility Framework 2.4


Profiles
--------
Linux_Debian_Squeeze_2_6_32-5-amd64_x64      - A Profile for Linux _Debian_Squeeze_2.6.32-5-amd64_ x64

Good, on peut enfin analyser le dump mémoire, on a plusieurs commandes à disposition. Pour avoir la liste des commandes on tape :

$ ./vol.py chall.raw --profile=Linux_Debian_Squeeze_2_6_32-5-amd64_x64 -h | grep linux_

on va regarder les dernières commandes tapées dans le bash :

$ ./vol.py -f chall.raw --profile=Linux_Debian_Squeeze_2_6_32-5-amd64_x64 linux_bash

[...]
1852 bash 2015-03-19 13:59:05 UTC+0000 bpython                                                        
1852 bash 2015-03-19 13:59:34 UTC+0000 emacs chall.py                                                 
1852 bash 2015-03-19 13:59:47 UTC+0000 bpython

Allons chercher emacs ou bpython dans la liste des processus :

$ ./vol.py -f chall.raw --profile=Linux_Debian_Squeeze_2_6_32-5-amd64_x64 linux_pstree

[...]
......bpython        2364            0

[...]

On ne trouve pas emacs, mais on trouve le processus bpython. J'imagine que les données intéressantes doivent se trouver dans le heap, on va chercher l'adresse du heap dans ce processus :

$ vol.py -f chall.raw --profile=Linux_Debian_Squeeze_2_6_32-5-amd64_x64 linux_proc_maps -p 2364

[...]
2364        0x1a36000        0x2080000 rw-                0x0     0     0      0 [heap]
[...]

On dump la mémoire du processus :

$ ./vol.py -f chall.raw --profile=Linux_Debian_Squeeze_2_6_32-5-amd64_x64 linux_dump_map -p 2364 --dump-dir=.

Un coup de strings :

$ strings task.2364.0x1a36000.vma

[...]
>>> from chall import *
>>> flag=Challenge()
>>> flag=base64.b64encode(pickle.dumps(flag))
>>> print flag
KGljaGFsbApDaGFsbGVuZ2UKcDAKKGRwMQpTJ2ZsYWcnCnAyClMnYTYzOWEyMWE0YTc0NzAzZmEwNDJkNjE3NjgxYWE0NGJiNGQxYzA4YmM1ZmJmN2VmZDZiNDU1ODJiMGYwZDQwMycKcDMKc1MnaWQnCnA0CkkwCnNTJ2F1dGhvcicKcDUKUydZZ2dkcmFzaWwnCnA2CnNiLg==
[...]

On décode :

$ echo -n "KGljaGFsbApDaGFsbGVuZ2UKcDAKKGRwMQpTJ2ZsYWcnCnAyClMnYTYzOWEyMWE0YTc0NzAzZmEwNDJkNjE3NjgxYWE0NGJiNGQxYzA4YmM1ZmJmN2VmZDZiNDU1ODJiMGYwZDQwMycKcDMKc1MnaWQnCnA0CkkwCnNTJ2F1dGhvcicKcDUKUydZZ2dkcmFzaWwnCnA2CnNiLg==" | base64 -d

(ichall
Challenge
p0
(dp1
S'flag'
p2
S'a639a21a4a74703fa042d617681aa44bb4d1c08bc5fbf7efd6b45582b0f0d403'
p3
sS'id'
p4
I0
sS'author'
p5
S'Yggdrasil'
p6

On balance le hash sur https://crackstation.net/ qui nous trouve le mot de passe associé : Yougotit

ndhquals2015/bpythonastic.txt · Dernière modification: 2017/04/09 15:33 (modification externe)