| # | 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 |
Este modo de ataque também é conhecido como "ataque de dicionário". Não há muito a dizer, mas dado um dicionário, o hashcat lerá o conteúdo do dicionário linha por linha, calculará o valor hash de cada linha e o comparará com o valor hash de destino.
Exemplo:
hashcat -a 0 -m 400 exemplo400.hash exemplo. dict
Baidu me disse que combinação é um substantivo, que significa: "combinação; consórcio; combinação de senha; macacão e roupa íntima". Esse modo de ataque é realmente muito simples, que consiste em combinar o conteúdo de dois dicionários de senhas. Usar esse modo de ataque requer a especificação de dois dicionários de senhas. Suponha que temos dois dicionários de senhas dict1.txt e dict2.txt, cujos conteúdos são:
caça Gato Arco-íris
e
paris rock
então o comando:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Na verdade, o dicionário tentado foi:
huntingparis huntingrock kittyparis kittyrock Arco-íris Paris rainbowrock
As palavras em dict1.txt estão à esquerda e as palavras em dict2.txt estão à direita, um total de 3×2=6.
Os parâmetros relacionados a este modo são:
-j, - -rule-left -k, - -rule-right
A regra após-j atua no lado esquerdo, e a regra após-k atua no lado direito, como adicionar o parâmetro-j' $-', então o dicionário real tentado é:
caça-paris Caça-rocha kitty-paris kitty-rock rain-bowparis rain-bowrock
Adicionar parâmetro-j'^!', Então o dicionário real tentado é:
! huntingparis ! huntingrock ! kittyparis ! kittyrock ! rainbowparis ! rainbowrock
Adicione o parâmetro-k'^ >', então o dicionário real tentado é:
caça > paris Caça > Pedra Gato > paris Gatinho > rock chuva > arcoParis Chuva > bowrock
Qual é essa regra? Os usos de "$" e "^" são semelhantes às expressões regulares, então são regulares? Na verdade, não. As regras do hashcat são implementadas sozinhas, o que é outro grande conteúdo. Para obter detalhes, consulte Ataque baseado em regras
Tente um determinado conjunto de caracteres. Várias combinações. De acordo com o wiki oficial do hashcat, este método está desatualizado e foi totalmente substituído pelo ataque de máscara, portanto nenhuma pesquisa será feita
Este é um método de ataque relativamente novo, exemplo é o seguinte:
hashcat -a 3 -m 0 MD5.hash ? Eu? Eu? Eu? Eu? l
Embora de acordo com a tabela "Modos de Ataque", -a 3 corresponda à força bruta, na verdade, -a 3 usa o ataque de máscara. O ataque de máscara pode ser visto como uma força bruta avançada.
O parâmetro-m é usado para especificar o tipo de função hash, e o valor MD5 é armazenado no arquivo MD5.hash. A chave é a última string "? l? l? l? l? l? l". Essa string é chamada de máscara.
Uma máscara é uma string composta por vários marcadores de espaço. "? l" é um marcador de espaço, onde "?" é uma palavra-chave, usada para modificar o seguinte "l". Juntos, "? l" representa um conjunto de caracteres. Além de "? l", também pode haver. "? u", "? d", "? h", "? h", "? s", "? a" e "? b" representam o conjunto de caracteres mostrado na tabela abaixo.
| ? | Conjunto de caracteres |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| H | 0123456789abcdef |
| H | 0123456789ABCDEF |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Eu? Você? d? s |
| b | 0 – 0xff |
Desta forma, entendemos que "? l? l? l? l? l" é na verdade equivalente a um dicionário de senhas:
aaaaa aaaab ... zzzzz
Da mesma forma, "? l? u? d" é equivalente a um dicionário de senhas:
aA0 aA1 ... bA0 ... zZ9
O conjunto de caracteres na tabela acima é integrado ao hashcat, também podemos especificar o conjunto de caracteres por nós mesmos:
- -custom-charset1= conjunto de caracteres 1 - -custom-charset2= conjunto de caracteres 2 - -custom-charset3= conjunto de caracteres 3 - -custom-charset4= conjunto de caracteres 4
O parâmetro – custom-charsetN pode ser abreviado para-n, como – custom-charset1 pode ser abreviado para-1. O conjunto de caracteres especificado com-n é especificado na máscara na forma de substituição "? N", como:
-1 abc123 ? 1? 1? 1
é equivalente a um dicionário de senhas:
aaa aab ... aa3 ... 333
-N Além da string que representa o conjunto de caracteres, também pode ser um arquivo terminando em. hcchr, que armazena o conjunto de caracteres. O hashcat vem com muitos arquivos. hcchr no diretório charsets/do pacote de instalação.
O conjunto de caracteres representado pelo espaçador "??" é o próprio "?". Além disso, quando os outros caracteres são usados como marcadores de espaço, eles representam os próprios caracteres. Por exemplo, "? lwerner? d" é equivalente ao dicionário de senhas:
awerner0 awerner1 ... zwerner9
Com o conhecimento acima, é fácil entender a máscara. Uma máscara consiste em vários marcadores de espaço, cada marcador de espaço é um conjunto de caracteres e uma máscara é uma combinação de vários conjuntos de caracteres de espaço. O número de marcadores de espaço é igual ao comprimento da senha. Quais são os benefícios desse design em comparação com simplesmente fornecer um conjunto de caracteres e comprimento de senha?
Suponha que sabemos que a senha de alguém tem um total de 7 dígitos. O primeiro dígito é uma letra maiúscula, os próximos 3 dígitos são letras minúsculas e os últimos 3 dígitos são números. Se for uma quebra de força bruta tradicional, são necessários conjuntos de caracteres A-Z, A-Z e 0-9, um total de 62 caracteres, e é necessário tentar até 62^7=3 521 614 606 208 vezes, o que é um trilhão de nível. Usar máscara para descrever esta senha é "\u\l\l\l\d\d\d", que é fácil de calcular. Existem um total de (26^4) × (10^3) =456 976 000 possibilidades, que são 100 milhões de nível, 4 ordens de magnitude menores que o método anterior.
Para dar um passo para trás, mesmo que não conheçamos a distribuição de senhas, é fácil simular o efeito do brute force cracking tradicional usando máscaras.
O problema agora é que a máscara está fixa, quantos marcadores de espaço estão mortos e o que devemos fazer se não soubermos o comprimento da senha? Não importa se a senha for muito longa. Se a senha de alguém tiver apenas 3 dígitos e nós temos 4 marcadores de espaço, não seria uma grande perda se não pudéssemos resolvê-la. Devemos começar com 1 e escrever todas as máscaras de cada comprimento? Isso é muito problemático.
Existem duas soluções. Uma é usar o arquivo de máscara, escrever várias máscaras em um arquivo e, em seguida, especificar o arquivo na linha de comando. Observe que o arquivo de máscara precisa terminar em. hcmask.
Por exemplo, o conteúdo de test.hcmask é:
? l ? Eu? l ? Eu? Eu? l ? Eu? Eu? Eu? l
Em seguida, use o seguinte comando para usar o arquivo:
hashcat -m 0 -a 3 - -show MD5.hash test.hcmask
Outra solução é adicionar o parâmetro – increment, que diz ao hashcat que, de acordo com a máscara que damos, comece com um marcador de espaço e tente mais dois, três até o comprimento que damos. Por exemplo, escrevemos o espaçador "abc" para este e, em seguida, calculamos o valor MD5 da seguinte string:
A: 0cc175b9c0f1b6a831c399e269772661 b: 92eb5ffee6ae2fec3ad71c777531578f c: 4a8a08f09d37b73795649038408b5f33 ab: 187ef4436122d1cc2f40dc2b92f0eba0 ac: e2075474294983e013ee4dd2201c7a73 ba: 07159c47ee1b19ae4fb9c40d480856c4 bc: 5360af35bde9ebd8f01f492dc059593c ca: 5435c69ed3bcc5b2e4d580e393e373d3 cb: d0d7fdb6977b26929fb68c6083c0b439 abc: 900150983cd24fb0d6963f7d28e17f72 abc: 900150983cd24fb0d6963f7d28e17f72 bac: 79ec16df80b57696a03bb364410061f3 bca: b64eab8ce39e013604e243089c687e4f cba: 3944b025c9ca7eec3154b44666ae04a0 cab: 16ecfd64586ec6c1ab212762c2c38a90
Antes de ":" é a string original para a qual o valor hash deve ser calculado, e depois de ":" é o valor hasn calculado. Salve o conteúdo acima no arquivo MD5.hash e execute o seguinte comando:
hashcat -m 0 -a 3 - -show - -username MD5.hash abc
Adicione parâmetro – username porque há uma string original antes de cada um de nossos valores de hash. Se você não adicionar este parâmetro, o hashcat mostrará que o valor de hash correto não foi encontrado. Ao adicionar este parâmetro, o hashcat pensará que a string antes do valor de hash é o nome de usuário para o qual o valor de hash é, para que o valor de hash possa ser carregado com sucesso.
O resultado da execução é que apenas um hash foi resolvido:
900150983cd24fb0d6963f7d28e17f72: abc
Agora adicione o parâmetro – increment e execute novamente:
hashcat -m 0 -a 3 - -show - -increment - -username MD5.hash abc
Desta vez, mais dois hash foram resolvidos:
0cc175b9c0f1b6a831c399e269772661: a 187ef4436122d1cc2f40dc2b92f0eba0: ab
visível, – incremento desempenhou um papel. Mas, ao mesmo tempo, também sabemos que com esse parâmetro, o hashcat apenas tentará a, ab e abc em ordem e não organizará e combinará os marcadores de espaço fora de ordem, tentando várias possibilidades.
O ataque híbrido é semelhante ao ataque combinador. O ataque combinador combina dois dicionários, enquanto o ataque híbrido combina um dicionário e uma máscara..
Digamos que já temos um dicionário exemplo.dict com o seguinte conteúdo:
Olá werner
Então o comando:
hashcat -m 0 -a 6 MD5.hash exemplo.dict ? d? d
Equivalente ao simples uso de um dicionário:
Olá 00 Olá 01 ... Olá 99 werner00 werner01 ... werener99
Então o comando:
hashcat -m 0 -a 7 MD5.hash ? d? dexample.dict
Equivalente ao simples uso de um dicionário:
00Olá 01Olá ... 99Olá 00werner 01werner ... 99werener