Un nouveau challenge m’est apparu… Cette fois, pas de MySQL, mais du PostgreSQL….

Comment dumper une base de données PostgreSQL présente sur l’image disque d’un de nos suspects, donc en post-mortem?

Sachant que:

  • Nous n’avons pas la machine physique, juste une image.
  • Nous n’avons aucun mot de passe.
  • Nous savons que la machine est une Ubuntu 16.04 LTS.
  • Nous savons que la version de PostgreSQL est la 9.5.

Je vous fais grâce de toute la partie échec de mes essais via Docker. Le problème est que la base de données à été crée avec une langue particulière, je n’ai pas réussi passer outre l’erreur « LC_COLLATE locale en_US », malgré la modification du Dockerfile de postgreSQL.

Bon, étant un peu pressé par le temps, j’ai pris l’option forcené:

  • On va virtualiser le serveur,
  • casser le mot de passe root,
  • casser le mot de passe de PostgreSQL,
  • dumper les bases.

Virtualisation du serveur…

Aller, c’est parti. Pour commencer, on allume notre Tsurugi préféré et on va taquiner du « xmount« …

xmount command
xmount --in ewf ./image.E01 --out vdi --cache ./disk.cache /mnt/ewf1/

Notre image E01 est maintenant montée comme si c’était une image disque VDI pour VirtualBox, avec un fichier de cache pour simuler des autorisations d’écriture…

xmount command

Maintenant, on va créer une machine virtuelle avec VirtualBox…

virtualbox creation

On ne crée pas de disque dur, mais on ajoute le disque VDI déjà monté à la place…

virtualbox creation

Maintenant, on démarre la VM….

password failure

Cassage du mot de passe root…

Damned… J’ai pas le mot de passe. Aller… Premier pétage !

Redémarrons et stoppons le process au niveau du Grub.

root password bypass

On appuie sur la touche « e » pour éditer les paramètres de démarrage…

root password bypass

On cherche la ligne qui débute par « linux /boot/vmlinuz« . Regardez la fin il y a un petit « ro » qui me dérange…. Remplaçons le par un « rw » et demandons l’exécution de « /bin/bash« …

root password bypass

Maintenant, on fais un petit « ctrl + x » pour démarrer…

root password bypass

Remarquez le prompt… Un joli « #« , comme d’habitude, cela signifie qu’on est root.

Avec la commande « mount » je vérifie que le « / » est bien monté en « rw« , ce qui est le cas.

Il ne me reste plus qu’à modifier le mot de passe de l’utilisateur root avec la commande « passwd« .

Let’s redémarre again…

root password bypass

Et voilà, plus qu’à entrer le mot de passe que l’on a choisi à l’étape précédente et le tour est joué.

Aller. Connectons nous à PostgreSQL…

psql -h localhost -U postgres
postgresql password bypass

Cassage du mot de passe PostgreSQL…

J’ai toujours pas de mot de passe…. Second pétage… Allons éditer le fichier « pg_hba.conf ».

/etc/postgresql/9.5/main/pg_hba.conf
postgresql password bypass

A la toute fin de ce fichier, vous avez trois lignes de ce type:

host    all      postgres    127.0.0.1/32     md5

Il faut remplacer les valeurs « peers » et « md5 » par « trust« .

Ensuite, on redémarre le service…

postgresql password bypass

Ceci fait, on se connecte à PostgreSQL qui cette fois ne demande pas de mot de passe.

On en profite pour en mettre un si l’on veut grâce à la commande:

ALTER USER postgres with password 'new_password';

« \l » permet de lister les bases, tandis que « \c » permet de se connecter à une base.

Dump d’une base de données…

Aller, maintenant, on va dumper….

postgresql dump

On change d’utilisateur, on passe de « root » à « postgres », puis on se rend dans le répertoire /tmp/ ou l’on est certain d’avoir des droits en écriture.

Plus qu’à dumper avec la commande:

pg_dump postgres > postgres.bak

Bien sûr, on remplace « postgres » par la base a dumper… Ce fichier .bak est un dump complet, de type ASCII. Plus qu’à en faire ce que vous voulez…

Laisser un commentaire