Compreender a Estrutura de Comandos do Hashcat

Kali LinuxBeginner
Pratique Agora

Introdução

Hashcat é uma ferramenta poderosa e versátil para recuperação de senhas. Para utilizá-la de forma eficaz, você deve primeiro entender sua estrutura de linha de comando. Um único comando Hashcat é composto por vários componentes chave que dizem ao programa exatamente o que quebrar e como fazê-lo.

Neste laboratório, você aprenderá a estrutura fundamental de um comando Hashcat. Construiremos um comando completo e funcional peça por peça, cobrindo os cinco componentes essenciais: o executável, o tipo de hash, o modo de ataque, o arquivo de hash de entrada e a lista de palavras de entrada. Ao final, você será capaz de construir comandos Hashcat básicos para ataques baseados em dicionário.

Identificar os Componentes Principais de um Comando Hashcat

Nesta etapa, identificaremos a sintaxe básica de um comando Hashcat. Compreender essa estrutura é o primeiro passo para usar a ferramenta.

Um comando Hashcat típico segue este padrão:

hashcat [opções] arquivo_hash [lista_de_palavras/máscara]

Vamos detalhar esses componentes:

  • hashcat: Este é o nome do próprio programa executável.
  • [opções]: Estas são flags que modificam o comportamento do programa. As opções mais críticas são -m para o tipo de hash e -a para o modo de ataque, que abordaremos nas próximas etapas.
  • arquivo_hash: Este é o caminho para o arquivo que contém o hash ou os hashes que você deseja quebrar.
  • [lista_de_palavras/máscara]: Este é o caminho para um arquivo de entrada, como uma lista de palavras para um ataque de dicionário, ou um padrão de máscara para um ataque de força bruta.

Para começar, vamos visualizar o menu de ajuda integrado para ter uma noção da ferramenta. Este comando lista todas as opções e informações disponíveis.

Execute o seguinte comando no seu terminal:

hashcat --help

Você verá uma longa saída detalhando todos os recursos do Hashcat. Faremos referência a essas informações nas próximas etapas.

hashcat (v6.2.6) starting in help mode

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

...
-a,  --attack-mode              | Num    | Attack-mode, see references below.
-m,  --hash-type                | Num    | Hash-type, see references below.
...

Agora que entendemos a estrutura básica, podemos começar a construir nosso comando.

Especificar o Tipo de Hash com a Flag -m

Nesta etapa, você aprenderá como especificar o tipo de hash alvo. O Hashcat suporta centenas de algoritmos de hashing diferentes, e você deve informar qual deles está tentando quebrar. Isso é feito usando a flag -m seguida por um código numérico.

Nosso ambiente de laboratório preparou um arquivo chamado hashes.txt que contém um hash MD5. Para encontrar o código correto para MD5, você pode pesquisar na saída do hashcat --help.

Use o comando grep para filtrar o texto de ajuda por "MD5":

hashcat --help | grep MD5

A saída mostrará todos os tipos de hash relacionados ao MD5, juntamente com seus códigos correspondentes.

      0 | MD5                                            | Raw Hash, Salted and/or Iterated
   10 | md5($pass.$salt)                                 | Raw Hash, Salted and/or Iterated
   20 | md5($salt.$pass)                                 | Raw Hash, Salted and/or Iterated
...

Como você pode ver, o código para um hash MD5 padrão é 0. Agora podemos adicionar isso ao nosso comando. O comando atualmente se parece com isto:

hashcat -m 0 ...

Na próxima etapa, especificaremos o modo de ataque.

Especificar o Modo de Ataque com a Flag -a

Nesta etapa, você aprenderá como definir o modo de ataque usando a flag -a. O modo de ataque informa ao Hashcat qual método usar para quebrar a senha.

O Hashcat oferece vários modos de ataque, mas os mais comuns são:

  • 0: Straight (Ataque de dicionário) - Compara hashes com uma lista de palavras.
  • 1: Combination - Combina palavras de dois dicionários diferentes.
  • 3: Brute-force (Ataque de máscara) - Tenta todas as combinações possíveis de caracteres com base em um padrão definido (máscara).

