无码av一区,麻豆乱码国产一区二区三区,亚洲一区二区三区麻豆,美日韩精品视频

hashcat 哈希貓的幾種攻擊模式

2024-12-24 12:15:01

hashcat有多種攻擊模式,用參數(shù)–help查看完整幫助,可以看到“Attack Modes”表,如下所示:

#Mode
0Straight
1Combination
3Brute-force
6Hybrid Wordlist + Mask
7Hybrid Mask + Wordlist

1.Straight

這一攻擊模式又名“Dictionary Attack”。沒啥好說的,就是給定一個字典,hashcat會逐行讀取字典中的內容,計算每行的hash值,與目標hash值相比較。

示例:

  hashcat -a 0 -m 400 example400.hash example.dict

2.Combination

百度告訴我,Combination是名詞,意為:“結合; 聯(lián)合體; 密碼組合; 連褲內衣”。這一攻擊模式其實很簡單,就是組合兩個密碼字典的內容。使用這一攻擊模式需要不多不少地指定兩個密碼字典。假設我們有兩個密碼字典dict1.txt和dict2.txt,其內容分別為:

  hunting
  kitty
  rainbow

  paris
  rock

則命令:

  hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt

實際上嘗試的字典是:

  huntingparis
  huntingrock
  kittyparis
  kittyrock
  rainbowparis
  rainbowrock

dict1.txt中的詞在左、dict2.txt中的詞在右,共3×2=6個。

與這一模式相關的參數(shù)有:

  -j, --rule-left
  -k, --rule-right

-j后的規(guī)則作用于左邊,-k后的規(guī)則作用于右邊,如添加參數(shù) -j ‘$-‘,則實際嘗試的字典便是:

  hunting-paris
  hunting-rock
  kitty-paris
  kitty-rock
  rain-bowparis
  rain-bowrock

添加參數(shù) -j ‘^!’,則實際嘗試的字典便是:

  !huntingparis
  !huntingrock
  !kittyparis
  !kittyrock
  !rainbowparis
  !rainbowrock

添加參數(shù) -k ‘^>’,則實際嘗試的字典便是:

  hunting>paris
  hunting>rock
  kitty>paris
  kitty>rock
  rain>bowparis
  rain>bowrock

這個規(guī)則是什么規(guī)則呢?“$”、“^”的用法和正則表達式相似,所以是正則嗎?其實不是啦,hashcat的規(guī)則是自己實現(xiàn)的,這又是一大塊內容了,詳情參見Rule-based Attack

3.Brute-force

嘗試給定字符集的各種各樣的組合。根據(jù)hashcat官方wiki,該方法已經過時,被Mask-Attack全方位取代,故不做研究,

4.Mask Attack

這是一種比較新穎的攻擊方式,示例如下:

  hashcat -a 3 -m 0 md5.hash ?l?l?l?l?l

雖然按照“Attack Modes”表,-a 3對應的是Brute-force,但實際上,-a 3使用的就是Mask Attack。Mask Attack可以看做高級的Brute-force。

-m參數(shù)用于指定hash函數(shù)類型,md5.hash文件中存放著md5值。關鍵便是最后的字符串“?l?l?l?l?l”了,這樣的字符串被稱為mask。

一個mask是一個字符串,這個字符串由若干個占位符組成?!?l”便是一個占位符,其中的“?”是關鍵字,用于修飾其后的“l(fā)”,“?l”合起來表示一個字符集合,除“?l”外,還可以有“?u”、“?d”、“?h”、“?H”、“?s”、“?a”和“?b”,代表的字符集合如下表所示。

?Charset
labcdefghijklmnopqrstuvwxyz
uABCDEFGHIJKLMNOPQRSTUVWXYZ
d0123456789
h0123456789abcdef
H0123456789ABCDEF
s! “#$%&'()*+,-./:;<=>?@[\]^_`~{|}
a?l?u?d?s
b0x00 – 0xff

這樣,我們便明白了,“?l?l?l?l?l”其實等價于密碼字典:

aaaaa
aaaab
...
zzzzz

同理,“?l?u?d”便等價于密碼字典:

  aA0
  aA1
  ...
  bA0
  ...
  zZ9

上表中的字符集合是hashcat內置的,我們也可以自己指定字符集合:

  --custom-charset1=字符集合1
  --custom-charset2=字符集合2
  --custom-charset3=字符集合3
  --custom-charset4=字符集合4

參數(shù) –custom-charsetN 可以縮寫為 -N,如 –custom-charset1 可以縮寫為 -1。用 -N 指定的字符集合在mask中以占位符“?N”的形式指定,如:

  -1 abc123 ?1?1?1

便等價于密碼字典:

  aaa
  aab
  ...
  aa3
  ...
  333

-N 后除了接表示字符集合的字符串外,還可以是一個以.hcchr結尾的文件,文件中存儲著字符集合。hashcat自帶了許多.hcchr文件,在安裝包的charsets/目錄中。

占位符“??”代表的字符集合是“?”本身。除此之外,其余的字符作為占位符時,代表的都是字符本身,如“?lwerner?d”等價于密碼字典:

  awerner0
  awerner1
  ...
  zwerner9

有了以上知識,便很容易理解mask了。一個mask由若干個占位符組成,每個占位符是一個字符集合,一個mask便是各個占位符字符集合的組合。占位符的個數(shù)和密碼的長度相等。這樣的設計,比起單純得給定字符集合和密碼長度來,有何好處呢?

假設我們已知某人的密碼共7位,第一位是大寫字母,接下來3位是小寫字母,最后3位是數(shù)字。若是傳統(tǒng)的暴力破解,需要字符集a-z、A-Z和0-9,共62個字符,最多需要嘗試62^7=3 521 614 606 208次,是萬億級別的。而用mask描述這個密碼,則是“\u\l\l\l\d\d\d”,容易計算,共有(26^4)×(10^3)=456 976 000種可能,是億級別的,比前一種方法減少了4個數(shù)量級。

退一步講,就算我們不知道密碼的分布,用mask也很容易模擬出傳統(tǒng)暴力破解的效果來。

現(xiàn)在的問題便是mask是固定的,其中有多少個占位符是寫死的,若是我們不知道密碼的長度,該怎么辦。密碼太長也就罷了,若是人家的密碼只有3位,我們的占位符有4個,怎么都解不出,豈不是很虧。難道要從1開始,將各個長度的mask都寫一遍?那多麻煩啊。

有兩種解決方法,一是使用mask文件,在一個文件中寫多個mask,然后在命令行中指明這個文件就行。注意,mask文件需以.hcmask結尾。

如test.hcmask的內容為:

  ?l
  ?l?l
  ?l?l?l
  ?l?l?l?l

則用如下命令使用該文件:

  hashcat -m 0 -a 3 --show md5.hash test.hcmask

另一種解決方法是添加參數(shù) –increment,這參數(shù)告訴hashcat,按我們給出的mask,從一個占位符開始嘗試,再嘗試兩個的,三個的,直到我們給定的長度。如我們寫這一的占位符“abc”,然后計算下列字符串的md5值:

  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

“:”前是要計算hash值的原字符串,“:”后是計算出的hasn值。將上述內容保存在文件md5.hash中,然后運行如下命令:

  hashcat -m 0 -a 3 --show --username md5.hash abc

加參數(shù) –username 是由于我們的每個hash值前都有原字符串,若不加此參數(shù),hashcat會顯示沒有找到正確的hash值,加此參數(shù),hashcat便會以為hash值前的字符串是該hash值對于的用戶名,從而能順利載入hash值。

運行結果是只解出了一條hash:

  900150983cd24fb0d6963f7d28e17f72:abc

現(xiàn)在加上參數(shù) –increment,再次運行:

  hashcat -m 0 -a 3 --show --increment --username md5.hash abc

這次,又解出了兩條hash:

  0cc175b9c0f1b6a831c399e269772661:a
  187ef4436122d1cc2f40dc2b92f0eba0:ab

可見,–increment 發(fā)揮了作用。但同時,我們也知道了,有此參數(shù),hashcat只會按順序地嘗試a、ab和abc,并不會亂序地對占位符排列組合,嘗試各種可能。

5.Hybrid Attack

Hybrid Attack是和Combinator Attack是差不多的,Combinator Attack是將兩個字典進行組合,而Hybrid Attack是將一個字典和一個mask進行雜交,兩者是差不多的。

假設我們已經有了一個字典example.dict,內容如下:

  hello
  werner

則命令:

  hashcat -m 0 -a 6 md5.hash example.dict ?d?d

等價于單純地使用字典:

  hello00
  hello01
  ...
  hello99
  werner00
  werner01
  ...
  werener99

則命令:

  hashcat -m 0 -a 7 md5.hash ?d? dexample.dict

等價于單純地使用字典:

  00hello
  01hello
  ...
  99hello
  00werner
  01werner
  ...
  99werener

上一條:如何使用hashcat 哈希貓軟件爆破各種hash
下一條:hashcat的使用方法 技術分享