En este writeup vamos a resolver una de las máquinas de la plataforma Dockerlabs llamada HedgeHog , con el nivel más sencillo de dificultad «Muy Fácil».

Resumen de conceptos trabajados:

Escaneo de Puertos
Hydra (modificando rockyou.txt)
Acceso SSH

Escalada de privilegios

Si quieres conocer más sobre la plataforma Dockerlabs y ver cómo se configura, etc, en este post te cuento cómo hacerlo.

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.

ENUMERACIÓN -> ESCANEO DE PUERTOS

Para asegurarme de que la máquina víctima está activa y puedo conectarme a ella, le lanzo o bien un PING con trace route (opcional) o directamente un nmap, de esta forma:

ping -c 1 172.17.0.2 -R

La máquina responde con un TTL de 64 al enviar 1 paquete de ping (una única solicitud ICMP), por lo que se trata de una máquina Linux.

La otra forma de verificar que la máquina está activa es mediante el comando -sn de nmap:

nmap -sn 172.17.0.2

El comando «-sn» indica a Nmap que haga un «Ping Scan» o «Host Discovery», es decir, Nmap solo identificará qué hosts están activos en la red, pero no intentará descubrir qué puertos están abiertos en esos hosts.

Ahora que tenemos conexión a la máquina y está activa, pasamos a hacer un escaneo de puertos completo mediante los siguientes comandos de NMAP (ver resto aquí):

nmap -sCV -p- --open --min-rate 5000 -n -vvv -Pn 172.17.0.2 -oG Escaneo

mandamos los resultados del escaneo output al fichero «Escaneo» y vemos los resultados.

Desglose de cada comando del nmap

  1. nmap: Es el comando principal para ejecutar Nmap, una herramienta de escaneo de red.
  2. -sCV:
    • -sC: Activa los scripts predeterminados de Nmap. Estos scripts están diseñados para obtener información adicional sobre los servicios que se ejecutan en el host objetivo. Pueden detectar detalles como versiones de software, información sobre el sistema operativo y posibles vulnerabilidades conocidas.
    • -sV: Realiza una detección de versiones de servicios. Esto intenta identificar la versión exacta del software que se ejecuta en cada puerto abierto.
  3. -p-: Indica a Nmap que escanee todos los puertos del 1 al 65535. Por defecto, Nmap solo escanea los puertos más comunes, pero con esta opción amplía el escaneo para incluir todos los posibles.
  4. --open: Esta opción le dice a Nmap que solo muestre los puertos que están abiertos. Los puertos cerrados o filtrados no se mostrarán en los resultados.
  5. --min-rate 5000: Define una tasa mínima de paquetes de 5000 paquetes por segundo. Esto acelera el escaneo, forzando a Nmap a enviar paquetes a esta velocidad mínima. Esta opción es útil si quieres resultados más rápidos, recomendable para entornos controlados o de plataforma de pentesting.
  6. -n: Le dice a Nmap que no aplique resolución de nombres DNS. Esto significa que solo usará direcciones IP y no intentará convertirlas a nombres de dominio, lo cual puede acelerar el escaneo si no necesitas esos nombres.
  7. -vvv: Activa el modo triple verbose o de verbosidad alta. Con tres «v», Nmap te mostrará mucha información detallada sobre el progreso del escaneo en tiempo real a medida que se está ejecutando..
  8. -Pn: Indica a Nmap que no haga un «ping» previo para verificar si el host está activo antes de escanear. Esto se usa cuando sabes que el host está en línea, pero puede estar configurado para no responder a los «ping» como medida de seguridad.
  9. 172.17.0.2: Es la dirección IP del objetivo que quieres escanear. Aquí es donde Nmap dirigirá el escaneo para descubrir puertos abiertos y servicios.
  10. -oG Escaneo: Esta opción le dice a Nmap que guarde los resultados del output en formato «grep-able» en un archivo llamado Escaneo. Este formato es fácil de procesar o filtrar más adelante con el comando | grep si necesitas buscar información específica en los resultados.

Vemos por los resultados del escaneo que el puerto 22 ssh y el 80 web están abiertos.

El puerto 22 ssh corre bajo la versión 9.6p1 (superior a la versión 7.7. vulnerable y visto en este writeup)

Podemos verlo lanzando un searchsploit a la versión de openssh:

Tampoco para la versión de Apache:

Por lo que seguimos investigando con el puerto 80 incluyendo la IP en el navegador para la respuesta web:

Parece que sólo devuelve esta palabra «tails», sin nada en el código fuente, robots.txt, etc.

Tails podría ser un potencial nombre de usuario.

En este punto, vamos a analizar posibles directorios vulnerables, para ello vamos a utilizar por ejemplo la herramienta de fuzzing wfuzz o gobuster se podría usar también:

wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u 172.17.0.2/FUZZ    

