En este writeup vamos a resolver una de las máquinas de la plataforma Dockerlabs llamada Obsession, con el nivel más sencillo de dificultad «Muy Fácil».
Resumen de conceptos trabajados:
Escaneo de Puertos FTP Anonymous Login Ataque de Fuerza Bruta con Hydra Acceso SSH Autenticación usuario por SSH |
Si quieres conocer más sobre la plataforma Dockerlabs y ver cómo se configura, etc, en este post te cuento cómo hacerlo.
Básicamente los pasos son: 1) Crear una carpeta con el nombre de la máquina, 2) Descargar la máquina de Dockerlabs, 3) Descomprimirla y desplegarla.
Para todas las máquinas, la IP de Dockerlabs es siempre la misma: 172.17.0.2
Una vez hemos descargado la máquina víctima de Dockerlabs y desplegada en nuestro entorno, empezamos con el escaneo.
Estructura del contenido
ENUMERACIÓN -> ESCANEO DE PUERTOS
Comenzamos con la enumeración de puertos y conocimiento de versiones y servicios que corren sobre los mismos.
Antes, a mi me gusta asegurarme que efectivamente la máquina víctima está activa y ante qué OS nos enfrentamos. Para ello:
¿Está la máquina víctima activa y nos podemos comunicar con ella?
Aquí lo que haremos es ejecutar el siguiente comando y ver si el «host is up»
nmap -sn 172.17.0.2
¿Qué OS está ejecutando la máquina víctima?
ping -c 1 172.17.0.2 -R
la explicación de los comandos es:
ping
: se comprueba si la máquina víctima está conectada y responde en la red. Básicamente, manda un mensaje para ver si la máquina responde con un «¡Sí, estoy aquí!».
-c 1
: aquí indicamos que solo queremos mandar un mensaje («un ping») en vez de muchos. Si no lo pones, el comando seguirá mandando mensajes hasta que lo detengas manualmente (CTRL+C).
[IP de la máquina víctima]
: dirección de la máquina víctima.
-R
: este comando Trace Route indica que quieres rastrear la ruta que sigue el mensaje para llegar a la máquina víctima y volver. En algunos laboratorios de pentesting como HTB suele haber un nodo intermediario en la comunicación que reduce en una unidad el TTL del SO.
En este caso el TTL es de 64 por lo que estamos antes una máquina Linux.
Con toda esta información de inicio ahora comenzamos el escaneo de puertos con el siguiente comando:
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG Escaneo
La explicación de cada comando sería:
La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.
sudo
: comando en Linux con privilegios de administrador.
nmap
: nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.
-p-
: esta opción le indica a nmap que escanee todos los puertos del 1 al 65535.
--open
: nmap solo mostrará los puertos que están abiertos.
-sS
: especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.
--min-rate 5000
: establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad.
-vvv
: Es el nivel de información que muestra nmap mientras escanea.
-n
: esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.
-Pn
: le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn
, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.
-oG Escaneo
: especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo
es el nombre del archivo de salida donde se guardarán los resultados.
Sabemos por tanto que los puertos 21, 22 y 80 están abiertos, y que corresponden con los servicios de ftp, ssh y web.
Ahora vamos a lanzar un comando que nos va a reportar las versiones que corren para cada uno de esos servicios en sus puertos:
nmap -sCV -p21,22,80 172.17.0.2
La explicación de ese comando es:
-sCV
: se pueden combinar ambos parámetros en uno:
-sC
: Usa los scripts predeterminados de Nmap (llamados NSE scripts) para realizar pruebas adicionales. Esto ayuda a identificar detalles como versiones de software, configuraciones incorrectas o posibles vulnerabilidades.-sV
: Intenta detectar la versión exacta del servicio que corre en esos puertos abiertos.
-p21,22,80
:
Esto especifica los puertos a escanear:
21
: puerto estándar para el protocolo FTP (File Transfer Protocol).22
: Puerto utilizado por SSH (para conexiones remotas).80
: puerto estándar para HTTP, el protocolo utilizado por sitios web no cifrados.
En este punto, me gusta analizar con searchsploit las versiones de esos servicios para ver si existe algún CVE o vulnerabilidad ya encontrada.
Aunque de momento vemos que en el puerto 21 FTP se permite el login anónimo por lo que podríamos conectarnos sin autenticación e intentar descargarnos los txt que aparecen de chat-gonza.txt y pendientes.txt.
Aún así, lo comprobamos y no existe una vulnerabilidad crítica:
También sabemos que tenemos el puerto 80 web abierto, por lo que vamos a abrirlo en el navegador (limpiar la cache) y a investigar:
Podemos analizarlo desde el navegador con Wappalyzer o hacer un whatweb desde consola:
Interesante un potencial usuario y correo: russoski@dockerlabs.es
Del resto de la web, no vemos nada más interesante, por la versión de Apache en principio no sería el vector de ataque.
Resumiendo hasta ahora: => Puerto 21 FTP sin autenticación, donde poder descargarnos los txt que aparecen => Puerto 80 HTTP con un potencial usuario y correo. |
FTP Anonymous Login
Vamos a conectarnos por FTP al servidor de forma anónima ya que sabemos que el login está disponible:
ftp 172.17.0.2
anonymous para nombre de usuario, contraseña cualquier texto.
Como permisos de root en nuestra máquina, entramos y nos descargamos en local los dos txt:
Para el fichero chat-gonza.txt, vemos una conversación y otro potencial usuario además de Russoski que vimos accediendo al servicio http, en este caso sería Gonza.
Y el otro fichero, lo que parece ser unas notas nada relevantes:
En este punto, y sabiendo que el puerto 22 ssh está abierto, vamos a probar a lanzar un ataque de fuerza bruta con Hydra para el usuario Russoski y la IP de la máquina.
ATAQUE DE FUERZA BRUTA CON HYDRA
Lanzamos el siguiente comando con Hydra para encontrar la contraseña del usuario Russoski:
hydra -l russoski -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2/ -t 5
AUTENTICACIÓN USUARIO POR SSH
Una vez conseguida la password, accedemos por ssh para ver qué permisos tiene:
NOTA: si al intentar entrar por ssh os salta ese aviso, es porque ya has iniciado sesión por ssh en otra máquina anterior, y lo que hay que hacer es eliminar esa parte, y ya te dejará.
Una vez hemos entrado y revisado internamente como el usuario russoski lo que hay dentro, llegamos a ver con sudo -l los privilegios que tiene el usuario:
y vemos como el usuario russoski tiene permisos para ejecutar ciertos comandos como superusuario (root) usando sudo.
Con (root) NOPASSWD: /usr/bin/vim
, el usuario russoski puede ejecutar el programa vim
(ubicado en /usr/bin/vim
) con privilegios de root sin necesidad de proporcionar una contraseña (NOPASSWD
).
Por tanto, ejecutamos la vim con sudo:
sudo /usr/bin/vim
Dentro de vim
, abrimos una shell interactiva escribiendo:
:!sh
Esto nos dará un shell con permisos de root y ya comprobamos que somos root y llegamos a ver el vídeo de Youtube XD: