John有別於Hdra之類的工具。Hydra進行盲目的蠻力攻擊,其方法是在FTP服務器或Telnet服務器上的服務後台程序上嘗試用戶名/密碼組合。不過,John首先需要散列。所以,對黑客來說更大的挑戰是,先搞到需要破解的散列。如今,使用網上隨處可得的免費彩虹表(rainbow table),比較容易破解散列。只要進入到其中一個網站,提交散列;要是散列由一個常見單詞組成,那麼該網站幾乎立馬就會顯示該單詞。彩虹表基本上將常見單詞及對應散列存儲在一個龐大的數據庫中。數據庫越大,涵蓋的單詞就越多。
但是如果你想在自己的系統上本地破解密碼,那麼John是值得一試的好工具之一。John跻身於Kali Linux的十大安全工具。在Ubuntu上,它可以通過新立得軟件包管理器(synaptic package manager)來安裝。
我在本文中將向各位介紹如何使用unshadow命令連同John,在Linux系統上破解用戶的密碼。在Linux上,用戶名/密鑰方面的詳細信息存儲在下面這兩個文件中。
復制代碼代碼如下:
/etc/passwd
/etc/shadow
實際的密碼散列則存儲在/etc/shadow中;只要對該機器擁有根訪問權,就可以訪問該文件。所以,試著從你自己的Linux系統來訪問該文件。或者先創建一個使用簡單密碼的新用戶。我會在自己的Linux系統上創建一個名為happy的新用戶,其密碼為chess。
復制代碼代碼如下:
root@kali:~# adduser happy
Adding user `happy' ...
Adding new group `happy' (1001) ...
Adding new user `happy' (1000) with group `happy' ...
Creating home directory `/home/happy' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for happy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
root@kali:~#
為了方便演示,最好使用一個簡單的密碼,那樣你沒必要等待太長的時間。由於我們的新用戶已創建完畢,現在可以破解其密碼了。
unshadow命令基本上會結合/etc/passwd的數據和/etc/shadow的數據,創建1個含有用戶名和密碼詳細信息的文件。用法相當簡單。
復制代碼代碼如下:
root@kali:~# unshadow
Usage: unshadow PASSWORD-FILE SHADOW-FILE
root@kali:~# unshadow /etc/passwd /etc/shadow > ~/file_to_crack
我們將unshadow命令的輸出結果重定向至名為file_to_crack的新文件。
步驟
下面我們來看一下具體步驟,破解成功後密碼在jhon.pot中,只是密碼:
1 進入/root/john-1.7.8/run目錄,用jhon自帶的工具unshadow讀取/etc/shadow
復制代碼代碼如下:
./unshadow /etc/passwd > /root/john-1.7.8/run/passwd.txt
eg: 如果是root用戶可以直接cat /etc/shadow > /root/john-1.7.8/run/passwd.txt
2 第一步用Single Crack 模式破解
復制代碼代碼如下:
Single Crack
專門針對使用賬號做密碼的人,他會嘗試用戶名的變體,在john.conf中的[List.Rules:Single]中定義規則
復制代碼代碼如下:
./john --single passwd.txt
如果破解成功則可以查看jhon.pot,或者使用:
復制代碼代碼如下:
./jhon --show passwd.txt 查看密碼和用戶
3 第二步用Wordlist Mode模式破解
Wordlist Mode是一種比較簡單的模式,只要確定字典檔在哪裡即可,在jhon.conf配置文件中有默認的字典檔‘Wordlist = $JOHN/password.lst’ 即run目錄下的password.lst文件,Wordlist Mode規則在jhon.conf中的[List.Rules:Wordlist]模塊定義,在[List.Rules:Wordlist]下面還有一個[List.Rules:NT]模塊是定義有關rules的變體規則。
復制代碼代碼如下:
./jhon --wordlist=password.lst passwd.txt
或者
復制代碼代碼如下:
./jhon --wordlist=password.lst --rules passwd.txt
4 第四步用Incremental Mode破解
Incremental 是功能最強的模式,他會窮舉所有的組合,然後作為密碼來破解,非常耗時,在配置文件中有[Incremental:All],[Incremental:Alpha],[Incremental:Digits],[Incremental:Alnum],[Incremental:LanMan]等模塊。每個模塊名在run下都有對應的date文件。
復制代碼代碼如下:
./jhon --incremental=All passwd.txt
5 第五步用External Mode破解
External 讓使用者可以自己編寫C語言的破解模式,在jhon.conf中已經自帶了一些破解模式程式。
參數解釋
--stdout 輸出結果到屏幕
--restore 從上次解密中斷的地方繼續執行,ctrl+c 中斷執行,當前的狀態會被存放在一個名為restore的文檔內,使用--restore可以從restore內讀取上次中斷的位置,然後繼續破解下去
--session 設定當前記錄檔的名稱
--make-charset 字元頻率表,他會以破解出來的密碼為基礎來產生字元頻率表,可用於Incremental模式
--show 顯示已經破解密碼,因為john.POT並不存儲賬號信息,使用show的時候應該輸入相關的passwd文件
--test 測試機器執行各種類型密碼的破解速度
--users 只破解某個賬號的密碼,可以是用戶名或者UID號碼,前面加‘-’表示不破解相關用戶密碼
--groups 只破解某個組內的用戶密碼,前面加上‘-’表示不破解某個組內用戶的密碼
--shells 之破解使用某種類型shell的用戶,前面加上‘-’表示不破解
--salts 只破解salts大於count的密碼,salts是unix用來作為密碼編碼的基礎單位
--format 預定義密碼破解的類型 DES/BSDI/MD5/BF/AFS/LM/