Después de probar más de 20K peticiones de directorios y no obtener un 200, vemos que aquí no tenemos nada vulnerable.

ATAQUE DE FUERZA BRUTA CON HYDRA (MODIFICADO)

Teniendo ese potencial usuario que vimos al inicio «tails», vamos a probar a lanzar un ataque por Hydra directamente para ver si encontramos la password:

hydra -l tails -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2/ -t 5

después de un rato, vemos que el ataque de fuerza bruta con hydra tarda mucho, y eso es en parte a que el diccionario de rockyou tiene más de 14M de registros, y si se hacen en torno a 77 intentos por minuto, esto nos podría demorar muchísimo tiempo.

Entonces una solución, teniendo en cuenta que el rockyou empieza a realizar los intentos siguiendo un método FIFO, es decir, lo primero que está en el fichero es lo primero que prueba, y sabiendo que el usuario «tails» parece estar de lo último, podríamos probar por «dar la vuelta» al fichero txt para que empiece probando por los registros del final.

Para ello, aplicamos el siguiente comando:

tac rockyou.txt >> modificado.txt

tac:

  • Es un comando en Linux que muestra el contenido de un archivo en orden inverso (línea por línea, desde la última hasta la primera).
  • En este caso, está invirtiendo el contenido del archivo rockyou.txt.

>>:

  • Este operador redirige la salida del comando a un archivo.
  • En este caso, la salida invertida del archivo rockyou.txt se agrega al archivo modificado.txt. Si modificado.txt no existe, lo crea; si ya existe, añade el contenido al final del archivo sin sobreescribirlo.

El problema es que, en ese nuevo archivo con los resultados o registros invertidos, se van a incluir espacios, y si lanzamos un ataque con Hydra usando ese nuevo directorio, no se va a encontrar la password, por lo que habría que eliminar esos espacios dentro del nuevo modificado.txt.

Para ello usamos el siguiente comando:

sed, es una herramienta para realizar búsquedas y reemplazos en archivos de texto. Vamos a desglosarlo:

sed -i 's/ //g' modificado.txt

Desglose del comando:

  1. sed:
    • Es un editor de flujo que permite procesar y editar texto.
  2. -i:
    • Este flag indica que se editará el archivo directamente en su lugar, modificando el archivo original (modificado.txt) sin necesidad de crear una copia.
  3. 's/ //g':
    • Es una expresión que indica la operación de búsqueda y reemplazo:
      • s: Inicia una operación de sustitución (substitute).
      • / /`: El espacio dentro de las primeras barras indica que se busca un espacio en blanco.
      • /g: El modificador g significa «global», es decir, reemplazará todos los espacios encontrados en cada línea del archivo.
      • Básicamente, se están eliminando todos los espacios en blanco del archivo.
  4. modificado.txt:
    • Es el archivo sobre el que se aplica la operación.

¿Qué hace este comando exactamente?

  • Busca todos los espacios en blanco dentro del archivo modificado.txt.
  • Los elimina, dejando el texto sin espacios.
  • Sobrescribe el archivo original con el contenido modificado.

Y ahora es cuando podremos lanzar un ataque con Hydra usando ese directorio de rockyou invertido y obtendremos la password más rápidamente:

hydra -l tails -P /usr/share/wordlists/modificado.txt ssh://172.17.0.2/ -t 5 

Y ya tenemos la contraseña usando fuerza bruta con Hydra:

ACCESO SSH p20

Ahora lo que hacemos es acceder a SSH para el usuario tails utilizando la password:

 ssh tails@172.17.0.2

vemos que somos usuario tails, y si investigamos un poco no vemos dentro de ese usuario nada interesante, salvo que buscamos si existe otro usuario que pueda tener credenciales de sudo:

La salida del comando sudo -l indica que el usuario tails tiene permisos de ejecutar cualquier comando como el usuario sonic sin necesidad de proporcionar una contraseña (NOPASSWD).

Esto significa que podríamos cambiar al usuario sonic y ejecutar comandos con los permisos de este usuario.

ESCALADA DE PRIVILEGIOS ROOT

¿Qué puedes hacer con este permiso?

Dado que podemos ejecutar cualquier comando como el usuario sonic, podemos cambiar al usuario sonic y explorar el sistema con sus permisos.

Cambiar al usuario sonic:

sudo -u sonic -i

y accedemos a la contraseña del usuario sonic. Sin embargo lo que queremos es acceder como usuario root, por lo que sabiendo que el usuario sonic puede ejecutar cualquier archivo, aplicamos el comando:

sudo -u root /bin/bash

Accedemos a la shell en bash (/bin/bash) como el usuario root y ya estamos dentro de root:

Me pareció interesante y nunca había pensado en invertir el fichero rockyou para ejecutar el ataque con Hydra empezando por «abajo».

Puedes ver el vídeo completo de la resolución de la máquina en el directo de El Pingüino de Mario LIVE.

Otros posts relacionados