by Devin Yang

建立于: 4年前 ( 更新: 1年前 )

sha1不可逆吗?让我们来看看hashcat如何逆天而行@@
本文介绍hashcat相关运用,及破解hash的实例。


在这里我使用在MacOS上自行编译的版本,但文末我会教您用Docker跑新版本hashcat哦
hashcat -V
v5.1.0-1497-g8932c71a
先来看看语法,在命令行运行php,生成sha1测试用的hash如下:
php -r "echo sha1('test');"
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
再来,用hashcat命令进行破解a94a8fe5ccb19ba61c4c0873d391e987982fbbd3这个sha1的哈希,不可逆是吧???但可以碰撞:p
关於-m 100是啥,-a 3又是啥,别紧张下文分解。
hashcat -m 100 -a 3 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
运行的画面如下:(看到Cracked的字了吗,从开始到结束不到四秒钟)
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3:test

Session..........: hashcat
Status...........: Cracked
Hash.Name........: SHA1
Hash.Target......: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
Time.Started.....: Sat Apr  4 14:14:12 2020 (0 secs)
Time.Estimated...: Sat Apr  4 14:14:12 2020 (0 secs)
Guess.Mask.......: ?1?2?2?2 [4]
Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined
Guess.Queue......: 4/15 (26.67%)
Speed.#2.........: 80526.5 kH/s (1.68ms) @ Accel:32 Loops:31 Thr:256 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 1446336/2892672 (50.00%)
Rejected.........: 0/1446336 (0.00%)
Restore.Point....: 0/46656 (0.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-31 Iteration:0-31
Candidates.#2....: sari -> 7qxv

Started: Sat Apr  4 14:14:10 2020
Stopped: Sat Apr  4 14:14:13 2020
破解后的数据基本上存放在家目录的~/.hashcat/hashcat.potfile内。
因此我们可以使用--show立即显示出破解的数据。
hashcat -m 100 -a 3 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 --show
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3:test
那我们来看看-m 参数,代表Hash mode,所以罗100就是指我要破解的hash为SHA1。
hash mode太多了,就不一一列出,请自行hashcat --help查看,我透过grep命令取得我要介绍的相关编号如下:(100及16500)
hashcat --help|grep -E '\| JWT|\| SHA1'

- [ Hash modes ] -

      # | Name                                             | Category
  ======+==================================================+======================================
    100 | SHA1                                             | Raw Hash
  16500 | JWT (JSON Web Token)                             | Network Protocols
那么在第二个命令中、的-a 3代表的是攻击模式,这里我采用的是3 Brute-force
- [ Attack Modes ] -

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

让我们来看看另一个例子,这次使用6号模式,或许您会更有感。:)

假定有一个JWT密钥长度11码,要进行爆力破解命令如下。
hashcat -a 3 -m 16500 -i --increment-min 11 --increment-max 11 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.略.ZXnx70PSKvHR8dEu3e1C3Fs7tS0nUQIJZMMX6zRodYo
结果,预估时间是要495年,要把11码的所有变化进行哈希生成碰撞。
Session..........: hashcat
Status...........: Running
Hash.Name........: JWT (JSON Web Token)
Hash.Target......: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OD...zRodYo
Time.Started.....: Fri Apr  3 00:38:25 2020 (1 sec)
Time.Estimated...: Sun Jul 14 08:51:40 2515 (495 years, 100 days)
Guess.Mask.......: ?1?2?2?2?2?2?2?3?3?3?3 [11]
Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........: 24400.5 kH/s (7.58ms) @ Accel:2 Loops:16 Thr:256 Vec:1
Recovered........: 0/1 (0.00%) Digests
Progress.........: 35651584/381366131094577152 (0.00%)
Rejected.........: 0/35651584 (0.00%)
Restore.Point....: 0/4746193387776 (0.00%)
Restore.Sub.#2...: Salt:0 Amplifier:2176-2192 Iteration:0-16
Candidates.#2....: 0queranerer -> wzanptanere

