Capture The Flag (CTF) Deloitte – CyberAcademy
1. Introducción y objetivos
Nivel de conocimientos técnicos: Medio; Tiempo de lectura: 15 min. ; Hashtags: #CTF
En este artículo vamos a dar solución al CTF «Deloitte-CyberAcademy», el cual presenta gran cantidad de retos similares a nuestro CTF-1 que lo pueden descargar desde el siguiente link:
Se trata de una máquina virtual con SO Linux (en adelante máquina víctima) que presenta una serie de retos que habrá que ir superando para capturar todas las banderas.
Para llevar a cabo las labores de hacking ético, estamos situados con nuestra máquina atacante en el mismo segmento de red que la máquina víctima. Para ello hemos desplegado ambas máquinas (víctima y atacante) en VMware Workstation Pro., conectadas vía «NAT».
Para llevar a cabo esta práctica necesitaremos tener al menos unos conocimientos básicos en hacking ético.
2. Fases del Hacking Ético profesional
Antes de proceder con la resolución del CTF, vamos a explicar brevemente cómo llevar a cabo una labor profesional de «Hacking ético», cuáles son las fases a llevar a cabo y la definición de cada una de ellas.
A continuación detallamos las fases que se deben cumplir en toda auditoría de hacking ético:
- Fase 1. Preparación: Se definen los parámetros de la prueba. Estos son los objetivos, ámbito, responsabilidades, personas de contacto, reglas, tiempo, éxitos/fracasos y documentación aprobando la prueba.
- Fase 2. Reconocimiento: Se comienza la prueba recogiendo la mayor información posible objetivo. Este punto es clave, ya que cuento mejor conozcamos el objetivo mejor podremos actuar sobre él.
- Fase 3. Escaneo: En esta fase seremos activos, enviando paquetes a la red del objetivo para identificar puertos, servicios y vulnerabilidades que éstos pudieran presentar.
- Fase 4. Explotación: Comienza la explotación de las vulnerabilidades identificadas para obtener acceso al objetivo.
- Fase 5. Análisis: Se analiza toda la información obtenida a lo largo de las fases anteriores para identificar los riesgos y priorizarlos, determinar mitigaciones, etc.
- Fase 6. Informe: Se crearán diversos documentos de carácter ejecutivo y técnico, detallando toda la prueba realizada: resultado, riesgos, etc. Los documentos deberán estar bien detallados y adaptados al lector.
3. Fase de preparación: Montaje del laboratorio
Para preparar el LAB únicamente debemos tener instalado VMware Workstation para montar las máquinas virtuales que se detallan a continuación.
- Máquina auditora/atacante: equipo informático con sistema operativo Kali Linux completamente actualizado. Se trata de una distribución basada en Debian GNU/Linux diseñada principalmente para la auditoría y seguridad informática en general. Fue fundada y es mantenida por Offensive Security Ltd. Esta distribución particularmente fue rediseñada con ciertas particularidades por Jaymon Security S.L.
Enlace Oficial para su descarga: https://www.kali.org/get-kali/
- Máquina CTF Deloitte-CyberAcademy con SO Linux: Contiene distintos retos a superar.
4. Fase de reconocimiento interno
En esta fase procedemos a localizar los activos que hay en la red a auditar mediante técnicas de descubrimiento de hosts, puertos y servicios, entre otros.
Para ello empleamos herramientas como:
- Nmap: Es el software por excelencia para descubrir todos los hosts que hay en uno o varios segmentos de red, así como qué puertos tiene abiertos un determinado host. También nos permite saber qué servicio hay detrás de dicho puerto en escucha, e incluso saber si presenta alguna vulnerabilidad conocida. Este programa también es capaz de detectar el tipo y versión del sistema operativo que tenemos en un determinado host, y todo ello de manera muy fácil y rápida.
- Zenmap: Es el GUI oficial de Nmap. Es una aplicación gratuita y de código abierto multiplataforma que pretende facilitar el uso de Nmap para principiantes, al tiempo que proporciona características avanzadas para los usuarios experimentados.
- Dirsearch o Dirbuster: Son dos herramientas capaces de descubrir archivos y directorios en servidores Web. Esto permite al auditor hacerse un mapa de cómo está configurado el sitio Web a auditar.
Con el lanzamiento de estas herramientas podemos ver los siguientes resultados:
5. Fase de escaneo y análisis de vulnerabilidades de la máquina CTF con IP 192.168.174.170
Tras la recolección de la información de la fase anterior, damos paso a la fase de escaneo y análisis de vulnerabilidades. El objetivo es descubrir posibles fallas en el procesado de parámetros de entrada en formularios Web, fallos de configuraciones en accesos a servicios, etc.
En esta fase vamos a enviar paquetes de manera activa a la máquina víctima, por lo que en la medida de lo posible deberemos ser cautelosos midiendo nuestra agresividad de escaneo para intentar no levantar sospechas, ya que todo quedará registrado en los distintos logs del sistema de cada máquina víctima, además de poder haber sistemas SIEM monitorizando todo lo que ocurre en la red y WAFs que nos puedan bloquear la conexión.
Tras encontrar las vulnerabilidades deberemos analizarlas y organizar los resultados obtenidos, para después planificar el método de ataque que más convenga en la fase de explotación.
Para dar cumplimiento a esta fase vamos a utilizar las siguientes herramientas, centrándonos en la exploración de vulnerabilidades a nivel WEB:
- Vega: Es un escáner de vulnerabilidades de aplicaciones web. Es gratuito y de código abierto. Combina escaneo de vulnerabilidades y proxy para poder realizar pruebas automatizadas y manuales.
- OWASP ZAP: Es un escáner de seguridad web de código abierto. Pretende ser utilizado como una aplicación de seguridad y como una herramienta profesional para pruebas de penetración.
Del lanzamiento de estas dos herramientas se recogen los siguientes resultados:
La información recabada hasta el momento, entre el reconocimiento interno y el resultado del escaneo de vulnerabilidades es:
- Cuatro servicios corriendo: Vsftpd 3.0.3 (puerto 21), OpenSSH 7.2 (puerto 22), JAMES 2.3.2.1 (puertos 25, 110, 119 y 4555), APACHE httpd 2.4.18 (puerto 80).
- Sistema Operativo Linux Ubuntu.
- Servicio FTP acepta ingreso anónimo.
- Servicio JAMES versión 2.3.2.1 presenta varias vulnerabilidades: https://vk9-sec.com/apache-james-server-2-3-2-cve-2015-7611/
- Página Web alojada en el servidor APACHE httpd (servidor Web) presenta fallas arrojadas por Vega y Owasp Zap de severidad media y alta, entre las que destacan la inyección de comandos y SQLi.
Con los resultados obtenidos ya podemos dar paso a la siguiente fase.
6. Fase de explotación de la máquina CTF con IP 192.168.174.170
En esta fase vamos a explotar las vulnerabilidades encontradas hasta el momento. Mediante la explotación de cada vulnerabilidad iremos capturando las banderas («flags») correspondientes a cada reto.
a) Primera flag
Examinando el código fuente de la página principal de la web encontramos la primera flag.
b) Segunda flag
Mediante la inspección del código fuente del directorio «Login_1» encontrado con «Dirsearch», encontramos su usuario y contraseña de acceso.
Tras introducir el usuario y contraseña encontramos la segunda flag.
c) Tercera flag capturada
Otra de las vulnerabilidades que encontró Vega es la de “http authentication over unencrypted http”. Lo que quiere decir es que los datos de login viajan en la cabecera http sin encriptar.
Analizando la web con “Live HTTP headers” vemos la etiqueta “WWW-Authentication: Basic”.
Modificando esta cabecera, es decir, cambiando el envío de información vía GET por otro cualquiera, podemos bypassear el formulario de autenticación. Esto es debido a una mala configuración.
Aprovechando esta vulnerabilidad nos encontramos la siguiente flag.
d) Cuarta y quinta flag
Continuamos examinando directorios y encontramos las siguientes banderas en los directorios «cyberacademy» y «uploads».
Esta nos indica que al haber mirado el archivo «robots.txt» hemos podido encontrarla.
Esta nos indica que al haber lanzado una herramienta de enumeración de directorios, como «dirsearch» o «dirbuster», hemos podido encontrarla.
e) Sexta flag capturada
Como se muestra en Zenmap, sabemos que hay un servicio FTP y que tiene como acceso autorizado el usuario «anonymous». De este modo accedemos al servidor FTP de la máquina víctima para obtener la siguiente flag.
f) Séptima flag capturada
Mediante la vulnerabilidad “Command Injection” encontrada en el directorio “ping” se puede obtener la siguiente flag. Como vemos a continuación, al lanzar el comando «ls» podemos ver el siguiente archivo:
Si lanzamos el comando «cat estonoesunaflag.txt» veremos nuestra séptima flag:
g) Octava flag capturada
Buscando en el directorio home del usuario «deloitte» que vimos en el fichero «passwd» encontramos otra flag. Decir que esta no es la manera más adecuada de llegar a esta flag, pero como podemos observar sí que es una de las maneras que se permite. Decir que posiblemente, la forma más «legítima» de llegar a esta flag, sería o bien crackeando los hashes de los archivos «passwd» y «shadow», o bien encontrando alguna otra pista mediante la explotación de algún otro servicio, como por ejemplo la base de datos (BBDD) que presenta una falla de SQL injection (SQLi).
h) Novena flag capturada
En el listado de procesos encontramos el servicio de mensajería James, buscamos en el log del sistema /var/log/syslog para ver los eventos del sistema, localizamos que James se ejecuta en el directorio /opt/.
Revisando el directorio /opt/ encontramos otra flag. En este caso está codificada en base64 y tenemos que transformarla a UTF-8.
Decir que el servicio JAMES vulnerable puede ser explotado según indica el siguiente artículo. Muy posiblemente que ahí se encuentren nuevas flags y pistas para continuar con la explotación del sistema: https://vk9-sec.com/apache-james-server-2-3-2-cve-2015-7611/
i) Escalando privilegios para encontrar la décima flag (root)
Mediante la vulnerabilidad “Command Injection” encontrada en el directorio “ping” se puede obtener información del sistema víctima, necesaria para poder realizar una escalada de privilegios.
Para ver la información del núcleo sobre el sistema uso el comando «uname -a» y «lsb_release -a» para averiguar la distribución que se esta ejecutando.
Con esto ya sabemos el Sistema Operativo que tiene la máquina víctima, por lo que podemos buscar directamente en Google a ver si presenta fallas que puedan ser aprovechadas para escalar privilegios. Y efectivamente encontramos los siguientes posibles exploits para escalar privilegios.
- https://www.exploit-db.com/exploits/45010
- https://www.exploit-db.com/exploits/44298
- https://www.exploit-db.com/exploits/41458
Antes de continuar, vamos a obtener una «reverse shell» de la máquina víctima. De esta manera podremos realizar la escalada de privilegios más cómodamente. Para ello vamos a hacer uso del framework de Metasploit, empleando su exploit «web delivery» que se encuentra en «exploit/multi/script/web_delivery». Este exploit está diseñado especialmente para explotar fallas de inyección o ejecución de comandos remotos (RCE).
En la configuración del exploit indicaremos como «payload» el de PHP, ya que tenemos la certeza de que en la máquina víctima se pueden ejecutar los archivos de esta tecnología. Vemos en la siguiente imagen la carga del exploit y su ejecución. El comando que nos devuelve lo deberemos ejecutar a través de la falla de inyección de comandos de la víctima vía GET.
Como se aprecia en la imagen anterior, hemos conseguido una sesión de «meterpreter».
Llegados a este punto, ya estamos en condiciones de introducir el exploit compilado en la máquina víctima para realizar la escalada de privilegios. Para compilar bien el exploit deberemos estudiarlo y ver qué librerías necesita para su compilación, ya que seguramente debamos añadir las flags «-pthread» y «-lcrypt», quedando el comando de compilación de la siguiente manera:
- gcc exploit.c -o exploitcompilado -pthread -lcrypt
Para introducir el exploit en la máquina víctima lo podemos hacer de varias formas:
- Mediante la Shell meterpreter haciendo uso del comando «upload» (sería la más sencilla).
- Mediante la descarga del exploit alojado en un servidor FTP o Apache Web nuestro, y haciendo uso del comando «wget» desde la Shell de comandos (cmd) de la máquina víctima.
Así pues, vamos a optar por la segunda opción que y con wget descargamos el exploit en el directorio «/tmp/». Esto es importante, ya que si lo hago en otro directorio no tendré permisos de escritura y por tanto dará error en la descarga.
Una vez descargado el fichero, le proporcionamos permisos de ejecución mediante el comando «chmod +x» y lo ejecutamos.
Llegados a este punto ya somos «root» y hemos obtenido la flag que se encontraba en el directorio «/root/».
Con el poder que nos otorga los privilegios de «root», podríamos realizar cualquier cambio en el sistema víctima, como por ejemplo el cambiar contraseñas de los usuarios existentes en el sistema, preparar el escenario para acceder de manera gráfica, levantar nuevos servicios, crear nuevos usuarios, etc.
Sin embargo, aquí damos por finalizado este CTF, sin olvidar que quedan por resolver, para su disfrute, la vulnerabilidad arrojada por Vega de SQLi y la explotación del servicio JAMES.
7. Conclusiones
A lo largo de este artículo hemos visto cómo ir superando distintos retos que podemos encontrarnos como CTF Players en plataformas como Hack The Box (HTB) o Try Hack Me (THM).
Al final del artículo se hace mención a que queda pendiente por resolver, para el propio disfrute del CTF Player, la vulnerabilidad de SQLi y del servicio JAMES. SQLi es, según OWASP, uno de los tipos de vulnerabilidades más extendidas, por lo que es muy conveniente que se estudie adecuadamente. Para hacer frente a este tipo de vulnerabilidad se aconseja el uso de la herramienta «SQLmap» y la lectura de nuestro artículo https://jaymonsecurity.com/script-sql-injection.
En cuanto al servicio vulnerable JAMES, podemos seguir su estudio de explotación en el siguiente artículo:
De estar interesado en adquirir conocimientos de introducción al hacking ético puede optar por matricularse en nuestro curso básico de hacking ético, o si prefiere adquirir conocimientos más avanzados en ciberseguridad ofensiva puede adquirir nuestro curso avanzado.