Entendendo os Hashes

Se gerarmos o hash da string "teste123", temos alguns exemplos das saídas a seguir.

Exemplo em MD5
aa1bf4646de67fd9086cf6c79007026c
Exemplo em SHA 256
289160db0d9f39f9ae1754c4ec9c16f90b50e32e09c5fb5481ae642b3d3d1a36

Independente se está sendo gerado uma hash de uma única string, o hash sempre terá esses tamanhos fixos de acordo com o tipo.

Modos de uso

Armazenamento de senhas no banco de dados

As aplicações atualmente, armazenam as senhas dos usuários em formato de hash, pois uma vez que o hash é gerado, não é possível voltar o valor original, ou seja, ele é irreversível (one way). Para que a autenticação então aconteça, o que a aplicação faz é comparar o valor inserido pelo usuário, gerar o hash desse valor e comparar com o hash que já está salvo no banco de dados, se caso os hashes forem idênticos irá autenticar o usuário, caso contrário não irá.

Integridade

Alguns programas ou arquivos que baixamos em determinados sites, possui um checksum que gerado assim que ele foi criado. Isso garante que o conteúdo dentro desse programa esteja íntegro com base nesse hash gerado. Suponhamos que há outro site que disponibiliza esse mesmo arquivo ou programa, pode-se então tirar o checksum dele e comparar com o arquivo original para ver se os hashes são os mesmos. Se caso não for, esse programa foi modificado de alguma forma e com isso sabemos que ele não é íntegro, ou seja, não é confiável.

Gerando hashes

Para gerar os hashes, basta utilizar da seguinte forma. (Usando o MD5 e SHA256 como exemplos)

user@xubuntu:~$ echo -n "teste123" | md5sum
aa1bf4646de67fd9086cf6c79007026c  -

user@xubuntu:~$ echo -n "teste123" | sha256sum
289160db0d9f39f9ae1754c4ec9c16f90b50e32e09c5fb5481ae642b3d3d1a36  -

Se quisermos gerar um hash em MD5 de determinado arquivo, basta utilizar da seguinte forma.

One way x Two way

Uma vez que o hash é gerado, não é possível voltar o valor original, ou seja, ele é irreversível (one way), não existe um "decode" para o hash. Para "quebrar um hash" então, é necessário que haja uma wordlist com diversas possíveis senhas e sejam gerados os hashes dessas senhas, fazendo assim um bruteforce até descobrir se alguma das possibilidades bate de acordo com o hash verdadeiro.

No entanto, existem métodos de codificação, por exemplo base64, que é próprio para codificar e decodificar (diferente do hash).

Com isso, conseguimos passar um valor para codificar e se passarmos o resultado da codificação, é possível fazer o processo reverso, sendo assim two way.

Podemos também codificar arquivos com bas64 e depois reverter, fazendo virar um arquivo novamente.

Identificando hashes

Existem alguns softwares que podemos utilizar para identificar os hashes, que são: hashid e hash-identifier. Basta utilizar

Ataques a hashes: Ferramentas

John

Usando o john dessa forma, ele irá tentar identificar qual é o tipo de hash.

Para informar o formato do hash e passar uma wordlist.

Hashcat

A diferença do hashcat para outras ferramentas, é que ele permite utilizar a GPU para tentar descobrir o hash, automatizando o processo.

Last updated

Was this helpful?