Whatsapp
Retos (CTF) – DragonJAR Security Conference 2020 – Parte 3

Retos (CTF) – DragonJAR Security Conference 2020 – Parte 3

10 septiembre 2020

RETO # 11 – Máquina Maligna 01

Descripción del Reto: Debes obtener acceso al servidor de segtics y lograr leer el archivo user.txt.

Ahora tenemos un gran problema y es que esta persona era la encargada de almacenar información altamente confidencial y lo hacía en un portal web el cual él lo denominaba como la ZonaSegura ya que aseguraba que nadie mas que él podría ingresar a consultar esa información… y por ende necesitamos de tu ayuda para ingresar en el portal y así obtener toda la información… así que tu misión es obtener la clave que nos da acceso a la ZonaSegura y obtener el mensaje de bienvenida.

Nivel de dificultad: Medio

Puntos asignados: 350

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Nos solicitan vulnerar el servidor y obtener la flag del usuario “segtics” ubicada en la ruta /home/segtics/user.txt y posteriormente obtener el mensaje que root tiene para nosotros. Para esto nos dan la dirección IP 151.80.4.39, con lo cual procedemos a realizar un proceso de enumeración y recolección de información. Escaneo de puertos con Nmap:

Como resultado del escaneo obtenemos los puertos que se pueden observar en la imagen, de inmediato procedemos a visualizar la IP en el navegador web mediante el puerto 80.

Se puede observar lo que aparenta ser la página por defecto del servidor web nginx, pero al observar el código fuente de la página html detectamos un comentario.

Nos informa que podemos hacer uso de algunas herramientas las cuales posiblemente sirvan para obtener mayor información sobre algún posible aplicativo, blog, o archivos que puedan ayudar en el proceso de vulnerar el servidor. Luego observamos que se encuentra el puerto 2049, el cual hace referencia al servicio de NFS, y como ya sabemos este servicio nos permite compartir recursos internos de un servidor mediante vía red, sin necesidad de un usuario con credenciales, por lo cual procedemos a identificar si existe algún recurso que esté siendo compartido por el servidor vía NFS.

Efectivamente se encuentra el recurso “/home/nfs” y nos indica que está permitida la conexión proveniente de cualquier destino,
ahora procedemos a montar el recurso de manera local en nuestra máquina.

Una vez hemos montado el recurso, podemos observar cómo se encuentran archivos de tipo PDF, JPG, PNG. Luego de analizar archivo por archivo detenidamente identificamos que el archivo llamado “logo.jpg” contiene un archivo .zip embebido el cual al parecer contiene un archivo llamado “id_rsa”.

Procedemos a indicarle a la herramienta “binwalk” que nos extraiga los bloques de información que encuentre con información.

Efectivamente, logró extraer el archivo .zip, al tratar de extraer el contenido del archivo .zip nos indica sobre un error el cual pertenece a un archivo .zip protegido con contraseña, con lo cual necesitamos realizar un proceso de ataque de fuerza bruta para obtener la contraseña. Para este pocedimiento primero realizamos un cambio de formato del .zip al formato adaptado por la herramienta “john the ripper”.

Validamos si efectivamente el cambio se realizó correctamente.

Ahora que tenemos la salida del formato soportado por “john the ripper” procedemos a crackear la contraseña con la cual es protegido dicho archivo.

Y como resultado hemos obtenido la contraseña “irc4life”, ahora debemos validar si efectivamente es la contraseña del archivo .zip.

Efectivamente logramos extraer el archivo “id_rsa” el cual se trata de una llave empleada para la autenticación posiblemente del servicio ssh, procedemos a validar la conexión mediante la llave obtenida.

Ahora hemos logrado acceso al servidor con el usuario “segtics”, el siguiente paso es leer el archivo “user.txt” Y así obtenemos
la flag del usuario “segtics”.

Flag: SEGTICS{NFS IS EASY BUT POWERFUL}

RETO # 12 – Máquina Maligna 02

Descripción del Reto: Ahora debes obtener el mensaje que root tiene para ti.

Nivel de dificultad: Difícil

Puntos asignados: 500

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Ahora sigue el paso de Privesc para conseguir el mensaje que el usuario root tiene para nosotros, con lo cual realizamos una identificación de procesos que se estén ejecutando con el usuario root.

Logramos identificar un archivo llamado “app2.py” el cual se ejecuta con python3, ahora validamos si hay puertos locales a la escucha.

Hemos identificado el puerto 5000 a la escucha de forma local, procedemos a realizar una consulta del puerto para saber qué tipo de comunicación se está generando.

Logramos evidenciar que se trata de un servicio web, el cual al consultar su ruta principal nos responde con el mensaje “No tan rápido !!”, esto nos da una idea para seguir idagando en dicho servicio. Para poder consultar el servicio debemos realizar una conexión tipo “tunneling” mediante ssh.

Ahora que hemos realizado el tunneling sin ningún problema procedemos a visualizar la página de forma local mediante el navegador en el puerto 8080.

Ahora procedemos a realizar un crawling al aplicativo web en busca de otras carpetas y/o archivos que puedan ser importantes. Ahora trataremos de identificar con que usuario se está ejecutando la aplicación web.Ahora trataremos de identificar con que usuario se está ejecutando la aplicación web.

Luego de un rato logramos identificar el directorio “freeway” el cual al cargarlo vía web nos retorna la Flag del usuario root.

Flag: SEGTICS{2020 FLASK ROOT FLAG}

RETO # 13 – Sistema Hacker 01

Descripción del Reto: Se dice que este sistema es vulnerable y permite a cualquier acceder a el… debes recuperar la información del usuario www-data la cual se encuentra en un archivo interno del servidor.

Debes agregar a tu archivo «hosts» la siguiente linea: 87.98.240.201 segtics.com.

Nivel de dificultad: Difícil

Puntos asignados: 500

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Iniciamos agregando el dominio segtics.com a nuestro archivo hosts:

Ahora que lo hemos modificado, procedemos a abrir el dominio en nuestro navegador web para observar que responde dicho dominio.

Tal y como se logra observar se trata de un blog, con lo cual procedemos a identificar posible directorios y/o archivos que pueda contener.

Nos muestra directorios propios del CMS WordPress, ahora procedemos a buscar información que pueda ser de ayuda para tratar de vulnerar el servidor. Al leer los post que se han publicado en dicho blog, hemos detectado que había una frase en letras muy pequeñas en la entrada de Backdoors.

Ahora procedemos a leer dicho mensaje.

El mensaje nos da una pista, y es que debemos buscar en posibles subdominios del blog, para identificar mayor información. Para esto procedemos a usar BurpSuite. Capturamos una petición hacía el blog y la enviamos al intruder para posteriormente realizar un ataque de fuerza bruta a los subdominios.

Asignamos el valor que será modificado, y agregamos nuestro diccionario de posibles subdominios.

Ahora procedemos a realizar el ataque.

Hemos identificado el subdominio “uploads.segtic.com”, con lo cual procedemos a modificar nuevamente nuestro archivo hosts agregando el subdominio identificado.

Ahora visualizamos el subdominio en el navegador web.

Tal y como se puede observar nos responde con un mensaje que dice “hacker system”, ahora debemos realizar una identificación de posibles directorios que pueda contener el subdominio.

Vemos que responde con un mensaje “404 Not Found”, pero si observamos el código fuente html nos encontramos con el nombre de un archivo.

Vemos que nos mencionan un archivo llamado “bc.php”, ahora procedemos a llamar dicho archivo en la ruta de uploads.

Al llamar el archivo, éste nos responde con 2 campos para ingresar datos y un botón llamado “Connect”, para obtener mayor información procedemos a leer el código fuente html del archivo.

Al parecer el primer input espera recibir una dirección IP y el segundo input espera recibir un Puerto, ya que puede tratarse de un script que permita realizar un backconnect, configuramos nuestro entorno y procedemos a usar ngrok para obtener un redireccionamiento de la comunicación vía TCP.

Ahora procedemos a dejar en modo escucha al puerto local 4444 con nc

Ya configurado esto, nos regresamos al navegador e insertamos la dirección que nos asigna ngrok y el puerto para la comunicación de manera local.

Y ahora al dar clic en el botón “Connect” vemos que se ha realizado una conexión reversa en nuestra terminal del nc.

Nos informa que somos el usuario “www-data”, ahora solo debemos buscar el mensaje. Luego de realizar una búsqueda, logramos identificar el archivo “www-data.txt” en la ruta “/var/www/”.

Y de esta forma es como logramos vulnerar el servidor y obtener el mensaje del usuario “www-data”.

Flag: SEGTICS {BACKDOORS ARE ALWAYS GOOD}

RETO # 14 – Sistema Hacker 02

Descripción del Reto:Ahora que ya estás dentro del sistema debes escalar privilegios como usuario «segtics» y obtener el mensaje que tiene para nosotros.

Nivel de dificultad: Difícil

Puntos asignados: 450

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Ya teniendo acceso al servidor, realizamos una recolección de información interna como por ejemplo posibles archivos de configuración con contraseñas, entre las cuales identificamos la carpeta en donde se encuentra configurado el blog WordPress en la ruta /var/www/html/”.

Ahora como todos sabrán el archivo en el cual se configura la comunicación entre el aplicativo y la base de datos se llama “wp-config.php”, por lo cual procedemos a leer su contenido.

Que posible identificar la contraseña de la conexión a la DB, ahora solo intentamos una conexión vía ssh con el usuario que nos mencionan en la descripción del reto “segtics” con la contraseña que ya obtuvimos.

Tal y como se puede observar hemos detectado que el usuario “segtics” reutiliza sus credenciales, es decir le ha asignado la contraseña de su inicio de sesión en el servidor al usuario que utiliza para conectar la base de datos con el aplicativo web. Con lo cual ahora sólo nos queda identificar el mensaje.

Detectamos que hay un archivo oculto llamado “.segtics.com.txt” y procedemos a leer su contenido.

Y es así como logramos escalar privilegios en el servidor y solucionar el reto.

Flag: SEGTICS {BAD POLICIES BAD CONSEQUENCES}

RETO # 15 – Zona Hacker

Descripción del Reto: Al parecer hemos descubierto un portal de unos mal llamados «Hackers» en donde planean sus próximos ataques para afectar la infraestructura de algunos países. Lo mejor de todo es que creemos que ese portal tiene una vulnerabilidad que posiblemente nos ayude a recuperar la información que necesitamos para prevenir dichos ataques… ¿Podrás obtener la información que guardan en un archivo llamado info.txt dentro del servidor?

Nivel de dificultad: Medio

Puntos asignados: 350

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Primero nos indican una dirección IP la cual para este ejercicio es 51.254.55.248, lo primero que debemos realizar es un escaneo de puertos básico.

Dicho escaneo nos arroja 3 puertos abiertos, de los cuales procedemos a validar que nos muestra en el puerto 80 (nginx).

Como resultado obtenemos una página en html con fondo negro y un mensaje, luego de realizar un escaneo de directorios, no fue posible identificar algo que sea de utilidad para resolver este reto, con lo cual procedemos a realizar nuevamente el escaneo pero esta vez incluimos los 65535 puertos.

Ahora hemos identificado otros 2 puertos: 1. 33060 mysqlx 2. 61340 apache Procedemos a validar nuevamente lo que nos pueda mostrar la IP en el puerto web.

parecer se trata de un formulario tipo login, nos pide correo y contraseña para poder iniciar sesión en el portal, con lo cual realizamos el envío de una petición para identificar qué información viaja mediante este formulario.

parecer se trata de XML, ahora como bien sabemos XML permite realizar un ataque tipo XXE el cual básicamente se da por malas validaciones en los atributos que realmente pertenecen al formulario que se debe validar y esto permite que podamos agregar entidades y atributos a la estructura. Ahora procedemos a validar la vulnerabilidad, y para esto realizaremos un listado de archivos ejecutando el comando “ls”.

Tal y como podemos observar el servidor nos retorna la respuesta en base64 puesto que ha sido el “filtro” que hemos empleado para poder recuperar la respuesta del server, ahora procedemos a decodificar esta respuesta.

Al parecer se ha ejecutado correctamente el comando “ls” y nos retorna los nombres de los archivos que se encuentran en el directorio web principal. Ahora trataremos de identificar con que usuario se está ejecutando la aplicación web.

