Há tempos fizemos um artigo abordando o funcionamento da ferramenta Hashcat para descriptografar senhas por meio de brute force, e hoje iremos realizar um pequeno Lab utilizando o John the Ripper, uma ferramenta muito robusta de brute force em hashs capaz de quebrar qualquer criptografia. Claro, lembrando que isso demanda tempo e custo computacional.
O John é famoso por realizar 3 tipos de procedimento
Wordlist - Utilizando como referência uma lista com possíveis passwords
Single Crack - Testando combinações de Login/Senha pegando informações do usuário como sua home. Há quem diga que este é muito mais performatico que o modo Wordlist
Incremental - Realizando testes de caracter por caracter tentando quebrar a senha, talvez o modulo mais robusto e mais custoso a nível computacional do John
Fazendo um Benchmark de todos os algoritmos de criptografias com o John The Ripper
# john --test
Caso queira fazer algo mais específico em um algorítimo que você quer testar em específico
Para acessar o help do John é só chama-lo no terminal sem parâmetro algum. Você irá notar que a ferramenta é muito autoexplicativa.
root@debian:~# john
John the Ripper password cracker, version 1.7.8
Copyright (c) 1996-2011 by Solar Designer
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 give a new session the NAME
--status[=NAME] print status of a session [called NAME]
--make-charset=FILE make a charset, FILE will be overwritten
--show show cracked passwords
--test[=TIME] run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..] [do not] load this (these) user(s) only
--groups=[-]GID[,..] load users [not] of this (these) group(s) only
--shells=[-]SHELL[,..] load users with[out] this (these) shell(s) only
--salts=[-]COUNT load salts with[out] at least COUNT passwords only
--format=NAME force hash type NAME: DES/BSDI/MD5/BF/AFS/LM/crypt
--save-memory=LEVEL enable memory saving, at LEVEL 1..3
root@debian:~#
Vamos realizar um procedimento simples em um servidor de testes.
Primeiro vamos transformar todos os passwords em um pequeno banco de dados onde vamos aplicar o bruteforce com o John
root@debian:~# unshadow /etc/passwd /etc/shadow >> pass.db
root@debian:~# john pass.db
root@debian:~# john pass.db
Loaded 7 password hashes with 7 different salts (generic crypt(3) [?/32])
123 (sporte)
winner (root)
123123 (modafoca)
Tentando o Single Crack
root@debian:~# john --single pass.db
Loaded 7 password hashes with 7 different salts (generic crypt(3) [?/32])
Remaining 4 password hashes with 4 different salts
guesses: 0 time: 0:00:00:25 12% c/s: 59.74 trying: sysadmin - sysadmin_
guesses: 0 time: 0:00:00:27 13% c/s: 60.06 trying: deanalista\ - analistasuporte|
guesses: 0 time: 0:00:01:30 37% c/s: 60.75 trying: IsuporteSuporte - Ldsuporte
guesses: 0 time: 0:00:01:33 38% c/s: 60.71 trying: PsuporteAnalista - SAnalistaSuporte
guesses: 0 time: 0:00:01:34 38% c/s: 60.74 trying: SASuporte - VSuporteAnalista
guesses: 0 time: 0:00:01:36 38% c/s: 60.72 trying: VSAnalista - ZAnalistasuporte
guesses: 0 time: 0:00:01:39 39% c/s: 60.77 trying: &asuporte - ,sanalista
guesses: 0 time: 0:00:02:06 49% c/s: 60.93 trying: dSuPorte - SuporteDe
guesses: 0 time: 0:00:02:07 50% c/s: 60.86 trying: suporteANalista - analIstade
Usando uma Wordlist
Criei uma wordlist simples chamada wordlist.txt e utilizei a mesma com a sintaxe # john --wordlist=wordlist.txt pass.db
Agora podemos visualizar o resultado com o parâmetro --show
root@debian:~# john --wordlist=wordlist.txt senha.db
Loaded 7 password hashes with 7 different salts (generic crypt(3) [?/32])
Remaining 3 password hashes with 3 different salts
guesses: 0 time: 0:00:00:33 100% c/s: 65.43 trying: winner123123 - winner
root@debian:~# john --show senha.db
root:winner:0:0:root:/root:/bin/bash
joao:teste:1001:1001:,,,:/home/joao:/bin/bash
sporte:123:1003:1003:,,,:/home/sporte:/bin/bash
modafoca:123123:1006:1006:,,,:/home/modafoca:/bin/bash
4 password hashes cracked, 3 left
root@debian:~#
Usando o Incremental Crack
O incremental Crack, como já foi dito, é o modo mais robusto do John. Ele é muito inteligente, mas necessita de muito desempenho computacional. Pode demorar de 1 minuto à 1 ano para terminar. # john --incremental pass.db
Outros parâmetros uteis
Ignorando Shells inválidas - O John vai passar por todas senhas e ignorar as apresentadas no comando. # john --shells=-/bin/false pass.db
Especificando o numero de saltos - Neste caso o John vai tentar quebrar as senhas com os tamanhos pre definidos na sintaxe
# john --salts 8 pass.db
Nenhum comentário