Como usar o software hashcat para explodir vários hashes

Zero, conhecimento básico

1. Função hash

A função hash é um termo coletivo para um tipo de função. A entrada desse tipo de função é qualquer dado binário e a saída é de comprimento fixo. Dados binários, este tipo de função tem as seguintes características:

  • Unidirecionalidade: É simples e rápido calcular a saída a partir da entrada, mas é matematicamente inviável inferir a entrada a partir da saída

  • Restrição de colisão: É extremamente difícil encontrar duas entradas diferentes com a mesma saída

Funções que satisfazem essas características podem ser chamadas de funções hash. Um determinado dado é usado como entrada da função hash e a saída é calculada. Essa saída é costumeiramente chamada de valor hash dos dados.

Uma das principais funções da função hash é armazenar senhas com segurança. Ela não salva a senha diretamente (ou seja, não armazena a senha em texto claro), mas salva o valor hash da senha. você só precisa calcular a senha de entrada novamente. Compare o valor hash com o valor hash da senha salva para saber se a senha está correta. Devido à unidirecionalidade da função hash e às restrições de colisão, mesmo que um invasor obtenha o valor hash da senha, é difícil conhecer a própria senha.

2.hashcat

O atacante obteve o valor hash da senha, não há realmente nenhuma maneira de saber a senha em si? Claro que não. Embora não seja matematicamente viável calcular diretamente a senha a partir do valor hash da senha, sabemos que a função hash é simples e rápida para calcular a saída a partir da entrada. Na pior das hipóteses, você pode tentar. As senhas que os humanos podem definir são as únicas. Essas, tente uma por uma, você ainda pode tentar se tiver sorte. A operação de tentar constantemente obter a entrada correspondente ao valor hash é chamada de explosão.

Com base nessa ideia, o hashcat surgiu. Diz-se que o hashcat nasceu para provar que explodir o hash é muito simples. O hashcat afirma ser a ferramenta de explosão de hash mais rápida do mundo e até suporta GPU e FGPA, se você tiver algum.


hashcat não é apenas rápido, mas também suporta profissionalmente mais de duzentos tipos de funções de hash, usando o comando:

 hashcat   - -help 

Você pode ver a lista de todas as funções de hash suportadas pelo hashcat, há muitas que não vou postar aqui.

hashcat está instalado no Kali por padrão e pode ser usado diretamente. Mas meu Kali está instalado no VirtualBox e sempre sinto que a máquina virtual é mais lenta, então quero usar o hashcat no host físico. Primeiro acesse o site oficial do hashchat para baixar o hashcat. Até agora, a versão mais recente é a v3.5.0, lançada em 05/04/2017. A partir da data da atualização, pode-se ver que o hashchat está cheio de vitalidade. Elimine o problema de compilação e baixe diretamente o pacote binário, que tem apenas 2,7 milhões, o que é muito pequeno em comparação com jogos que costumam custar dezenas de gigabytes.

Depois que o download for concluído, descompacte o hashcat e veja:

Tais arquivos são arquivos executáveis em linux e windows em 32 bits e 64 bits, respectivamente. Basta selecionar um deles de acordo com a situação do seu computador. Escolhi hashcat64.bin e, por beleza, adicionei uma linha no arquivo ~ /. bashrc:

 alias   hashcat = ' caminho para hashcat64.bin ' 

Após salvar, reabra o terminal virtual para fazer com que o arquivo ~ /. bashrc entre em vigor. Desta forma, não importa onde você esteja, basta inserir o comando hashcat diretamente, sem mudar de diretório ou inserir o feio "64.bin", conforme mostrado na figura abaixo.

Bem, agora você pode começar a explodir vários hash usando o hashcat.

1. Explosão md5

