第八章 密碼攻擊
作者:Willie L. Pritchett, David De Smet
譯者:飛龍
這一章中,我們要探索一些攻擊密碼來獲得用戶賬戶的方式。密碼破解是所有滲透測試者都需要執行的任務。本質上,任何系統的最不安全的部分就是由用戶提交的密碼。無論密碼策略如何,人們必然討厭輸入強密碼,或者時常更新它們。這會使它們易于成為黑客的目標。
8.1 在線密碼攻擊
這個秘籍中我們會使用 Hydra 密碼破解器。有時候我們有機會來物理攻擊基于 Windows 的計算機,直接獲取安全賬戶管理器(SAM)。但是,我們也有時不能這樣做,所以這是在線密碼攻擊具有優勢的情況。
Hydra 支持許多協議,包括(但不僅限于)FTP、HTTP、HTTPS、MySQL、MSSQL、Oracle、Cisco、IMAP、VNC 和更多的協議。需要注意的是,由于這種攻擊可能會產生噪聲,這會增加你被偵測到的可能。
準備
需要內部網絡或互聯網的鏈接,也需要一臺用作受害者的計算機。
操作步驟
讓我們開始破解在線密碼。
-
在開始菜單中,選擇
Applications | Kali Linux | Password Attacks | Online Attacks | hydra-gtk
。 -
既然我們已經把 Hydra 打開了,我們需要設置我們的單詞列表。點擊
Passwords
(密碼)標簽頁。我們需要使用用戶名列表和密碼列表。輸入你的用戶名和密碼列表的位置。同時選擇Loop around users
(循環使用用戶名)和Try empty password
(嘗試空密碼)。- 用戶名列表:
/usr/share/wfuzz/wordlist/fuzzdb/wordlistsuser-passwd/names/nameslist.txt
- 密碼列表:
/usr/share/wfuzz/wordlist/fuzzdb/wordlistsuser-passwd/passwds/john.txt
你可以使用的快捷方式是,點擊單詞列表框來打開文件系統窗口。
- 用戶名列表:
-
下面,我們要做一些調整。在
Performance Options
(執行選項)下面,我們將任務數量從 16 設置為 2。原因是我們不打算讓這么多進程運行,這樣會使服務器崩潰。雖然它是可選的,我們也希望選擇Exit after first found pair
(在首次發現匹配之后退出)選項。 -
最后,我們要設置我們的目標。點擊
Target
(目標)標簽頁并設置我們的目標和協議。這里,我們使用 Metasploitable 主機(192.168.10.111
)的 MySQL 端口。 -
最后我們點擊
Start
(開始)標簽頁的Start
按鈕來啟動攻擊。
工作原理
這個秘籍中,我們使用 Hydra 來對目標執行字典攻擊。Hydra 允許我們指定目標,并且使用用戶名和密碼列表。它會通過使用來自兩個列表的不同用戶名和密碼組合來爆破密碼。
8.2 破解 HTTP 密碼
這個秘籍中,我們將要使用 Hydra 密碼破解器來破解 HTTP 密碼。網站和 Web 應用的訪問通常由用戶名和密碼組合來控制。就像任何密碼類型那樣,用戶通常會輸入弱密碼。
準備
需要內部網絡或互聯網的鏈接,也需要一臺用作受害者的計算機。
操作步驟
讓我們開始破解 HTTP 密碼。
-
在開始菜單中,選擇
Applications | Kali Linux | Password Attacks | Online Attacks | hydra-gtk
。 -
既然我們已經把 Hydra 打開了,我們需要設置我們的單詞列表。點擊
Passwords
(密碼)標簽頁。我們需要使用用戶名列表和密碼列表。輸入你的用戶名和密碼列表的位置。同時選擇Loop around users
(循環使用用戶名)和Try empty password
(嘗試空密碼)。- 用戶名列表:
/usr/share/wfuzz/wordlist/fuzzdb/wordlistsuser-passwd/names/nameslist.txt
- 密碼列表:
/usr/share/wfuzz/wordlist/fuzzdb/wordlistsuser-passwd/passwds/john.txt
你可以使用的快捷方式是,點擊單詞列表框來打開文件系統窗口。
- 用戶名列表:
-
下面,我們要做一些調整。在
Performance Options
(執行選項)下面,我們將任務數量從 16 設置為 2。原因是我們不打算讓這么多進程運行,這樣會使服務器崩潰。雖然它是可選的,我們也希望選擇Exit after first found pair
(在首次發現匹配之后退出)選項。 -
最后,我們要設置我們的目標。點擊
Target
(目標)標簽頁并設置我們的目標和協議。這里,我們使用 Metasploitable 主機(192.168.10.111
)的 HTTP 端口。 -
最后我們點擊
Start
(開始)標簽頁的Start
按鈕來啟動攻擊。
8.3 獲得路由訪問
這個秘籍中,我們會使用 Medusa 來進行爆破攻擊。
當今,我們處于網絡社會之中。隨著聯網視頻游戲系統的誕生,多數家庭擁有數臺計算機,并且小型業務以創紀錄的趨勢增長。路由器也成為了網絡連接的基石。然而,富有經驗的網絡管理員的數量并沒有增長,以保護這些路由器,使得許多這種路由器易于被攻擊。
準備
需要連接到互聯網或內部網絡的計算機。也需要可用的路由器。
操作步驟
-
在開始菜單中,訪問
Applications | Kali Linux | Password Attacks | Online Attacks | medusa
。當 Medusa 啟動后,它會加載help
(幫助)文件。 -
我們現在已選定的選項來云頂 Medusa。
medusa –M http -h 192.168.10.1 -u admin -P /usr/share/wfuzz/ wordlist/fuzzdb/wordlists-user-passwd/passwds/john.txt -e ns -n 80 -F
-M http
允許我們指定模塊。這里,我們選擇了 HTTP 模塊。-h 192.168.10.1
允許我們指定主機。這里,我們選擇了192.168.10.1
(路由的 IP 地址)。-u admin
允許我們指定用戶。這里我們選擇了admin
。-P [location of password list]
允許我們指定密碼列表的位置。-e ns
允許我們指定額外的密碼檢查。ns
變量允許我們使用用戶名作為密碼,并且使用空密碼。-n 80
允許我們指定端口號碼。這里我們選擇了80
。-F
允許我們在成功找到用戶名密碼組合之后停止爆破。
Medusa 會運行,并嘗試所有用戶名和密碼組合,直到某次成功。
工作原理
這個秘籍中,我們使用 Medusa 來爆破目標路由器的密碼。能夠這樣做的好處就是,一旦你能夠訪問路由器,你就可以更新它的設置,便于你以后再訪問它,或者甚至是重定向發送給它的流量來改變你選擇的位置。
更多
你也可以直接從命令行運行 Medusa,通過鍵入medusa
命令。
你也可以傳入其它選項給 Medusa,取決于你的情況。細節請參見幫助文檔,通過在終端窗口僅僅鍵入medusa
來顯示。
模塊類型
下面是我們可以用于 Medusa 的模塊列表:
- AFP
- CVS
- FTP
- HTTP
- IMAP
- MS-SQL
- MySQL
- NetWare
- NNTP
- PCAnywhere
- Pop3
- PostgreSQL
- REXEC
- RLOGIN
- RSH
- SMBNT
- SMTP-AUTH
- SMTp-VRFY
- SNMP
- SSHv2
- Subversion
- Telnet
- VMware Authentication
- VNC
- Generic Wrapper
- Web form
8.4 密碼分析
這個秘籍中,我們會學到如何在密碼攻擊之前分析密碼。密碼分析的目的是允許我們通過收集目標機器、業務以及其它的信息來得到更小的單詞列表。在我們的教程中,我們會使用 Ettercap 和 它的 ARP 毒化功能來嗅探流量。
準備
這個秘籍需要局域網的鏈接。
操作步驟
讓我們啟動 Ettercap 來進行密碼分析。
-
我們以配置 Ettercap 來開始這個秘籍。首先,我們找到它的配置文件并用 VIM 編輯它。
locate etter.conf vi /etc/etterconf
要注意,你的位置可能不同。
-
將
ec_uid
和ec_gid
改為0
。 -
下面我們需要取消下面的 IPTABLES 行的注釋。它在靠近文件末尾的
LINUX
一節。 -
現在,我們將要啟動 Ettercap。使用
-G
選項,加載圖形化界面(GUI)。 -
我們開啟統一嗅探。你可以按下
Shift + U
或者訪問菜單欄中的Sniff | Unified sniffing...
。 -
選擇網絡接口。
-
下面,我們開始
Scan for hosts
(掃描主機),這可以通過按下Ctrl + S
或訪問菜單欄的Hosts | Scan for hosts
來完成。 -
現在我們能夠讓 Ettercap 開始嗅探了。你可以按下
Ctrl + W
或訪問菜單欄的Start | Start Sniffing
(開始嗅探)。 -
最后,我們開始進行 ARP 毒化。訪問菜單欄的
Mitm | Arp poisoning
(ARP 毒化)。 -
在出現的窗口中,選中
Sniff remote connections
(嗅探遠程連接)的選項。 -
取決于網絡情況,我們會看到信息。
-
一旦我們找到了我們想找的信息(用戶名和密碼)。我們會關閉 Ettercap。你可以按下
Ctrl + E
或者訪問菜單欄的Start | Stop sniffing
(停止嗅探)來完成。 -
現在我們需要關閉 ARP 毒化來使網絡恢復正常。
工作原理
這個秘籍中,我們使用 Ettercap 來毒化網絡并偷取網絡上的用戶名和密碼。我們以尋找和修改 Ettercap 的配置文件來開始。之后我們啟動了 Ettercap 并使用 ARP 毒化執行中間人(MITM)攻擊。由于流量被重定向到我們的主機,當用戶名和密碼在網絡上傳播時,我們就能夠看到它們。
更多
我們也可以使用 Metasploit 來分析用戶名和面。我們會通過使用搜索郵件收集器模塊來執行它。
-
打開終端窗口并啟動 MSFCONSOLE:
msfconsole
-
搜索郵件收集器;
search email collector
-
鍵入下列命令來使用搜索郵件收集器模塊:
use auxiliary/gather/search_email_collector
-
展示該模塊可用的選項:
show options
下面我們設置域名。如果不想被有關部門查水表的話,請小心選擇域名。
-
將域名設為你希望的域名:
set domain gmail.com
-
設置輸入文件。這并不是必需的。如果你打算運行多個攻擊,或打算稍后也能運行某個攻擊,推薦設置它。
set outfile /root/Desktop/fromwillie.txt
-
最后,我們開始攻擊。
run
8.5 使用 John the Ripper 破解 Windows 密碼
這個秘籍中,我們會使用 John the Ripper 來破解 Windows 安全訪問管理器(SAM)文件。SAM文件儲存了目標系統用戶的用戶名和密碼的哈希。出于安全因素,SAM文件使用授權來保護,并且不能在 Windows 系統運行中直接手動打開或復制。
準備
你將會需要訪問 SAM 文件。
這個秘籍中,我們假設你能夠訪問某臺 Windows 主機。
操作步驟
讓我們開始使用 John the Ripper 破解 Windows SAM 文件。我們假設你能夠訪問某臺 Windows 主機,通過遠程入侵,或者物理接觸,并且能夠通過 USB 或 DVD 驅動器啟動 Kali Linux。
-
看看你想掛載哪個硬盤:
Fdisk -l
-
掛載該硬盤,并將
target
設為它的掛載點。mount /dev/sda1 /target/
-
將目錄改為 Windows SAM 文件的位置:
cd /target/windows/system32/config
-
列出目錄中所有內容。
ls –al
-
使用 SamDump2 來提取哈希,并將文件放到你的 root 用戶目錄中的一個叫做
hashes
的文件夾中。samdump2 system SAM > /root/hashes/hash.txt
將目錄改為 John the Ripper 所在目錄。
-
運行 John the Ripper:
./john /root/hashes/hash.txt ./john /root/hashes/hash.txt–f:nt (If attacking a file on a NTFS System)
8.6 字典攻擊
這個秘籍中,我們會進行字典或單詞列表的攻擊。字典攻擊使用事先準備的密碼集合,并嘗試使用單詞列表爆破與指定用戶匹配的密碼。所生成的字典通常由三種類型:
+ 只有用戶名:列表只含有用戶名。
+ 只有密碼:列表只含有密碼。
+ 用戶名和密碼:列表含有生成的用戶名和密碼。
出于演示目的,我們使用 Crucnch 來生成我們自己的密碼字典。
準備
需要在 Kali 上安裝 Crunch。
操作步驟
Kali 的好處是已經安裝了 Crunch,不像 BackTrack。
-
打開終端窗口,并輸入
crunch
命令來查看 Crunch 的幫助文件。crunch
使用 Crunch 生成密碼的基本語法是,
[minimum length] [maximum length] [character set] [options]
。-
Crunch 擁有幾種備選選項。一些常用的如下:
-o
:這個選項允許你指定輸出列表的文件名稱和位置、-b
:這個選項允許你指定每個文件的最大字節數。大小可以以 KB/MB/GB 來指定,并且必須和-o START
觸發器一起使用。-t
:這個選項允許你指定所使用的模式。-l
:在使用-t
選項時,這個選項允許你將一些字符標識為占位符(@
,%
,^
)。
-
下面我們執行命令來在桌面上創建密碼列表,它最少 8 個字母,最大 10 個字符,并且使用字符集
ABCDEFGabcdefg0123456789
。crunch 8 10 ABCDEFGabcdefg0123456789 –o /root/Desktop/ generatedCrunch.txt
-
一旦生成了文件,我們使用 Nano 來打開文件:
nano /root/Desktop/generatedCrunch.txt
工作原理
這個秘籍中我們使用了 Crunch 來生成密碼字典列表。
8.7 使用彩虹表
這個秘籍中我們會學到如何在 Kali 中使用彩虹表。彩虹表是特殊字典表,它使用哈希值代替了標準的字典密碼來完成攻擊。出于演示目的,我們使用 RainbowCrack 來生成彩虹表。
操作步驟
-
打開終端窗口并將目錄改為
rtgen
的目錄:cd /usr/share/rainbowcrack/
-
下面我們要啟動
rtgen
來生成基于 MD5 的彩虹表。./rtgen md5 loweralpha-numeric 1 5 0 3800 33554432 0
一旦彩虹表生成完畢,你的目錄會包含
.rt
文件。這取決于用于生成哈希的處理器數量,大約需要 2~7 個小時。為了開始破解密碼,我們使用
rtsort
程序對彩虹表排序,使其更加易于使用。
工作原理
這個秘籍中,我們使用了 RainbowCrack 攻擊來生成、排序和破解 MD5 密碼。RainbowCrack 能夠使用彩虹表破解哈希,基于一些預先準備的哈希值。我們以使用小寫字母值生成 MD5 彩虹表來開始。在秘籍的末尾,我們成功創建了彩虹表,并使用它來破解哈希文件。
8.8 使用英偉達統一計算設備架構(CUDA)
這個秘籍中,我們會使用英偉達統一計算設備架構(CUDA)來破解密碼哈希。CUDA 是一個并行計算平臺,它通過利用 GPU 的能力來提升計算性能。隨著時間的流逝,GPU 的處理能力有了戲劇性的提升,這讓我們能夠將它用于計算目的。出于演示目的,我們使用 CudaHashcat-plus 來破解密碼。
準備
需要 CUDA 所支持的顯卡來完成這個秘籍。
操作步驟
-
打開終端窗口并將目錄改為 OclHashcat-plus 所在目錄。
cd /usr/share/oclhashcat-plus
-
執行下列命令來啟動 CudaHashcat-plus 的幫助文件:
./cudaHashcat-plus.bin –help
-
運行 CudaHashcat 的語法是
cudaHashcat-plus.bin [options] hash [mask]
。使用 OclHashcat 的重點之一是理解它的字符集結構。
在我們開始攻擊之前,讓我們先看看一些可用的攻擊向量。CudaHashcat 在攻擊中使用左右掩碼。密碼的字符按照掩碼劃分,并且被均分為左和右掩碼。對于每個掩碼,你可以為其指定字典或字符集。出于我們的目的,我們會使用定制的字符集。
-
為了指定自定義字符集,我們使用
–1
選項。我們可以設置任意多的自定義字符集,只要為它們指定一個數值(1-n
)。每個自定義字符都由問號(?
)來表示,并且隨后是字符類型??捎玫倪x擇是:-
d
指定數字(0~9) -
l
指定小寫字母 -
u
指定大寫字母 -
s
指定特殊字符 -
1-n
指定用做占位符的自定義字符集。
-
-
這樣將它們組合起來,我們就指定了一個自定義字符集,它包括特殊字符(
s
),大寫字母(u
),小寫字母(l
)和數字(d
),生成長度為 8 的密碼。我們打算指定叫做attackfile
的哈希表。./cudaHashcat-plus.bin attackfile -1 ?l?u?d?s ?1?1?1?1 ?1?1?1?1
-
我們可以將這個命令這樣拆分:
./cudaHashcat-plus.bin
調用了 CudaHashcat 。attackfile
是我們的攻擊文件。-1 ?l?u?d?
指定了自定義字符集1
,它包含小寫字母、大寫字母、數字和特殊字符。?1?1?1?1
是使用字符集1
的左掩碼。?1?1?1?1
是使用字符集1
的右掩碼。
這就結束了。
8.9 使用 ATI Stream
這個秘籍中,我們會使用 ATI Stream 來破解密碼哈希。ATI Stream 類似于 CUDA,因為它是一個并行計算平臺,它可以通過利用 GPU 的能力來提升計算性能。隨著時間的流逝,GPU 的處理能力有了戲劇性的提升,這讓我們能夠將它用于計算目的。出于演示目的,我們使用 OclHashcat-plus 來破解密碼。OclHashcat 有兩種版本:plus 和 lite。兩個都包含在 Kali 中。
準備
需要支持 ATI Stream 的顯卡來完成這個秘籍。
操作步驟
讓我們開始使用 OclHashcat-plus。
-
打開終端窗口并將目錄改為 OclHashcat-plus 所在目錄。
cd /usr/share/oclhashcat-plus
-
執行下列命令來啟動 OclHashcat-plus 的幫助文件:
./oclHashcat-plus.bin –help
-
運行 OclHashcat 的語法是
oclHashcat-plus.bin [options] hash [mask]
。使用 OclHashcat 的重點之一是理解它的字符集結構。
在我們開始攻擊之前,讓我們先看看一些可用的攻擊向量。OclHashcat 在攻擊中使用左右掩碼。密碼的字符按照掩碼劃分,并且被均分為左和右掩碼。對于每個掩碼,你可以為其指定字典或字符集。出于我們的目的,我們會使用定制的字符集。
-
為了指定自定義字符集,我們使用
–1
選項。我們可以設置任意多的自定義字符集,只要為它們指定一個數值(1-n
)。每個自定義字符都由問號(?
)來表示,并且隨后是字符類型??捎玫倪x擇是:-
d
指定數字(0~9) -
l
指定小寫字母 -
u
指定大寫字母 -
s
指定特殊字符 -
1-n
指定用做占位符的自定義字符集。
-
-
這樣將它們組合起來,我們就指定了一個自定義字符集,它包括特殊字符(
s
),大寫字母(u
),小寫字母(l
)和數字(d
),生成長度為 8 的密碼。我們打算指定叫做attackfile
的哈希表。./oclHashcat-plus.bin attackfile -1 ?l?u?d?s ?1?1?1?1 ?1?1?1?1
-
我們可以將這個命令這樣拆分:
./oclHashcat-plus.bin
調用了 OclHashcat 。attackfile
是我們的攻擊文件。-1 ?l?u?d?
指定了自定義字符集1
,它包含小寫字母、大寫字母、數字和特殊字符。?1?1?1?1
是使用字符集1
的左掩碼。?1?1?1?1
是使用字符集1
的右掩碼。
這就結束了。
8.10 物理訪問攻擊
這個秘籍中,我們會使用 SUCrack 來執行物理訪問密碼攻擊。 SUCrack 是個多線程的工具,能夠通過su
來執行本地用戶賬戶的暴力破解。Linux 的su
命令允許你作為替代用戶來運行命令。這個攻擊,雖然在你不能通過其他手段提權 Linux 系統時非常有用,但是會填滿日志文件,所以請確保在完成之后清理這些日志。
SUCrack 擁有幾種備選的可用命令:
--help
允許你查看它的幫助文檔。-l
允許你修改我們嘗試繞過登錄的用戶。-s
允許你設置展示統計信息的秒數間隔。默認值為 3 秒。-a
允許你設置是否使用 ANSI 轉義代碼。-w
允許你設置工作線程的數量。由于 SUCrack 是多線程的,你可以運行任意多的線程。我們推薦你只使用一個線程,因為每次失敗的登錄嘗試在嘗試下個密碼之前通常有三秒的延遲。
操作步驟
-
為了使用 SUCrack,你需要在啟動時指定單詞列表。否則,你會得到一條搞笑的信息。打開終端窗口并執行
sucrack
命令。出于我們的目的,我們會使用之前創建的自定義單詞列表文件,它由 Crunch 生成。但是,你可以指定任何希望的單詞列表。sucrack /usr/share/wordlists/rockyou.txt
-
如果你打算設置兩個工作線程,以及每 6 秒顯示一次統計信息,并且使用 ANSI 轉義代碼,你可以使用下列命令:
sucrack –w 2 –s 6 –a /usr/share/wordlists/rockyou.txt
這就結束了。
工作原理
這個秘籍中,我們使用 SUCrack 來對系統的 root 用戶執行物理訪問密碼攻擊。使用單詞列表的攻擊可以對管理員(默認)或特定用戶指定。我們運行sucrack
命令,它為我們執行攻擊。