可是呢,如果我们猜测这个密钥是使用了字典中的字,并且跟随了一个特殊符号及文本时,或许情况就不同了。
因为这里有字典档了,就不能指定长度啦。
hashcat -a 6 -m 16500 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.略.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c Passwords/probable-v2-top12000.txt ?s?l?l?l
我将攻击模式改为-a 6,字典+掩码。并在后方补上了字典档及mask(?s?l?l?l)。
关於mask的意义如下,所以我的mask是特殊服号加上小写英文3码。
?l = abcdefghijklmnopqrstuvwxyz
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d = 0123456789
?h = 0123456789abcdef
?H = 0123456789ABCDEF
?s = space!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
?a = ?l?u?d?s
?b = 0x00 - 0xff
这里的字典档我是随意Google来的。有需要可以透过git下载。
git clone https://github.com/danielmiessler/SecLists.git
再来看看进行中的画面,啥米,原本495年的,变成12分钟内可以被破解,真的假的。
Session..........: hashcat
Status...........: Running
Hash.Name........: JWT (JSON Web Token)
Hash.Target......: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OD...zRodYo
Time.Started.....: Fri Apr  3 00:22:27 2020 (2 mins, 13 secs)
Time.Estimated...: Fri Apr  3 00:37:36 2020 (12 mins, 56 secs)
Guess.Base.......: File (Passwords/probable-v2-top12000.txt), Left Side
Guess.Mod........: Mask (?s?l?l?l) [4], Right Side
Guess.Queue.Base.: 1/1 (100.00%)
Guess.Queue.Mod..: 1/1 (100.00%)
Speed.#2.........:  8041.8 kH/s (10.46ms) @ Accel:2 Loops:16 Thr:256 Vec:1
Recovered........: 0/1 (0.00%) Digests
Progress.........: 1088279280/7334201160 (14.84%)
Rejected.........: 0/1088279280 (0.00%)
Restore.Point....: 0/12645 (0.00%)
Restore.Sub.#2...: Salt:0 Amplifier:86064-86080 Iteration:0-16
Candidates.#2....: 123456*tko -> 00001111;pvo

[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit =>
我们可以看到,hashcat后选中的么字,例如这里,123456是字典中的字,后面的*tko则是我定义的掩码(?s?l?l?l)。

最终结果,花了8分钟,我设计好的密钥,就被破解出来了,原本要495年的......呀,我们可以看见下方的stauts这里写了Cracked。
这告诉我们,密码或密钥用字典中的字有多危险@@。
Session..........: hashcat
Status...........: Cracked
Hash.Name........: JWT (JSON Web Token)
Hash.Target......: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OD...zRodYo
Time.Started.....: Fri Apr  3 00:22:27 2020 (8 mins, 47 secs)
Time.Estimated...: Fri Apr  3 00:31:14 2020 (0 secs)
Guess.Base.......: File (Passwords/probable-v2-top12000.txt), Left Side
Guess.Mod........: Mask (?s?l?l?l) [4], Right Side
Guess.Queue.Base.: 1/1 (100.00%)
Guess.Queue.Mod..: 1/1 (100.00%)
Speed.#2.........:  8113.3 kH/s (10.39ms) @ Accel:2 Loops:16 Thr:256 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4268547360/7334201160 (58.20%)
Rejected.........: 0/4268547360 (0.00%)
Restore.Point....: 0/12645 (0.00%)
Restore.Sub.#2...: Salt:0 Amplifier:337552-337568 Iteration:0-16
Candidates.#2....: 123456'toh -> 00001111~jml

Started: Fri Apr  3 00:22:25 2020
Stopped: Fri Apr  3 00:31:15 2020

如果一台电脑破解太慢了,在新版本的hashcat还支持分布式破解,多台电脑(Client)进行破解

首先启动一台脑服务器命令范例:  这命令我觉的非常直白了,不再多做说明。
hashcat --brain-server --brain-host=0.0.0.0 --brain-port=12345 --brain-password=devin
Client连线到脑服务器:
这里我用php随便生成个md5进行破解。


例如,两台电脑一起跑...Client命令:(参考命令,我们能添加mask或字典)。这里-m 0代表我要进行md5的破解。
hashcat -O --brain-client --brain-client-features=3 --brain-host=192.168.0.150 --brain-port=12345 --brain-password=devin -m 0 -a 3 '098f6bcd4621d373cade4e832627b4f6'
关於brain-client-featuers说明如下:
- [ Brain Client Features ] -
  # | Features
 ===+========
  1 | Send hashed passwords /**发送哈希密码*/
  2 | Send attack positions /**发送攻击位置*/
  3 | Send hashed passwords and attack positions /**发送哈希密码和攻击位置*/
让我们瞧瞧运行中的画面:(示意图)

Server的画面如下:


多台电脑一起破时,随著电脑速度越来越快,或许不久将来,
要花几百年才能破解的hash,就能在短短数小时内被破解了,您说是吧。

电脑没hashcat懒的编译是吧?
没关系、只要有您有Docker就可以帮我们搞定罗。

我Google一下,排名前五大骇客专用的Linux,Kali Linux好像不错,又有Docker官方的image,立马来试看看。

一、下载并直接运行bash
docker run --rm  -ti kalilinux/kali-rolling bash
二、更新包
apt-get update
三、安装hashcat
 apt-get install -y hashcat
四、查看hashcat版本,用hashcat -V查看,cool v5.1.0很新。:)
root@53a72e2be235:/# hashcat -V
v5.1.0
您可以自行commit并写成别名alias在host端运行,这部份我就不在多做说明了。


 

Tags: hashcat 破解

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!