Vulnhub EvilBox-One CTF Walkthrough

Descripción
Máquina de nivel fácil, explotación LFI y system misconfiguration vulnerability.
Como primer paso con la herramienta Netdiscover realizaré un reconocimiento red para identificar la máquina objetivo.
netdiscover
La máquina objetivo tiene la dirección IP 192.168.50.155. Ahora realizaré un escaneo de puerto con la herramienta Nmap.

Primero realizaré un escaneo de puertos.
nmap -sS
Como se muestra en la imagen anterior hay dos puertos abiertos, puerto 22 con el servicio ssh y el puerto 80 con el servicio http.

Ahora realizaré un escaneo con Nmap para obtener más información sobre los puertos 22 y 80.
nmap -sV
En mi navegador web cargaré la página web que está sirviendo el servidor web apache.
servidor apache
Se nos muestra la página web de inicio de Apache2. Por lo tanto, con la herramienta Gobuster intentaré de identificar directorios o archivos que se encuentre contenidos dentro del servidor web.
gobuster -dir
Encontramos un directorio llamado "secret", ahora basándome en el directorio antes descubierto buscaré archivos con extención .php
Gobuster
La herramienta encontró un archivo llamado evil.php. cargaré la página web en el navegador web, para analizar y ver que muestra.
evil.php
Como se muestra en la imagen anterior no se muestra nada relevante. Por lo tanto, ejecutaré una técnica llamada fuzzer para analizar si el script evil.php procesa algún parámetro por URL.
ffuf tool
En la imagen anterior la herramienta ffuf encontró que el script evil.php procesa el parámetro "command".
evil.php?command=/etc/passwd
Como se muestra en la imagen anterior el script evil.php procesa el parámetro "command" y a su vez, encontramos nuestra primera vulnerabilidad LFI (Local File inclusion). En él hay un usuario mowree y tiene asociada una bash.

Ahora utilizaré un wrapper de PHP para obtener el script evil.php.
wrapper PHP
Ahora decodificaré el string en base 64 que nos entregó el wrapper PHP.
decode base64
El código anterior lo que hace es recibir un parámetro llamado “command” por URL. Luego, el script PHP utiliza la declaración “include”, toma como argumento el nombre de un archivo lo evalúa, luego el contenido del archivo es incluido y ejecutado como parte del script actual.

Cabe recordar que, en la máquina se está ejecutando el servicio SSH, por lo tanto, verificaremos si el usuario mowree tiene asociado algún certificado RSA para la autenticación al servicio SSH. El directorio donde se guardan los certificados RSA están por lo general en el directorio /home/[nombre-usuario]/.ssh/[nombre certificado]. Ahora con la herramienta ffuf realizaré fuzzer para identificar el nombre del certificado RSA.
Certificado RSA
El usuario tiene creado los certificados RSA. el certificado que nos interesa es id_rsa con la herramienta wget descargaré el certificado.
wget
Una vez descargado el certificado lo renombraré como mowree.rsa.
mowree-rsa
Posterior a esto, cambiaré los permisos del certificado.
Ahora debemos descifrar el certificado RSA para obtener el hash del mismo. Con la herramienta ssh2jhon (John The Ripper).
ssh2john
Ahora necesitamos crackear el hash obtenido. Para esto utilizaremos la herramienta john (John The Ripper).
hash cracker john
hash-cracker-decifrado
Ya tenemos la frase de contraseña con el cual se creó el certificado RSA. Con toda esta información intentaremos de conectar al servicio SSH. Probaré dos formas de conectar al servidor SSH, con la contraseña obtenida "unicorn" con esto comprobaré si el usuario usuario mowree reutilizó contraseña y, la segunda es conectar al servidor SSH mediante certificado RSA.
Como se muestra en la imagen anterior la contraseña "unicorn" no fue reutilizada, por lo tanto, intentaré conectar mediante certificado RSA.
SSH-RSA
Obtuvimos una conexión SSH mediante certificado. Fijarse que se nos pide la frase de contraseña "unicorn". Ahora listaré los archivos del directorio actual.
flag user.txt
Encontramos nuestra primera flag "user.txt", ahora debemos encontrar la flag "root".

Para encontrar nuestra flag "root" debemos escalar privilegio a root. Ejecutaré el script linpeas.sh. linpeas.sh es un script para auditar escalado de privilegio en sistemas Linux. Está diseñado para enumerar posibles rutas para escalar privilegios en sistemas Linux, recolecta información acerca del sistema, tales como, información del kernel, software instalado, malas configuraciones y otras potencial vulnerabilidades que un atacante puede explotar para ganar privilegios elevados.

linpeas.sh
Como podrán observar en su máquina de auditoría linpeas.sh entrega mucha información. Como se muestra en la siguiente imagen el archivo /etc/passwd es editable.
linpeas.sh is writable /etc/passwd
Con esto podríamos editar el archivo /etc/passwd, es decir, crear una nueva contraseña para el usuario root. Para crear la nueva contraseña utilizaré la herramienta openssl.

En Linux las contraseñas se almacenan de forma segura en el archivo /etc/shadow mediante algoritmos criptográficos, es por eso que la herramienta openssl nos proporciona la utilidad de generar contraseñas en formato Linux.  
openssl passwd hack
Con nuestra nueva contraseña generada editaremos el archivo /etc/passwd.
nano /etc/passwd


Ahora con la instrucción "su root" cambiaré del usuario mowree a root.
Privilege escalation
Como se muestra en la imagen anterior al ejecutar la instrucción "su root", se nos pedirá la contraseña "hack" la cual utilizamos para crear el hash para el usuario root.

Para más información sobre esta vulnerabilidad y otras les comparto el siguiente link: https://book.hacktricks.xyz/linux-hardening/privilege-escalation#init-init-d-systemd-and-rc-d

flag root
Happy Hack!!!

Comentarios