DISCLAIMER: DO NOT EXECUTE THIS PROCESS WITHOUT EXPLICIT APPROVAL FROM THE SYSTEM OWNERS. I AM NOT ENDORSING OR APPROVING ANY ILLEGAL ACTIVITY WHICH COULD BE ACCOMPLISHED FOLLOWING THESE STEPS
An older friend forgot his computer password; asked me for help.
I booted the machine, and saw an email address where the Windows 10 username normally would be; my first thought was “oh, great; this is a Microsoft Online joined computer, password recovery probably won’t happen”
I did a little research, and found some evidence that suggests my seemingly outdated knowledge about passwords being stored in the SAM seems to still stand. However, Windows 10 Anniversary Update changed the encryption algorithm used on the SAM: https://twitter.com/gentilkiwi/status/762465220132384770
This algorithm change broke my normal tool (OPHCRACK), since it was unable to read the NTLM hashes from the SAM. SAM encryption caused OPHCRACK to incorrectly read every account hash as
31d6cfe0d16ae931b73c59d7e0c089c0. So, I copied the SAM and SYSTEM files (at C:\Windows\System32\config) from the target machine to my desktop for additional processing.
Mimikatz has a module `lsadump::sam` which accepts parameters for offline SYSTEM and SAM decryption. Easy command line:
lsadump::sam /system:c:\users\charles\documents\system /sam:c:\users\charles\documents\sam
This returned decrypted NTLM hashes for easy cracking.
I decided to try a new tool here to crack the plain text password from the NTLM hashes: Hashcat. There’s a Windows 64bit compiled version (I know, I know don’t run random binaries…) which made it easy to get cracking quickly.
I copied the hash from the output of Mimikaz into a text file called
hashes.txt and ran the command
.\hashcat64.exe -m 1000 -a 3 -O -o pass1.txt .\hashes.hash
My 10 year old computer cracked the Microsoft Online account NTLM Windows 10 password hash in ~8 minutes. It was two dictionary words and a two-digit number for a total of 8 characters. I was using brute-force in this scenario, so the fact that dictionary words were used is of no consequence. Had I been using a dictionary, the attack would have likely concluded sooner.
Just for fun, I generated a new NTLM hash, but replacing vowels with numbers (
1 and the
3 and so fourth), the attack took the same amount of time.
import hashlib print hashlib.new('MD4', 'password'.encode('utf-16le')).hexdigest()