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 |