无码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”。沒(méi)啥好說(shuō)的,就是給定一個(gè)字典,hashcat會(huì)逐行讀取字典中的內(nèi)容,計(jì)算每行的hash值,與目標(biāo)hash值相比較。

示例:

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

2.Combination

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

  hunting
  kitty
  rainbow

  paris
  rock

則命令:

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

實(shí)際上嘗試的字典是:

  huntingparis
  huntingrock
  kittyparis
  kittyrock
  rainbowparis
  rainbowrock

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

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

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

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

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

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

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

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

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

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

3.Brute-force

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

4.Mask Attack

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

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

雖然按照“Attack Modes”表,-a 3對(duì)應(yīng)的是Brute-force,但實(shí)際上,-a 3使用的就是Mask Attack。Mask Attack可以看做高級(jí)的Brute-force。

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

一個(gè)mask是一個(gè)字符串,這個(gè)字符串由若干個(gè)占位符組成?!?l”便是一個(gè)占位符,其中的“?”是關(guān)鍵字,用于修飾其后的“l(fā)”,“?l”合起來(lái)表示一個(gè)字符集合,除“?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”其實(shí)等價(jià)于密碼字典:

aaaaa
aaaab
...
zzzzz

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

  aA0
  aA1
  ...
  bA0
  ...
  zZ9

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

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

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

  -1 abc123 ?1?1?1

便等價(jià)于密碼字典:

  aaa
  aab
  ...
  aa3
  ...
  333

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

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

  awerner0
  awerner1
  ...
  zwerner9

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

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

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

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

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

如test.hcmask的內(nèi)容為:

  ?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,從一個(gè)占位符開(kāi)始嘗試,再嘗試兩個(gè)的,三個(gè)的,直到我們給定的長(zhǎng)度。如我們寫(xiě)這一的占位符“abc”,然后計(jì)算下列字符串的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

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

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

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

運(yùn)行結(jié)果是只解出了一條hash:

  900150983cd24fb0d6963f7d28e17f72:abc

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

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

這次,又解出了兩條hash:

  0cc175b9c0f1b6a831c399e269772661:a
  187ef4436122d1cc2f40dc2b92f0eba0:ab

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

5.Hybrid Attack

Hybrid Attack是和Combinator Attack是差不多的,Combinator Attack是將兩個(gè)字典進(jìn)行組合,而Hybrid Attack是將一個(gè)字典和一個(gè)mask進(jìn)行雜交,兩者是差不多的。

假設(shè)我們已經(jīng)有了一個(gè)字典example.dict,內(nèi)容如下:

  hello
  werner

則命令:

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

等價(jià)于單純地使用字典:

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

則命令:

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

等價(jià)于單純地使用字典:

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

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