WriteUp Máquina Blog




  • ✪Plataforma: HackMyVM
  • ✪Dificultad: Fácil
  • ✪Creador: d4t4s3c
  • ✪Twitter: @d4t4s3c
  • ✪GitHub: github.com/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.


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).




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.




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.



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.






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").


Fuerza bruta con hydra:



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).




Generamos un archivo con extensión php que contenga la siguiente sintáxis:


Subimos el archivo en el CMS.



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:


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.



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





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.



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:
# En el sistema víctima:


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


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


# 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:


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


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.





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:







!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 de este nivel.

Nos vemos en el próximo artículo.


Máquinas CTF & Retos

  • Máquinas Vulnerables CTF y retos web exclusivos creados con cariño. Ambientaciones personalizadas para que aprender sea también divertido y cultural.
  • Descubre el mundo la seguridad informática en entornos controlados.
Ir a la sección

Artículos Técnicos

  • Blog sobre tecnología e informática.
  • Explicaciones técnicas de diferentes aspectos.
  • Contenido con documentación.
Leer más...

Artículos Offtopic

  • Sección dedicada a contenido Offtopic.
  • Damos una opinión personal sobre diversas temáticas tecnológicas desde un punto de vista informal.



Próximamente

Seguridad Informática

  • Writeups, guías y explicaciones.
  • Máquinas recomendadas por nivel.
  • Resolución de laboratorios.
¡Entrar!

Noticias Tecnológicas

  • Contenido en formato texto, vídeo y podcast.
  • Los noticias en directo se emiten los viernes a las 22:30 hora española.
Próximamente

FOSS LOVERS

  • Contenido sobre software libre y código abierto.
  • Proxima apertura del grupo de usuarios.

Próximamente

¿Te gusta el contenido de ShellDredd?

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

Directos Twitch




Ir a Twitch

Youtube

Ir a Youtube

GitHub Repositorios

Dale un vistazo