Compreender os Modos Básicos do John the Ripper

Kali LinuxBeginner
Pratique Agora

Introdução

John the Ripper (JtR) é uma ferramenta poderosa e amplamente utilizada de auditoria de segurança de senhas e recuperação de senhas de código aberto. Pode ser utilizada por administradores de sistema para testar a força das senhas em seus sistemas e por profissionais de segurança para recuperar senhas perdidas. Compreender seus diferentes modos de operação é fundamental para utilizá-lo de forma eficaz.

Neste laboratório, você terá experiência prática com os modos básicos de cracking do John the Ripper. Você aprenderá a usar suas opções de ajuda e explorará seu comportamento padrão. Em seguida, mergulhará em seus quatro modos principais: Single Crack, Wordlist, Incremental e External mode, aprendendo o propósito e o uso básico de cada um.

Explore as Opções de Ajuda do John the Ripper

Nesta etapa, você começará explorando a documentação de ajuda integrada do John the Ripper. O menu de ajuda é um recurso essencial que fornece uma referência rápida para a sintaxe da ferramenta, opções de linha de comando e modos disponíveis.

Para visualizar a página principal de ajuda, basta executar o comando john com o flag --help. Isso exibirá um resumo das opções mais comuns e suas descrições.

Execute o seguinte comando no seu terminal:

john --help

Você verá uma saída detalhada listando várias opções. Preste atenção aos flags que especificam diferentes modos de cracking, como --single, --wordlist e --incremental.

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]
Copyright (c) 1996-2019 by Solar Designer and others
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]

--single                   "single crack" mode
--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin
--rules                    enable word mangling rules for wordlist mode
--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter
--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             new session [called NAME]
--status[=NAME]            print status of a session [called NAME]
--show[=LEFT]              show cracked passwords [if =LEFT, then uncracked]
--test[=TIME]              run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..]  [don't] load this (these) user(s) only
--groups=[-]GID[,..]       load users of this (these) group(s) only
... (output truncated) ...

Este comando oferece uma visão geral sólida do que o John the Ripper pode fazer. Nas próximas etapas, exploraremos alguns desses modos na prática.

Identifique os Modos de Cracking Padrão do John the Ripper

Nesta etapa, você aprenderá como o John the Ripper opera por padrão. Quando você executa john em um arquivo de senhas sem especificar um modo, ele não escolhe apenas um método. Em vez disso, ele alterna inteligentemente entre seus modos mais eficazes em uma ordem padrão: primeiro o modo "single", depois o modo "wordlist" e, finalmente, o modo "incremental". Isso oferece um bom equilíbrio entre velocidade e abrangência.

Nosso script de configuração já criou um arquivo chamado mypasswd.txt no seu diretório atual (~/project). Este arquivo contém uma entrada de usuário com uma senha simples e hasheada.

Vamos executar o John the Ripper neste arquivo sem nenhum flag de modo para observar seu comportamento padrão.

john mypasswd.txt

O John iniciará o processo de cracking. Você verá atualizações de status enquanto ele trabalha. Como a senha é simples, ela deverá ser quebrada muito rapidamente.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 12000p/s 12000c/s 12000C/s rolez..pimpin
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Como você pode ver, o John quebrou com sucesso a senha (password) para o usuário testuser. Ele também sugere utilmente o uso da opção --show para visualizar as senhas quebradas posteriormente.

Para confirmar a senha quebrada, você pode usar a opção --show:

john --show mypasswd.txt

Isso exibirá todas as senhas que foram quebradas com sucesso para o arquivo fornecido.

testuser:password:1001:1001::/home/testuser:/bin/sh

1 password hash cracked, 0 left

Isso confirma que a sequência de modos padrão foi bem-sucedida.

Diferencie Entre o Modo Single Crack e o Modo Wordlist

Nesta etapa, você aprenderá sobre dois dos modos de cracking mais fundamentais: "single crack" e "wordlist".

Primeiro, é importante saber que o John the Ripper armazena as senhas quebradas em um arquivo chamado john.pot, localizado no diretório ~/.john/. Para reexecutar uma sessão de cracking em uma senha já quebrada, devemos primeiro remover este arquivo. Vamos fazer isso agora.

rm ~/.john/john.pot

Modo Single Crack

O modo single crack é um modo rápido e eficiente que gera candidatos a senha com base em informações sobre a própria conta do usuário, como o nome de usuário ou dados do campo GECOS. Ele aplica mutações comuns (como adicionar números ou símbolos) a esses candidatos.

Vamos executar o John no modo single crack explicitamente usando o flag --single.

john --single mypasswd.txt

A saída será semelhante à execução padrão, pois este é o primeiro modo que o John tenta. É muito eficaz contra senhas que são variações do nome de usuário.

Modo Wordlist

O modo wordlist é uma das técnicas de cracking de senha mais populares. Ele usa uma lista pré-compilada de palavras (um dicionário ou wordlist) e tenta cada uma delas como senha. O John vem com uma wordlist padrão, geralmente localizada em /usr/share/john/password.lst.

Vamos primeiro remover o arquivo pot novamente para redefinir a sessão.

rm ~/.john/john.pot

Agora, execute o John no modo wordlist, apontando explicitamente para sua wordlist padrão usando o flag --wordlist.

john --wordlist=/usr/share/john/password.lst mypasswd.txt

Você verá o John carregar a wordlist e tentar quebrar o hash. Como "password" é uma senha muito comum, ela está incluída na lista padrão e será encontrada quase instantaneamente.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Isso demonstra como direcionar o John para usar um arquivo de dicionário específico para seu ataque.

Entenda os Fundamentos do Modo Incremental

Nesta etapa, você explorará o modo "incremental". Este modo é essencialmente um ataque de força bruta. Ele tenta sistematicamente todas as combinações possíveis de caracteres até um determinado comprimento. Embora seja o modo mais abrangente, ele também pode consumir um tempo extremamente longo para senhas de complexidade moderada.

O comportamento do modo incremental é definido no arquivo john.conf, que especifica conjuntos de caracteres (por exemplo, Alnum para alfanumérico, All para todos os caracteres) e restrições de comprimento.

Primeiro, vamos redefinir a sessão de cracking removendo o arquivo john.pot novamente.

rm ~/.john/john.pot

Agora, vamos executar o John no modo incremental. Especificaremos o conjunto de caracteres Digits, que instrui o John a tentar todas as combinações numéricas possíveis. Usamos o flag --incremental para isso.

john --incremental=Digits mypasswd.txt

Você verá o John começar a tentar combinações como "0", "1", "2", "00", "01", etc. Como nossa senha é "password" (todas letras), este ataque não terá sucesso. Você pode pressionar Ctrl+C para pará-lo após alguns segundos.

Agora, vamos tentar um conjunto de caracteres mais apropriado. Usaremos o modo incremental padrão, que geralmente começa com conjuntos de caracteres comuns como letras minúsculas.

Redefina a sessão mais uma vez:

rm ~/.john/john.pot

Execute o comando sem especificar um conjunto de caracteres:

john --incremental mypasswd.txt

Desta vez, o John usará sua sequência predefinida de conjuntos de caracteres. Como "password" consiste em letras minúsculas, o conjunto de caracteres Lower ou Alpha eventualmente a encontrará.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:40) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