Para este laboratório, realizaremos um ataque Straight (dicionário), portanto, usaremos o modo de ataque 0. Você pode encontrar a lista de todos os modos de ataque no menu de ajuda.

Vamos usar o grep novamente para encontrar a seção "Attack-Modes":

hashcat --help | grep "Attack-Modes" -A 10

A flag -A 10 instrui o grep a mostrar as 10 linhas após a correspondência, fornecendo a lista completa.

- [ Attack-Modes ] -

  ## | Mode
 ===+======
  0 | Straight
  1 | Combination
  3 | Brute-force
  6 | Hybrid dict + mask
  7 | Hybrid mask + dict

Agora identificamos nosso modo de ataque. Vamos adicioná-lo ao nosso comando, que agora se torna:

hashcat -m 0 -a 0 ...

Em seguida, forneceremos o arquivo que contém o hash que queremos quebrar.

Fornecer o Arquivo de Hash de Entrada

Nesta etapa, você especificará o arquivo de entrada que contém o hash a ser quebrado. Este argumento vem após as opções.

O script de configuração para este laboratório já criou um arquivo chamado hashes.txt em seu diretório atual (~/project). Este arquivo contém um único hash MD5.

Vamos visualizar o conteúdo deste arquivo usando o comando cat:

cat hashes.txt

Você deverá ver a seguinte saída:

5f4dcc3b5aa765d61d8327deb882cf99

Este é o hash que estaremos quebrando. Para adicioná-lo ao nosso comando, simplesmente colocamos o nome do arquivo após as opções. Nosso comando agora se parece com isto:

hashcat -m 0 -a 0 hashes.txt ...

A peça final é fornecer a lista de palavras para o nosso ataque de dicionário.

Fornecer a Lista de Palavras ou Máscara de Entrada

Nesta etapa final, você fornecerá o último componente necessário para o nosso ataque de dicionário: a lista de palavras (wordlist). Uma lista de palavras é um arquivo de texto simples onde cada linha é uma senha potencial.

O ambiente de laboratório inclui uma lista de palavras simples chamada wordlist.txt. Vamos examinar seu conteúdo:

cat wordlist.txt

A saída será:

test
hello
password
123456

Esta lista de palavras será usada pelo Hashcat para testar contra o hash. O arquivo da lista de palavras é o último argumento em nosso comando.

Agora, vamos montar e executar o comando completo:

hashcat -m 0 -a 0 hashes.txt wordlist.txt

O Hashcat iniciará. Como nosso hash e lista de palavras são muito simples, ele terminará quase instantaneamente. A saída mostrará o status da sessão de quebra.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5f4dcc3b5aa765d61d8327deb882cf99
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   496.9 kH/s (0.00ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 4/4 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: test -> 123456
Hardware.Mon.#1..: Util: 99%
...

A linha Status...........: Cracked confirma o sucesso. Para ver a senha quebrada, você pode executar o mesmo comando novamente com a flag --show.

hashcat -m 0 -a 0 hashes.txt wordlist.txt --show

A saída exibirá claramente o hash e sua senha em texto plano correspondente:

5f4dcc3b5aa765d61d8327deb882cf99:password

Parabéns, você construiu e executou com sucesso um comando completo do Hashcat!

Resumo

Neste laboratório, você aprendeu a estrutura fundamental de comandos do Hashcat, construindo um comando do zero. Você quebrou com sucesso um hash MD5 usando um ataque de dicionário.

Agora você entende os cinco componentes principais de um comando básico do Hashcat:

  1. Executável: hashcat
  2. Tipo de Hash: Especificado com -m (por exemplo, -m 0 para MD5).
  3. Modo de Ataque: Especificado com -a (por exemplo, -a 0 para um ataque de dicionário).
  4. Arquivo de Hash: O arquivo contendo os hashes alvo (por exemplo, hashes.txt).
  5. Lista de Palavras/Máscara: A entrada para o ataque (por exemplo, wordlist.txt).

A estrutura final do comando que você aprendeu é: hashcat -m <tipo_hash> -a <modo_ataque> <arquivo_hash> <lista_palavras>. Este conhecimento fornece uma base sólida para explorar recursos mais avançados do Hashcat.