| # | Mode |
|---|---|
| 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; roupas íntimas". 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 Gatinho Arco-íris
e
paris rock
então o comando:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
O dicionário realmente tentado é:
huntingparis huntingrock kittyparis kittyrock rainbowparis 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 padrão são:
-j, - -rule-left -k, - -rule-right
-A regra após j atua no lado esquerdo, a regra após-k atua no lado direito, como adicionar o parâmetro-j' $-', então o dicionário real tentado é:
hunting-paris Pedra de caça 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çando pedra kitty > paris kitty > rock chuva > bowparis rain > 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 por si mesmas, o que é outro grande conteúdo. Para obter detalhes, consulte Ataque baseado em regras
Tente várias combinações de um determinado conjunto de caracteres. 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, o 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 criptográfico:
aaaaa aaaab ... zzzzz
Da mesma forma, "? l? u? d" é equivalente a um dicionário criptográfico:
aA0 ... ... 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
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 como um marcador "? N", como:
-1 abc123 ? 1? 1? 1
é equivalente a um dicionário de senhas:
aaa aab ... ... 333
-N Além da sequência que representa o conjunto de caracteres, também pode ser um arquivo terminando com. hcchr, onde o conjunto de caracteres é armazenado. 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 conhecemos a senha de alguém com 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, com um total de 62 caracteres. É 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 tradicional usando máscaras. A questão 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
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 então 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 o 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 o 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 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
Como pode ser visto, – increment 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 a simplesmente usar um dicionário:
Olá Olá! Olá! ... Olá, 99. werner00 werner01 ... werener99
Então o comando:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
Equivalente a simplesmente usar um dicionário:
00Olá Olá! Olá! ... 99Olá 00werner 01werner ... 99werener