昨天我們用sqlmap
突破了防守,取得了一些看起來像是帳號密碼的東西
user_id | user | password
------------- | -------------
1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 (password)
2 | gordonb | e99a18c428cb38d5f260853678922e03 (abc123)
看到可能會讓人很害怕,各種猜忌從心中冒出開始懷疑整個世界可能有的惡意
我的密碼是明碼儲存?
這樣網站管理者不就也能看到我的密碼了嗎?
完蛋了,我有其他網站也是一樣的帳號密碼該怎麼辦?
先說結論,有些網站的確還存在著明碼儲存,像是有些網站提供了忘記密碼
的功能,點下去就能收到信並帶有完整的明碼密碼。但通常密碼是不會以明碼形式儲存在資料庫裡的,上面sqlmap
之所以能夠取得密碼是因為雖然經過雜湊方法對密碼整形成5f4dcc3b5aa765d61d8327deb882cf99
這種形式,但是密碼太簡單,屬於常見且極度危險的廢物密碼,有太多工具或是密碼字典檔能夠將雜湊結果還原成原始密碼,就跟明碼一樣在裸奔,所以sqlmap
才能在找到資料同時,判斷出他的雜湊形式並且破解。
這邊推薦邦友的文章,非常詳細的解釋了密碼與雜湊的關係
https://ithelp.ithome.com.tw/articles/10277332
第一個介紹的工具是hash-identifier
,他不是用來破解,而是用來判斷使用的雜湊方式,不過因為是根據雜湊的特性去猜測,所以結果也不一定準確。
這邊直接使用hash-identifier
來對5f4dcc3b5aa765d61d8327deb882cf99
進行猜測,這個字串是來自password
的雜湊形式
hash-identifier
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: 5f4dcc3b5aa765d61d8327deb882cf99
Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
判斷結果猜測是MD5
,這邊由於我們知道密碼是password
,所以可以透過另一個工具md5sum
來反向測試一下,下面的-n
是為了忽略echo預設有的換行,這樣將password
字串餵給md5sum
來得到雜湊過的值
echo -n 'password' | md5sum
會得到結果,證明了hash-identifier的猜測結果是對的
5f4dcc3b5aa765d61d8327deb882cf99 -
接下來介紹一位好人john
,他可以幫我們暴力破解弱密碼,但首先我們需要準備需要破解的hash給他,所以我們先編輯一個檔案/tmp/hash
,檔名可以隨意,內容就填想要破解的hash,這邊我們就拿上面出現過的兩個
5f4dcc3b5aa765d61d8327deb882cf99
e99a18c428cb38d5f260853678922e03
接著呼叫幫手,--wordlist
是指定字點檔,這邊使用內建的,當然也可以使用自己編輯過的,接著--format=raw-md5
來縮小範圍,最後放剛才編輯好的檔案/tmp/hash
,這樣john
就會根據字典檔去暴力破解這兩個hash了
john --wordlist=/usr/share/john/password.lst --format=raw-md5 /tmp/hash
結果如下,john
破解了兩組
Using default input encoding: UTF-8
Loaded 2 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=2
Press 'q' or Ctrl-C to abort, almost any other key for status
abc123 (?)
password (?)
2g 0:00:00:00 DONE (2021-10-06 08:19) 100.0g/s 19200p/s 19200c/s 38400C/s 123456..larry
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed
這邊要注意一下,如果對同樣的hash破解,可能就會出現以下內容
No password hashes left to crack (see FAQ)
這是因為破解過的內容都被記錄在/home/kali/.john/john.pot
,想重新破解,可以刪除這個檔案再執行一次,如果只是單純想看破解過的內容,可以執行以下命令
john --show --format=raw-md5 /tmp/hash
就會顯示破解過的內容
?:password
?:abc123
2 password hashes cracked, 0 left
體驗這兩個工具的過程中,我們能了解到某些老雜湊法已經不再安全了,即使資料經過整形也不能保證不會被逆向解析,所以漸漸地也有些改良性的雜湊法出現,但同樣地,攻擊者的工具與技術也是不斷進步,孰勝孰負還未可知。