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端執行,這部份我就不在多做說明了。
No Comment
Post your comment