O modo incremental é seu último recurso quando outros modos mais rápidos falharam.

Saiba Mais Sobre a Funcionalidade do Modo Externo

Nesta etapa, você será apresentado ao modo "external". Este é o modo mais avançado e flexível do John. Ele permite que você defina lógica personalizada de geração de senhas usando uma linguagem de script semelhante a C diretamente no arquivo de configuração john.conf. Isso é poderoso para criar ataques altamente direcionados que outros modos não conseguem lidar.

Embora escrever scripts externos seja um tópico avançado, você pode facilmente usar os modos externos pré-definidos que vêm com o John. Vamos primeiro listar os modos externos disponíveis definidos em /etc/john/john.conf.

grep '^\[' /etc/john/john.conf | grep 'External:'

Este comando filtra o arquivo de configuração para mostrar os nomes das seções de modo externo.

[External:Compiler]
[External:Double]
[External:Hybrid]
[External:Keyboard]
[External:LanManager]
[External:Shift]
[External:Status]
[External:Wordlist]

Você pode ver várias funções externas integradas. Vamos tentar usar o modo externo Wordlist. Este modo essencialmente imita o modo wordlist padrão, mas é implementado como um script externo, tornando-o um bom exemplo.

Primeiro, como sempre, reinicie a sessão.

rm ~/.john/john.pot

Agora, execute o John usando o flag --external, especificando o modo Wordlist.

john --external=Wordlist mypasswd.txt

A saída será muito semelhante à quando você executou o modo wordlist padrão, pois a lógica subjacente é a mesma: ele usa a wordlist padrão para encontrar a senha.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:45) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

O modo externo desbloqueia possibilidades quase ilimitadas para gerar candidatos a senha, tornando-o uma ferramenta para usuários especialistas que precisam implementar lógica de cracking personalizada.

Resumo

Neste laboratório, você explorou com sucesso os modos de cracking fundamentais do John the Ripper. Você aprendeu a navegar em suas opções de ajuda e observou seu comportamento padrão, que combina inteligentemente vários modos para eficiência.

Você ganhou experiência prática com:

  • Modo Single Crack: Um modo rápido que usa informações específicas do usuário para adivinhar senhas.
  • Modo Wordlist: Uma técnica comum que usa um dicionário de palavras.
  • Modo Incremental: Um modo abrangente de força bruta que tenta todas as combinações de caracteres.
  • Modo Externo: Um modo avançado e scriptável para criar regras personalizadas de geração de senhas.

Compreender esses modos principais é o primeiro passo para dominar o John the Ripper para tarefas de auditoria e recuperação de segurança de senhas. Agora você está equipado com o conhecimento fundamental para escolher o modo certo para diferentes cenários.