md5 deve ser uma das funções hash mais famosas e amplamente utilizadas. Primeiro use Python para gerar vários valores md5 para explosão. O código é o seguinte:

     import   hashlib 
    senhas   =   [' 123123 ',   ' bond007 ',   ' xxxxxx ',   ' *H@ & (NT*@BR#^ '] 
    Para   senha   em   senhas: 
        md5   =   hashlib.md5 () 
        md5.update (senha) 
        print   md5.hexdigest () 

O código acima calcula os valores hash das quatro strings respectivamente, e o resultado de saída é:

     4297f44b13955235245b2497399d7a93 
    cbdb7e2b1ed566ceb796af2df07205a3 
    dad3a37aa9d50688b5157698acfd7aee 
    d77db958c179bbffae04b2b908b75c26 

Salve a saída no arquivo md5.hash, um valor hahs por linha. Em seguida, use o hashcat para explodir esses valores de hash. O comando é o seguinte:

     hashcat   -w   3   -a   0   -m   0   - -remove   -o   md5.out   md5.hash   wordlist.dic 

o parâmetro-w é usado para especificar os modos de trabalho, existem quatro, conforme mostrado na tabela abaixo:

N Desempenho Tempo de execução Consumo de energia Impacto na área de trabalho
1 Baixo 2 ms baixo mínimo
2 padrão 12 ms econômico perceptível
3 alto 96 ms alto sem resposta
4 pesadelo 480 ms insano sem cabeça

O parâmetro-a é usado para especificar o modo de ataque, o significado de 0 é direto e contínuo, ou seja, explodir com um dicionário de senhas, existem cinco valores para-a, conforme mostrado na tabela a seguir:

N modo
0 reto
1 combinação
3 força bruta
6 lista de palavras híbrida + máscara
7 máscara híbrida + lista de palavras

-m Usado para especificar o hash a ser explodido A função hash do valor, 0 significa que a função hash é md5, e os outros valores são mostrados na tabela a seguir:

N nome categoria
0 MD5 Raw Hash
300 MySQL4.1/MySQL5 Servidor de banco de dados
1000 NTLM Sistemas operacionais
1800 sha512crypt $6$, SHA512 (Unix) Sistemas operacionais
2611 vBulletin < v3.8.5 Fóruns, CMS, comércio eletrônico, estruturas

Esta tabela é muito longa. Aqui mostrarei apenas algumas funções de hash envolvidas neste artigo. Você pode ver todas com o parâmetro – ajuda. o significado do parâmetro

– remover é que se um determinado valor de hash for explodido com sucesso, remova o valor de md5.hash. o parâmetro

-o é seguido de um nome de arquivo, indicando onde os resultados da explosão são salvos.

Os dois últimos parâmetros md5.hash e wordlist.dic são o valor hash e o dicionário de senhas a serem explodidos respectivamente. O valor hash e o dicionário de senhas são ambos um por linha. O conteúdo em md5.hash foi calculado pelo Python. Se você não tiver um dicionário de senhas apropriado em mãos, pode usar O comando:

     wget   -O   wordlist.dic   https://samsclass.info/123/proj10/500_passwords.txt

