Cracking de hashes
Resuminho
Comandos mais utilizados
Indentificando o algorítimo dos hashes
Recomendo sempre fazer uma identificação do hash que estamos trabalhando e temos duas ferramentas que podem nos auxiliar com isso, sendo elas:
hash-identifier <hash>
e
hashid <hash>
Fontes de algorítimos suportados (hashcat e john)
Uma vez identificado o hash, podemos consultar algumas fontes para quebrarmos esses hashes:
Lista de algorítimos suportados pelo JohnThe Ripper
Lista de algorítimos suportados pelo Hashcat
Pra dar agilidade pra quem está estudando, separei alguns algorítimos de hashes utilizados em máquinas Linux e o correspondente em cada ferramenta:
Início Hash | Algorítimo | John The Ripper | Hashcat (Hash-Mode) |
---|---|---|---|
$1$ | MD5 | --format=raw-md5 | 500 |
$2a$ | Blowfish | --format=bf | 3200 |
$2y$ | Blowfish | --format=bf | 3200 |
$5$ | SHA-256 | --format=raw-sha256 | 7400 |
$6$ | SHA-512 | --format=raw-sha512 | 1800 |
$y$ | yescrypt | --format=crypt | Não implementado ainda** |
** Faço menção a essa discussão no github do hashcat
Palavras de um dos contribuidores do Hashcat :
"For those wondering why yescrypt hasn't been implemented yet - it's not dev laziness, it's just that yescrypt is by design extremely slow and inefficient to run on GPUs but faster on CPUs and given Hashcat is a GPU-oriented program, this is a little awkward. yescrypt is a very complex algorithm and Solar Designer is a major contributor to John the Ripper so he certainly knows how to make a difficult-to-crack algorithm. As Royce said, you can use John for now but also doesn't have GPU code so it'll be run on CPU (if you have the libraries for it)"
Em resumo: O desafio de fazer com que esse hash seja quebrado com um algorítimo que não é eficiente para quebras em GPUs, porém é mais rápido de ser processado em CPUs. Por enquanto utilizar o John The Ripper mesmo.
Comandos John The Ripper
Utilizando John The Ripper para quebrar hashes de senhas
Aqui é importante ressaltar que para que o john reconheça automaticamente os hashes de senha, o parâmetro informado deve ser o "--wordlists=" ou "-w=", caso contrário é necessário o parâmetro --format também.
Básico:
john -w=/usr/share/wordlists/rockyou.txt hash.txt
As vezes o john não encontra um algorítimo que está presente no hash dentro do arquivo hash.txt, então temos de informá-lo da seguinte maneira, (exemplo):
john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
unshadow linux hashes
É necessário esse passo antes de colocar o shadow para quebrar, caso contrário, não funcionará.
unshadow /etc/shadow /etc/shadow > hashes.john
john --format=sha256crypt -w /usr/share/wordlists/rockyou.txt hashes.txt
ntlmv2
john --format=netntlmv2 --wordlist=wordlist.lst HTTP-NTLMv2-10.12.23.100.txt
john --incremental hashes-3.des.txt
zip
zip2john bank_account.zip > zip.hashes
john --wordlist=/usr/share/wordlists/rockyou.txt zip.hashes
Tutorial de regras
source:https://www.openwall.com/john/doc/RULES.shtml https://www.gracefulsecurity.com/custom-rules-for-john-the-ripper/ https://www.gracefulsecurity.com/custom-rules-for-john-the-ripper-examples/
Editando este arquivo, podemos inserir regras para mutar a a wordlist e assim conseguir uma wordlist melhorada:
sudo nano /etc/john/john.conf
Comandos Hashcat
Utilizando Hashcat para quebrar hashes de senhas
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt