Hashcat – Ferramenta Avançada de Recuperação de Senhas

Este post, é apenas um simple post, pois ainda não tenho domino totalmente do uso dessa ferramenta.

Estou escrevendo esse post apenas para comunicar as minhas experiências e nada mais.

O que é um Hash?

“Um hash (ou escrutínio) é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que “hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações”.

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.” fonte: http://pt.wikipedia.org/wiki/Hash

hash

Um função de hash que transforma nomes para inteiros de 0 até 15. Existe um colisão entre a chaves “John Smith” e “Sandra Dee”. fonte: http://pt.wikipedia.org/wiki/Hash

Hashcat tem várias versões:

Hashcat – que usa apenas o poder de processamento do processador da CPU, indicado para processar pequenas wordlists e hashlists.

Name Version md5sum Date
hashcat v0.38 16865cacd0da73b010c6da4501c0e1be 2011.12.18
User Manual v1.2 a2b1080a9b78c844dd9554991fb173bd 2011.08.09

Features

  • Multi-Threaded
  • Free
  • Multi-Hash (up to 24 million hashes)
  • Multi-OS (Linux & Windows native binaries)
  • Multi-Algo (MD4, MD5, SHA1, DCC, NTLM, MySQL, …)
  • SSE2 accelerated
  • All Attack-Modes except Brute-Force and Permutation can be extended by rules
  • Very fast Rule-engine
  • Rules compatible with JTR and PasswordsPro
  • Possible to resume or limit session
  • Automatically recognizes recovered hashes from outfile at startup
  • Can automatically generate random rules
  • Load saltlist from external file and then use them in a Brute-Force Attack variant
  • Able to work in an distributed environment
  • Specify multiple wordlists or multiple directories of wordlists
  • Number of threads can be configured
  • Threads run on lowest priority
  • 30+ Algorithms implemented with performance in mind

Screenshot

Attack-Modes

  • Straight *
  • Combination *
  • Toggle-Case
  • Brute-Force
  • Permutation
  • Table-Lookup

* accept Rules

Algorithms

  • MD5
  • md5($pass.$salt)
  • md5($salt.$pass)
  • md5(md5($pass))
  • md5(md5(md5($pass)))
  • md5(md5($pass).$salt)
  • md5(md5($salt).$pass)
  • md5($salt.md5($pass))
  • md5($salt.$pass.$salt)
  • md5(md5($salt).md5($pass))
  • md5(md5($pass).md5($salt))
  • md5($salt.md5($salt.$pass))
  • md5($salt.md5($pass.$salt))
  • md5($username.0.$pass)
  • md5(strtoupper(md5($pass)))
  • SHA1
  • sha1($pass.$salt)
  • sha1($salt.$pass)
  • sha1(sha1($pass))
  • sha1(sha1(sha1($pass)))
  • sha1(strtolower($username).$pass)
  • MySQL
  • MySQL4.1/MySQL5
  • MD5(WordPress)
  • MD5(phpBB3)
  • MD5(Unix)
  • SHA-1(Base64)
  • SSHA-1(Base64)
  • SHA-1(Django)
  • MD4
  • NTLM
  • Domain Cached Credentials
  • MD5(Chap)
  • MSSQL
  • SHA256
  • MD5(APR)
  • SHA512
  • SHA-512(Unix)

Se você tem um laptop, desktop ou servidor, sem placa de vídeo com um bom GPU, vale a pena tentar usar essa versão. Mas se você quer mais poder de processamento dessa ferramenta, você deverá usar tecnologia CUDA  e deverá ter uma boa placa de vídeo 3D ATI ou NVidia.

Deployment

Você precisará descompactar o arquivo hashcat-0.38.7z em uma pasta que você deseja usar com local para instalar o hashcat. Se você estiver usando um Ubuntu/Debian e derivados, você vai precisar instalar pacotes que fazem descompactação/compactação dos arquivos *.7z (unzip), para isso:

$ sudo apt-get install lbzip2 liblzma2 p7zip p7zip-full p7zip-rar -y

Uso

Para help

strider@storm:/vm02/pentest/oclHashcat/hashcat-0.38$ ./hashcat-cli64.bin –help

strider@storm:/vm02/pentest/oclHashcat/hashcat-0.38$ ./hashcat-cli64.bin –help
hashcat, advanced password recovery

Usage: ./hashcat-cli64.bin [options] hashfile [wordfiles|directories]

Startup:
-V,  –version                     print version
-h,  –help                        print help
–eula                        print eula

Logging and Files:
–remove                      enable remove of hash from hashlist once it is cracked
–quiet                       suppress output
–stdout                      stdout mode
–disable-potfile             do not write potfile
-r,  –rules-file=FILE             rules-file for hybrid-attack
-o,  –output-file=FILE            output-file for recovered hashes
–output-format=NUM           0 = hash:pass
1 = hash:hex_pass
2 = hash:pass:hex_pass
-e,  –salt-file=FILE              salts-file for unsalted hashlists
–debug-file=FILE             debug-file
–debug-mode=NUM              1 = save finding rule (hybrid only)
2 = save original word (hybrid only)
-p,  –seperator-char=CHAR         seperator-char for hashlists

Resources:

-n,  –threads=NUM                 number of threads
-c,  –segment-size=NUM            number of mb to cache from wordfile
-s,  –words-skip=NUM              skip number of words (for resume)
-l,  –words-limit=NUM             limit number of words (for distributed)

Attacks:
-g,  –generate-rules=NUM          number of self-generating rules
–generate-rules-func-min=NUM force number of functions per rule min
–generate-rules-func-max=NUM force number of functions per rule max
-a,  –attack-mode=NUM             number of attack-mode
0 = Straight *
1 = Combination *
2 = Toggle-Case
3 = Brute-Force
4 = Permutation
5 = Table-Lookup
* = for Hybrid-Attack use -r or -g

-m,  –hash-mode=NUM               number of hash-mode

0 = MD5                           200 = MySQL
1 = md5($pass.$salt)              300 = MySQL4.1/MySQL5
2 = md5($salt.$pass)              400 = MD5(WordPress)
3 = md5(md5($pass))               400 = MD5(phpBB3)
4 = md5(md5(md5($pass)))          500 = MD5(Unix)
5 = vBulletin < v3.8.5            600 = SHA-1(Base64)
6 = md5(md5($salt).$pass)         700 = SSHA-1(Base64)
7 = md5($salt.md5($pass))         800 = SHA-1(Django)
8 = md5($salt.$pass.$salt)        900 = MD4
9 = md5(md5($salt).md5($pass))   1000 = NTLM
10 = md5(md5($pass).md5($salt))   1100 = Domain Cached Credentials
11 = md5($salt.md5($salt.$pass))  1200 = MD5(Chap)
12 = md5($salt.md5($pass.$salt))  1300 = MSSQL
15 = vBulletin > v3.8.5
30 = md5($username.0.$pass)
31 = md5(strtoupper(md5($pass)))
100 = SHA1                         1400 = SHA256
101 = sha1($pass.$salt)            1600 = MD5(APR)
102 = sha1($salt.$pass)            1700 = SHA512
103 = sha1(sha1($pass))            1800 = SHA-512(Unix)
104 = sha1(sha1(sha1($pass)))
105 = sha1(strtolower($username).$pass)

Toggle-Case specific:
–toggle-min=NUM              number of alphas in dictionary minimum
–toggle-max=NUM              number of alphas in dictionary maximum

Brute-Force specific:
–bf-pw-min=NUM               password length minimum
–bf-pw-max=NUM               password length maximum
–bf-cs-buf=CHARS             charset for attack

Permutation specific:
–perm-min=NUM                number of chars in dictionary minimum
–perm-max=NUM                number of chars in dictionary maximum

Table-Lookup specific:
-t,  –table-file=FILE             table file
–table-min=NUM               number of chars in dictionary minimum
–table-max=NUM               number of chars in dictionary maximum

Para executar um exemplo e testar:

strider@storm:/vm02/pentest/oclHashcat/hashcat-0.38$ ./hashcat-cli64.bin examples/A0.M0.hash examples/A0.M0.word

Explicação dos Comandos:

./hashcat-cli64.bin  = é o binário executável do hashcat, que aceita apenas comandos em shell, na versão para CPU x86_64

examples/A0.M0.hash = é uma pasta de exemplos com arquivos contendo vários hashes (*.hash)

examples/A0.M0.word = é uma pasta de exemplos com arquivos contendo váriais senhas e palavras (*.word)

OBS: Antes da primeira execução, o hashcat exibe um EULA, qual você concorda digitando YES (em letra maiuscula) e aperta ENTER:
O Resultado é isso:

Continuação…
Repare no último hash da lista:
651e96f9b94e1a3a117eade5e226bd1e : y[N”%e?U{<k[`x<TlG U6Z
eu separei o simbolo de : (entre 26bd1e : y[N”%e?U{k ), mas na verdade estão juntos.
O significado é que o simbolo : seria uma divisão entre lado esquerdo e lado direito do resultado do processamento. O lado esquerdo são os hashes e o lado direito são strings em plain text
Esse é apenas um simples post, mas vou pesquisar mais e escrever mais sobre hashcat e suas outras versões nos próximos posts.
@firebitsbr