Katana - Proving Grounds (OffSec)

En este walkthrough analizamos la máquina Katana de Proving Grounds (OffSec). Exploraremos cada fase del pentesting, desde el reconocimineto con Nmap y Dirb, hasta la explotación de una vulnerabilidad en OpenLiteSpeed para obtener acceso inicial. Finalmente, escalaremos privilegios aprovechando capabilities en Python para obtener root. ¡Acompáñame en este proceso y descubre cómo hackear Katana de principio a fin!

WALKTHROUGHSOFFSEC

2/27/20254 min read

🗡️Walkthrough de la Máquina Katana🏮- Proving Grounds (OffSec)

📌 Detalles de la Máquina

🔍 Reconocimiento

Lanzamos un escaneo inicial para descubrir puertos abiertos en la máquina:

Puertos abiertos:

  • 21/tcp (FTP) - vsftpd

  • 22/tcp (SSH) - OpenSSH

  • 80/tcp (HTTP) - Apache httpd

  • 7080/tcp (HTTPS) - LiteSpeed

  • 8088/tcp (HTTP) - httpd

  • 8715/tcp (HTTP) - nginx

Y comprobamos la versión de los servicios:

Identificación de versiones:

  • 21/tcp (FTP) - vsftpd 3.0.3

  • 22/tcp (SSH) - OpenSSH 7.9p1

  • 80/tcp (HTTP) - Apache 2.4.38

  • 7080/tcp (HTTPS) - LiteSpeed

  • 8088/tcp (HTTP) - LiteSpeed httpd

  • 8715/tcp (HTTP) - nginx 1.14.2

🌐 Enumeración Web - Puerto 80

Accedemos a http://192.168.183.83 y encontramos una página con una imagen de una katana.

Fuzzing con Dirb

Rutas encontradas:

  • /ebook/

  • /ebook/admin.php

  • /ebook/info.php

  • /ebook/controllers/

  • /ebook/database/

  • /ebook/functions/

  • /ebook/models/

  • /ebook/template/

Vemos un portal de libros con un panel de administración (/ebook/admin.php) desde el que se pueden añadir y editar libros.

Probamos con una inyección XSS pero no funciona.

🌐 Enumeración Web - Puerto 8088

Accedemos a http://192.168.183.83:8088 y encontramos el mismo HTML con la imagen de la katana.

Fuzzing con Dirsearch

Rutas interesantes descubiertas:

  • /phpinfo.php

  • /docs

  • /upload.html

  • /upload.php

  • /protected/

Accedemos a http://192.168.183.83:8088/upload.html y encontramos un formulario para subir archivos.

Al acceder a http://192.168.183.83:8088/docs encontramos la versión de OpenLiteSpeed, y en http://192.168.183.83:8088/protected vemos un login.

🎯 Explotación

Aprovechamos upload.html para subir una reverse shell en PHP.

Generamos una reverse shell

Utilizamos RevShells y seleccionamos PHP PentestMonkey.

Subimos el fichero con nuestra reverse shell desde "Choose File" > "Submit" y se nos muestra el siguiente mensaje:

Observamos la ruta /opt/manager/html/katana_nuestro_archivo, por lo tanto sabemos que el archivo se ha subido a un servidor web. Para ejecutar la shell debemos acceder a ella, por ejemplo desde el navegador. Probamos en el puerto en el que estamos (8088), pero no hay resultado. Como sabemos que tenemos 3 puertos html más (80,7080 y 8715), por lo tanto revisamos también estos.

Finalmente, la encontramos en http://192.168.183.83:8715/katana_nuestro_archivo. Nos ponemos a escuchar y refrescamos la página.

Estabilizamos la shell

Obtenemos acceso como usuario www-data y capturamos la primera flag 🏴.

🔼 Escalada de Privilegios

Tras revisar diferentes aspectos, como permisos en los binarios o capabilities, encontramos que python2.7 tiene cap_setuid habilitado, lo que permite escalar a root. Pare ello nos apoyamos el recurso gtfobins.

Ejecutamos:

Conseguimos root y capturamos la segunda flag🏴.

🏆 Conclusión

Puntos Clave:

  • Enumeración web reveló un formulario de subida en 8088/upload.html, pero los archivos se almacenan en 8715/uploaded/.

  • Subimos una reverse shell en PHP para obtener acceso inicial.

  • Escalamos privilegios explotando capacidades en python2.7.

📌 Lecciones aprendidas:

  • La importancia de revisar configuraciones malseguras en servidores web.

  • Cómo abusar de capacidades en binarios (getcap).

  • Cómo estabilizar shells limitadas en entornos restringidos.

🔗 ¡Espero que este walkthrough te haya sido útil! 🚀