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 --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…
Maintenant, on va créer une machine virtuelle avec VirtualBox…
On ne crée pas de disque dur, mais on ajoute le disque VDI déjà monté à la place…
Maintenant, on démarre la VM….
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.
On appuie sur la touche « e » pour éditer les paramètres de démarrage…
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« …
Maintenant, on fais un petit « ctrl + x » pour démarrer…
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…
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
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
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…
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….
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…