Root Me
Last updated
Last updated
Primero realizamos un escaneo de puertos usando Nmap:
-p-: Indica que escanee todos los puertos.
–open: Muestra solo puertos abiertos.
-sS: SYN Scan, también conocido como half-open scan. No completa la conexión con el destino, lo que hace el escaneo un poco más rápido y difícil de detectar.
-sC: Activa la ejecución de scripts de predeterminados Nmap Scripting Engine (NSE).
-sV: Encuentra la versión de servicio que corre en cada puerto.
–min-rate: Fija la cantidad mínima de paquetes para enviar por segundo.
-Pn: Null Ping. Se usa por si el servidor esta bloqueando trazas ICMP.
-vvv: Triple verbose. Hace que imprima la información mientras la va encontrando. Se puede modificar la cantidad de “v”, el máximo es 3.
-oN: Se utiliza para guardar los resultados del escaneo en un archivo de salida en formato normal (normal output). Siempre va acompañado del nombre del archivo donde se guardara.
Este escaneo nos muestra que la máquina tiene abiertos los puertos: 80(HTTP) y 22(SSH).
Exploramos la página web y no encontramos nada dentro del código fuente.
Para hacer fuzzing usamos Gobuster:
Encontramos dos directorios interesantes: /panel y /uploads
Entramos al directorio de /panel y descubrimos con que se pueden subir archivos.
Creamos un archivo PHP para obtener una Webshell.
Intentamos subir un archivo con extensión .php, pero la página no permite ese tipo de archivos. Luego probamos con .pthml, con el que tenemos éxito.
Accedemos a la ruta /uploads, donde se encuentra el archivo que subimos. Hacemos clic sobre él para verificar que nuestra webshell funcione.
Una vez confirmada su funcionalidad, enviamos una reverse shell para poder trabajar más cómodos desde consola. El comando que utilizaremos es
Primero, codificamos el comando en formato URL utilizando el Encoder de Burpsuite. Luego, copiamos el comando codificado y lo pegamos en la URL (asegurándonos de tener netcat escuchándolo).
Hacemos un tratamiento a la bash para trabajar más cómodos y después buscamos la flag del usuario.
Después de encontrar la flag de user, necesitamos escalar privilegios para acceder a la flag de root. Buscamos archivos con permisos SUID:
Encontramos que Python tiene permisos SUID. Consultamos en GTFObins para ver cómo explotarlo para la escalar privilegios.
Aplicamos el comando encontrado:
Con esto, obtenemos una shell con privilegios elevados y finalmente accedemos a la flag de root.
Validación de archivos subidos:
Permitir solo extensiones específicas y validar el contenido del archivo.
Renombrar archivos subidos para evitar ejecuciones maliciosas.
Restringir ejecución en directorios públicos:
Configurar los permisos del servidor web para impedir la ejecución de scripts en directorios como /uploads.
Gestión de permisos SUID:
Revisar y eliminar archivos con permisos SUID innecesarios para prevenir escaladas de privilegios.
Cierre de puertos innecesarios:
Utilizar Firewall para limitar los puertos expuestos y reducir la superficie de ataque.
Actualización y monitoreo continuo:
Mantener los sistemas actualizados y monitorear la actividad para detectar comportamientos sospechosos.