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.
md5sum <arquivo>
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).
user@xubuntu:~$ echo -n "teste123" | base64
dGVzdGUxMjM=
user@xubuntu:~$ echo -n "dGVzdGUxMjM=" | base64 -d
teste123
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.
user@xubuntu:~/Desktop$ cat teste.png | base64 > arquivoCodificado
user@xubuntu:~/Desktop$ head -n 5 arquivoCodificado
iVBORw0KGgoAAAANSUhEUgAADwAAAAQ4CAIAAAA7d75QAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4
nOzdeVwTd/o48Gdyh5AACYRL7nB4IKAcnohYq3grnrXtttLa2sOe/pRtu2W33W3t8d22aw9b3aqt
tepWq2Ct9QI8EbkEBeVQ7puEhDAJOeb3RyAGkiAoiNLn/Xr5eiWTyWeemXzyzMfhyWeIHWrvxLin
pMxvwr03MEQT95Kpub7HljPKv+YkbfwBJle/WRWzwVExfS9btSOy/m+w4eO2pMSj9lL/l8alrnOM
f3kvtfTsWP81siMJnOuFM3acnv7NT4988kVy+tYVr59ZP/Lpn6ljig8ufACBdiNXtxY+lxXAvQxb
user@xubuntu:~/Desktop$ cat arquivoCodificado | base64 -d > arquivoCodificado.png
user@xubuntu:~/Desktop$ head -n 5 arquivoCodificado.png
�PNG
�
IHDR;w�Ps��O� IDATx���y\w�8�gr�� �K�px ���X�x+�������Þ��m�e��m��ݶk[ݪ���V�`��<��P�0 9��G � (����z�z%��g��|�����g�j�ĸ���o½70D�����ǖ3ʿ�$m�&W�Y��Q1}/[�#��o��㶤ģ�R��ƥ�s�y/���X�5�# ��3v����O�|�Er����Y?�韩c�.|�v#W�>���
Identificando hashes
Existem alguns softwares que podemos utilizar para identificar os hashes, que são: hashid e hash-identifier. Basta utilizar
$ hash-id <hash>
$ hash-identifier
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH:
Ataques a hashes: Ferramentas
John
Usando o john dessa forma, ele irá tentar identificar qual é o tipo de hash.
john <arquivo com hash>
Para informar o formato do hash e passar uma wordlist.
john --format=Raw-MD5 <arquivo com hash> --wordlist=<wordlist>
Hashcat
A diferença do hashcat para outras ferramentas, é que ele permite utilizar a GPU para tentar descobrir o hash, automatizando o processo.
hashcat -m <modo hash> <arquivo com hash> <wordlist> --force
Last updated
Was this helpful?