Y al decodificar la respuesta del servidor obtenemos lo siguiente.

Ok … ahora sabemos que la aplicación se está corriendo con el usuario “www-data”, ahora veremos si podemos obtener una reverse shell.

Descargamos en el servidor el archivo “bc.php” el cual lo tenemos para acceder de forma pública desde un enlace de ngrok.

Observamos que el comando se ha ejecutado correctamente mediante curl. Ahora procedemos a validar si efectivamente este archivo lo podemos llamar desde nuestro navegador web.

Tal parece que nuestro archivo se ha subido sin ningún problema, con lo cual ahora procedemos a generar nuestra revershell.

Configuramos nuestra conexión y damos clic en “Connect”.

Y efectivamente hemos logrado una conexión desde el servidor hacía nuestro ordenador, ahora solo debemos buscar la información que debemos recuperar.

Ahora que hemos ubicado el archivo “info.txt” solo nos queda leerlo para recuperar la información.

Y es así como logramos resolver este reto.

Flag: SEGTICS {XXE SEGTICS CTF 2020}

RETO # 16 – Máquina Carmesí 01

Descripción del Reto: Los ciberdelincuentes del lado oscuro planean dar un gran golpe, tu misión es identificar toda la información que puedas obtener.

Nivel de dificultad: Medio

Puntos asignados: 350

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Lo primero que realizamos es escanear la dirección ip con nmap realizando un escaneo desde el puerto 1 hasta el 65535 con el fin de identificar todos los puertos que tengan un servicio corriendo abierto, con esto nos encontramos que en el puerto 80 está corriendo un servicio http. Adicional a esto encontramos en el puerto 21212 un servicio ftp corriendo lo cual es un poco extraño tener un FTP en un puerto tan alto y adicional a esto nmap nos menciona que posiblemente el usuario anonymous este habilitado.

Procedemos a visualizar los servicios iniciando con el servicio web a través del navegador obteniendo el siguiente resultado.

Analizamos todos los directorios de la web con el fin de encontrar información importante.

Procedemos a validar el acceso al ftp mediante el usuario anonymous como lo menciona nmap y al acceder subiremos nuestra shell la cual quedará almacenada en la carpeta /upload_files ruta a la cual podemos acceder mediante el navegador web.

Una vez adentro visualizamos la shell dentro de la carpeta desde el navegador.

Antes de correr la shell abrimos netcat para poner en escucha al puerto elegido el cual se ha configurado previamente.

Al ejecutar el archivo obtendremos la shell.

Después de esto procedemos a buscar información en la ruta /home/s-reto10/flag donde podemos visualizar la flag.

Una vez identificada la flag la acomodamos en el formato establecido.

Flag: SEGTICS{ RUBBER_ DUCKY_ ATTACK}

RETO # 17 – Máquina Carmesí 02

Descripción del Reto: Los ciberdelincuentes del lado oscuro planean dar un gran golpe, tu misión es identificar toda la información que puedas obtener.

Nivel de dificultad: Difícil

Puntos asignados: 500

Formato de bandera: SEGTICS{flag}

Archivo adjunto del reto: Acceso a una URL donde se publica el servidor.

Solucionario:

Para este reto partimos desde la shell que hemos obtenido desde el reto anterior CrimsonMachine_01, lo primero que realizaremos es visualizar los procesos programados con crontab.

Podemos observar que se ejecuta un archivo cada 30 minutos por el usuario belmont y una ruta del archivo, vamos a la ruta del archivo para visualizar este mismo.

Ingresamos al archivo process.py dentro de la carpeta data para modificarlo con nuestra shell aprovechando que el main.py esta importando a process.py.

Una vez modificado el archivo esperamos que se ejecute este cada 30 minutos para poder obtener la shell con los privilegios del usuario belmont, para esto ejecutamos netcat a la escucha del puerto 7777 y con la ayuda de ngrok realizamos el direccionamiento al puerto que elegimos.

Ya obtenida la shell procedemos a visualizar la información dentro de la ruta /home/belmont.

Una vez identificada la flag la acomodamos en el formato establecido.

Flag: SEGTICS{ TAX_ OFFICE_ SERVER_01 }

Contacto