下载一个。现在完事具备,按下回车,结果华丽地报错:(

  clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

Provavelmente falta algum ambiente operacional, então instale-o. Eu instalei essas coisas no total:

     sudo   apt-get   install   gcc   make   p7zip-full   git   lsb-core 
    wget   http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
    tar   -xvf   opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
    cd   opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 
    sudo  . /install.sh 

Se a velocidade da Internet for boa, será instalado em pouco tempo. O primeiro comando relatou um erro:

     /sbin/ldconfig.real:   /usr/lib/nvidia-375/libEGL.so.1   é   não   um   simbólico   link 
    /sbin/ldconfig.real:   /usr/lib32/nvidia-375/libEGL.so.1   é   não   um   simbólico   link 

Mas não parece afetar nada, apenas ignore. Depois de instalá-los, pressione Enter novamente e execute o comando que originalmente relatou o erro. Descobri que não houve outro erro e a execução foi concluída em um piscar de olhos. Após a execução do comando, verifique o conteúdo dos arquivos md5.hash e md5.out e descobri que apenas um hash resta em md5.hash. Os três hash que foram explodidos com sucesso foram transferidos para o arquivo md5.out. md5.out Existem três valores de hash e seus valores originais, conforme mostrado na figura abaixo:

2. Explodir o hash da senha de login do Windows7

O valor hash da senha de login do Windows é salvo no arquivo SAM, SAM é a abreviatura de "security account manager". Normalmente, ele está localizado em

     C: \Windows\system32\config\SAM 

O arquivo SAM é protegido pelo Windows e não pode ser lido diretamente. Encontre uma máquina virtual do Windows 7, crie um novo usuário administrador chamado hashcat e defina uma senha. Baixe e descomprime o SAMInside no Windows 7 e execute-o com permissões de administrador. Em seguida, clique em File- > Import Local Users vis Scheduler, conforme mostrado na figura abaixo:

Depois disso, o SAMInside pode "não responder", mas não importa, espere pacientemente por alguns segundos, o SAMInside leu o hash que queremos de acordo com as expectativas, conforme mostrado na figura abaixo:

Selecione o usuário "hashcat" cuja senha queremos explodir, pressione Ctrl +5 para copiar NT-hash e, em seguida, retorne ao Ubuntu com o hashcat instalado, use o seguinte comando para salvar o valor do hash copiado no arquivo win7.hash:

     echo   356CEAE0C89FB65ED6D6AA7A445C4CE5   {> 
     hashcat   -w   3   -a   0   -m   1000   - -remove   -o   win7.out   win7.hash   wordlist.dic 

A execução foi concluída após um momento. Verifique o arquivo win7.out e descobri que a explosão foi bem-sucedida. A senha de login do usuário hashcat é rush2112:

     werner@Yasser: ~ /hashcat$   cat   win7.out 
    356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112 

Para obter o arquivo SAM, consulte "Como exportar a série hash do Windows 1". O seguinte registra meu processo de leitura do arquivo SAM na máquina virtual Windows 7.

Se for uma máquina física, use o Win PE para iniciar a máquina e ler o arquivo SAM no disco. A minha é uma máquina virtual e você pode ler os arquivos no disco virtual montando os arquivos do disco virtual no sistema de arquivos. A máquina virtual que estou usando é a VirtualBox, que pode ser feita usando o comando vdfuse. Se você não tiver vdfuse, você precisa instalar o virtualbox-fuse primeiro:

     sudo   apt-get   install   virtualbox-fuse 

Você também pode baixar o pacote de instalação do virtualbox-fuse e instale-o você mesmo.

Após a conclusão da instalação, há o comando vdfuse, que pode iniciar o mapeamento e montagem do disco virtual:

     mkdir   -p   ~ /vmdisk 
    sudo   vdfuse   -t   vmdk   -f   Win7Pro32.vmdk   ~ /vmdisk/ 

Depois de executar esta etapa, verifique o diretório ~ /vmdisk, que contém três arquivos: EntireDisk, Partition1 e Partition2, novo diretório:

     mkdir   -p   ~ /vmdisk_en 
    mkdir   -p   ~ /vmdisk_1 
    mkdir   -p   ~ /vmdisk_2 

Use o comando mount para montar os três arquivos EntireDisk, Partition1 e Partition2 respectivamente:

     sudo   mount   ~ /vmdisk/EntireDisk       ~ /vmdisk_en 
    sudo   mount   ~ /vmdisk/Partition1       ~ /vmdisk_1 
    sudo   mount   ~ /vmdisk/Partition2       ~ /vmdisk_2 

descobriu que a montagem do disco inteiro falhou, o conteúdo no Partition1 não é o que eu queria, o Partition2 é o arquivo na máquina virtual do Windows 7, exatamente o que eu queria. Copie nosso arquivo SAM de destino do vmdisk_fs:

     cp   ~ /vmdisk_2/Windows/System32/config/SAM  . / 

A propósito, copie também o arquivo SYSTEM:

     cp   ~ /vmdisk_2/Windows/System32/config/SYSTEM  . / 

Veja o conteúdo do arquivo SAM, conforme mostrado na figura abaixo, não é um arquivo de texto simples, é realmente o estilo do Windows,

Bem, embora o arquivo SAM tenha sido aberto com sucesso, ainda não conseguimos o hash. O que devo fazer se mudarmos a seguir? Você só pode usar ferramentas para analisar o conteúdo do arquivo SAM. Coloque o arquivo sam e o arquivo sistema no Kali e execute o comando:

     samdump2   -o   sam.hash   SYSTEM   sam 

Em seguida, verifique sam.hash e você também pode ver o valor hash da senha de login de cada usuário. Cada linha no arquivo sam.hash é um usuário, e o formato de cada linha é:

     Nome do usuário: RID:LM-hash value: NTLM-hash value 

Observe que este formato é o formato de saída do comando samdump2, não o "formato de senha hash no Windows".

3. Explode a hash da senha de login do linux

Primeiro, você precisa ter um computador executando o sistema linux. Isso é fácil de dizer, basta uma máquina virtual. Em seguida, execute o seguinte comando para adicionar um novo usuário e definir uma senha para nossa explosão:

     sudo   adduser   justforfun 

O valor hash da senha de login do usuário no linux é armazenado no arquivo/etc/shadow (nota: não é/etc/passwd), use o seguinte comando para visualizar o valor hash da senha de login do novo usuário:

 test@test-VirtualBox: ~ $   sudo   tail   -n   1   /etc/shadow 
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7::: 

O comando tail é usado para ler as últimas linhas de um arquivo, o padrão é de 10 linhas, especificando o número de linhas com o parâmetro-n. O usuário que acabamos de criar está naturalmente na última linha, então use tail-n 1 para ler. O resultado da leitura são os dados divididos por ":". A primeira parte é o nome de usuário "justforfun" e a segunda parte é o valor hash da senha. As outras partes não precisam ser preocupadas neste artigo. Concentramos-nos na segunda parte.

"$6$" começando com

significa que o tipo de função hash usada é SHA-512. Exceto "$6$", no linux, "$1$" refere-se a MD5, "$2a$" refere-se a Blowfish, "$2y$" refere-se a Blowfish (manuseio correto de caracteres de 8 bits), "$5$" Refere-se a SHA-256, consulte Wikipedia: passwd para obter detalhes. Além disso, o arquivo/etc/login.defs também explica o algoritmo hash.

A parte "0fokwg59" que começa com "$6$" e precede o próximo "$" é sal. O que é sal? Baidu sabe que a resposta do CNB2009 à pergunta " Qual é o valor de sal md5 " é simples e fácil de entender:

Simplificando, é uma forma de fazer com que a mesma senha tenha valores de hash diferentes. O meio é salinização. O próprio MD5 é irreversível, mas atualmente existem muitos bancos de dados na Internet que suportam anti-consulta. Se o banco de dados de senhas do usuário for vazado acidentalmente, os hackers podem obter a senha do usuário por meio de anti-consulta ou usar códigos hash que aparecem com maior frequência no banco de dados (ou seja, muitas pessoas usam) para hackear com força bruta (porque geralmente é uma senha fraca). O valor do sal é um valor aleatório adicional adicionado durante o processo de hash da senha. Por exemplo, meu id é epilepsia e minha senha é 123456. Quando estiver armazenado no banco de dados, posso hash a string "123456/epilepsia". Ao verificar a senha, a string "(senha a ser verificada) /epilepsia" também é usada para verificação. Desta forma, quando a senha de outro idiota é 123456, valores de hash diferentes ainda podem ser construídos e verificados com sucesso. Neste momento, meu id é usado como valor de sal para realizar um hash complexo para a senha. Então.. O papel do valor do sal é reduzir as perdas causadas por vazamentos de banco de dados. Se seu RP é muito bom e você adivinhou que minha senha é 123456, não posso impedi-lo

Esta resposta é para md5, e o mesmo vale para outras funções de hash. A parte após o sal é o valor hash. Agora copie toda a segunda parte para o arquivo linux.hash, o conteúdo no linux.hash deve ser:

   $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0 

Em seguida, explode o hash da senha de login do linux com o seguinte comando:

     hashcat   -w   3   -a   0   -m   1800   - -remove   -o   linux.out   linux.hash   wordlist.dic 

Depois de um momento, a explosão foi concluída, veja o resultado:

 werner@Yasser: ~ /hashcat$   cat   linux.out 
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321 

mostra que a explosão foi bem-sucedida.

4. Explodir a hash da senha de login do Mysql

Primeiro, você deve ter Mysql. Acontece que tenho isso na minha máquina virtual. Baidu pode saber que o valor hash da senha de login do Mysql é salvo no arquivo user.MYD. Onde está o arquivo user.MYD? Eu também não sei, apenas procure:

     test@test-VirtualBox: ~ $   sudo   find   /   -name   user.MYD 
    /var/lib/mysql/mysql/user.MYD 

encontrou. Está em/var/lib/mysql/mysql/user.MYD. Veja o conteúdo do arquivo:

     sudo   cat   /var/lib/mysql/mysql/user.MYD 

Não é um arquivo de texto simples e não tem muito a ver. Ainda pode-se ver que o valor hash da senha de login do usuário root é:

     6B825255FB466413D6B1B724644E23428C94BBCB 

Salve este valor no arquivo mysql.hash e use o seguinte comando para explodir o hash da senha de login do mysql:

     hashcat   -w { 

Depois de um momento, a explosão foi concluída, veja o resultado:

     werner@Yasser: ~ /hashcat$   cat   mysql.out 
    6b825255fb466413d6b1b724644e23428c94bbcb:viper 

Vê-se que a explosão foi bem-sucedida.

5. Explosão Discuz! Senha do fórum

Discuz! É um programa de fórum php bem conhecido na China e é amplamente utilizado. Agora vamos explodir o Discuz! O valor hash da senha do usuário. Primeiro você precisa encontrar o valor hash. Onde você pode encontrá-lo? Da Discuz, é claro! no banco de dados.

pode ser discutido! Onde está o banco de dados? Foi assim que resolvi, baixe a versão mais recente do Discuz em seu site oficial! Código-fonte, execute e instale, e você obterá o Discuz! Base de dados :smile:

Discuz! O nome padrão do banco de dados é ultrax. A tabela pre_ucenter_members armazena o valor hash da senha de login. "pre_" é o prefixo padrão e pode ser alterado durante a instalação. "ucenter_members" não mudará. Use a seguinte instrução sql para consultar o valor hash da senha de login:

     select   password,salt   from   pre_ucenter_members; 

Salvar os valores hash e sal no arquivo:

     echo   69bcba126b93c6f397983629a0f70553:c13fd9   >   discuz.hash 

O valor hash e o valor sal estão na mesma linha, divididos por ":". Finalmente, explode o hash da senha de login do Discuz com o seguinte comando:

     hashcat   -w   3   -a   0   -m   2611   - -remove   -o   discuz.out   discuz.hash   wordlist.dic 

Depois de um momento, a explosão foi concluída, veja o resultado:

     werner@Yasser: ~ /hashcat$   cat   discuz.out 
    69bcba126b93c6f397983629a0f70553:c13fd9:winter 

Vê-se que a explosão foi bem-sucedida.

6. Teste de dicionário grande

Até agora, usamos um dicionário pequeno com apenas 500 palavras. Leva apenas um momento de cada vez para explodir com sucesso vários hash. Você não acha estranho? Isso ocorre porque defini deliberadamente uma senha fraca no dicionário para praticar o uso do hashcat, caso contrário não faria as pessoas se sentirem mal se não pudessem expor. Na prática, é impossível ter tanta sorte. Vamos calcular casualmente o valor md5 de uma senha menos fraca, explodir com um grande dicionário, por um lado, tentar a sorte e, por outro lado, ver o quão rápido o hashcat pode ser.

Calcule primeiro o valor do md5:

     import   hashlib 
    md5   =   hashlib.md5 () 
    md5.update (" werner123456!!! ") 
    print   md5.hexdigest () 

A saída é:

     b17133f9abff287ed0546c1af2b171f7 

Em seguida, selecione um dicionário de tamanho de 10,5G contendo 940 milhões de senhas e comece a explodir:

     hashcat   -w   3   -a   0   -m   0   - -remove   -o   big.out   b17133f9abff287ed0546c1af2b171f7   big.dic 

Observe que quando há apenas um valor hash, você não precisa salvá-lo no arquivo, mas também pode escrevê-lo diretamente nos parâmetros da linha de comando. Comecei a explodir antes de dormir e acordei no dia seguinte para ver os resultados e descobri:

     Começou:   Qua   Jul   26   22:55:27   2017 
    parado:   quarta-feira   Jul   26   23:02:28   2017 

Acontece que levou apenas 7 minutos! Achei que levaria 7 horas e foi 60 vezes mais rápido do que eu esperava! Infelizmente, o valor hash não foi explodido com sucesso. Parece que "werner123456!!!" não está no dicionário de senhas. Parece que preciso preparar um dicionário de senhas de 100G, mas é muito inconveniente salvar e transferir um dicionário tão grande. Não há outra maneira? Claro, lembra-se do modo de ataque? Temos usado o modo "reto". A seguir, vamos examinar vários outros modos.

7. Resumo

Ao usar o hashcat para explodir o hash, a primeira coisa é encontrar o hash correto. Diferentes sistemas e diferentes softwares têm locais diferentes de armazenamento de hash e precisam encontrar com precisão o valor do hash. Venha; A segunda é determinar corretamente o tipo de hash, determinar se o hashcat suporta esse tipo de hash e selecionar o parâmetro-m correto, caso contrário é quase impossível ter sucesso; A terceira é que o dicionário de senhas é melhor. Se a explosão pode ser bem-sucedida no final, você ainda deve olhar para o dicionário. Embora o maior dicionário de senhas não seja melhor, é melhor ser maior. O hashcat também é conhecido por sua velocidade. Dicionários grandes não são um problema para o hashcat. Aqui está registrado um dicionário melhor: portões de vazamento anteriores + coleção de dicionários de senhas fracas comumente usadas. 7Z , a senha de descompressão é: anywlan. Além disso, se você coletar muitos dicionários pequenos, você pode mesclar, classificar e desduplicar os dicionários pequenos para obter um dicionário grande para a explosão do hashcat. Se os pequenos dicionários estiverem no mesmo diretório, você pode usar um comando:

         cat   *   |   sort   |   uniq   >   Merge.dic 

E se os pequenos dicionários forem organizados por categorias e distribuídos em diretórios de várias camadas? Obviamente não é possível usar apenas o comando cat, mas na verdade é necessário apenas um comando. Supondo que todos os pequenos dicionários sejam armazenados no diretório MyDictionary, o comando pode ser escrito da seguinte forma:

         find  . /MyDictionary   -type   f   -exec   cat   {}   \;   |   sort   |   uniq   >   Merge.dic 

Artigo anterior:Que tipos de arquivos criptografados podemos decifrar?
A seguir:Vários modos de ataque do hashcat
  • Concentre-se em Word, Excel, PPT, PDF, RAR, ZIP, 7Z, pacote compactado, desbloqueio e descriptografia de arquivos criptografados do escritório
  • Nós fornecemos aos usuários recuperação de senha de pacote de compactação de arquivo de alta qualidade, recuperação de senha de palavra desbloqueada em PDF
  • Direitos autorais © Document Password Recovery Master Plataforma de descriptografia on-line