Cracking Passwords with Hashcat

Systems don't store original passwords, they store hashes. They look like this "f2477a144dff4f216ab81f2ac3e3207d". Hashing is a one way function, so you can't turn it back to password.

But you can make computer try every word in the dictionary, and tell if one matches. This article shows you how to do this with hashcat.

Introduction

Use of penetration testing techniques requires legal and ethical considerations. To safely use these tools, tactics and procedures, you might need to obtain contracts and permissions; and posses adequate technical skills. Check your local laws. To learn how to practice safely & legally, consider my penetration testing course.

Let's consider this easy hash 6b1628b016dff46e6fa35684be6acc96 . I'll tell you the answer in this article, so that you can easily test your environment. This test was done with Debian 11 Bullseye and requires basic command line skills.

Install Hashcat

Install the apps

$ sudo apt-get update
$ sudo apt-get -y install hashid hashcat wget

Create a new directory for our work

$ mkdir hashed
$ cd hashed

Get a big dictionary. Rockyou is probably the most popular

$ wget https://github.com/danielmiessler/SecLists/raw/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz
$ tar xf rockyou.txt.tar.gz
$ rm rockyou.txt.tar.gz

It's just one word after another

$ head rockyou.txt
123456
12345
123456789
password
iloveyou
princess
1234567
rockyou
12345678
abc123

With over 14 million words

$ wc -l rockyou.txt 
14344391 rockyou.txt

Identify Hash Type

Hashcat needs to know the type of the hash to crack, the number for the -m parameter. It's common to look at hashes really hard and compare them to 'hashcat --example-hashes'. However, there is an easy way

$ hashid -m 6b1628b016dff46e6fa35684be6acc96
Analyzing '6b1628b016dff46e6fa35684be6acc96'
[+] MD2 
[+] MD5 [Hashcat Mode: 0]
[+] MD4 [Hashcat Mode: 900]
...

In hashid, -m parameter shows the number that's used in the actual cracking, the hashcat parameter with the same name -m. Often, the right type is among top three candidates. If not, you can rule out many candidates based on where the hash was obtained (Windows, Linux...).

Let's try with md5, as it's a very common hash compared to md2 and md4.

Crack the Hash

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o solved

The command means

Part of Command Meaning
hashcat the hash cracking program we just installed
-m 0 type of the hash, the number we obtained from 'hashid' or 'hashcat --example-hashes'
'6b1628b016dff46e6fa35684be6acc96' the hash we want to crack. Put single quotes around it, as many hashes contain special characters.
-o solved save the solution as plain text to a new file "solved" in working directory

After a moment, hashcat is done. So what's the password?

$ cat solved 
6b1628b016dff46e6fa35684be6acc96:summer

So it's "summer". The time to hack outside with a laptop. Well done, hash cracked.

What Did Hashcat Say?

Let's quickly look at the output we got. I've only included the interesting lines here.

$ hashcat -m 0 '6b1628b016dff46e6fa35684be6acc96' rockyou.txt -o solved
...
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 6b1628b016dff46e6fa35684be6acc96
[..]
Speed.Dev.#1.....: 37401.1 kH/s (4.60ms)
Output Meaning
Status: Cracked We got the password, and it's stored in "solved"
Hash.Type: MD5 This is what we chose with 'hashcat -m 0 ...'
Hash.Target: 6b1628b016dff46e6fa35684be6acc96 The hash we gave when calling hashcat
Speed.Dev.#1: 37401.1 kH/s (4.60ms) How fast did it go? This is 37 million words tried per second

In this exercise, the correct word is in RockYou dictionary, and you will crack it. In some other exercise, you might get "Status: Exhausted" instead of "Cracked". That would mean that all words in the dictionary were tried, but none of them worked.

Where did the solution go?

If you said "-o solved", it's in that file. 'cat solved'.

If you already cracked it, but did not specify a file, you can see it with "--show":

$ hashcat -m 0 6b1628b016dff46e6fa35684be6acc96 rockyou.txt 
... INFO: All hashes found in potfile! Use --show to display them. ...

$ hashcat -m 0 6b1628b016dff46e6fa35684be6acc96 rockyou.txt --show
6b1628b016dff46e6fa35684be6acc96:summer

Can I Make It Go Faster?

Yes, just run it on your host OS, on real hardware and not a virtual machine. It will automatically detect your display adapter (GPU) and use that for a huge speed boost.

It seems to work well with NVidia proprietary drivers and CUDA support. (Yes, unfortunately NVidia drivers are not open source).

What Next?

Learn to write your own dictionaries.

Try an easy, beginner friendly CTF (capture the flag game).

Be safe, ethical and legal. Only work with you own hashes or given practice targets in CTFs.

Come to my penetration testing course to lean more.

Join my mailing list to hear about interesting events and tips.

Adminstrivia

This article has been updated after publishing.