hacktricks/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md

252 lines
13 KiB
Markdown
Raw Normal View History

2024-02-10 21:30:13 +00:00
# 8009 - Apache JServ Protocol (AJP)의 Pentesting
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-01-03 10:42:55 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
* **Hacking Tricks를 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출**하세요.
2022-04-28 16:01:33 +00:00
</details>
2023-12-04 15:45:05 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
경험있는 해커와 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
**해킹 통찰력**\
해킹의 스릴과 도전에 대해 자세히 알아보는 콘텐츠와 상호작용하세요.
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
**실시간 해킹 뉴스**\
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요.
2023-07-14 15:03:41 +00:00
2024-02-10 21:30:13 +00:00
**최신 공지사항**\
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 최신 정보를 받아보세요.
2023-07-14 15:03:41 +00:00
2024-02-10 21:30:13 +00:00
**[Discord](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!**
2022-11-05 09:07:43 +00:00
2024-02-10 21:30:13 +00:00
## 기본 정보
2024-02-10 21:30:13 +00:00
출처: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
2024-02-10 21:30:13 +00:00
> AJP는 와이어 프로토콜입니다. [Apache](http://httpd.apache.org/)와 같은 독립형 웹 서버가 Tomcat과 통신할 수 있도록 HTTP 프로토콜의 최적화된 버전입니다. 역사적으로 Apache는 정적 콘텐츠를 제공하는 데에 Tomcat보다 훨씬 빨랐습니다. 아이디어는 가능한 경우 Apache가 정적 콘텐츠를 제공하고, Tomcat 관련 콘텐츠에 대한 요청을 Tomcat으로 프록시하는 것입니다.
2024-02-10 21:30:13 +00:00
또한 흥미로운 내용:
2024-02-10 21:30:13 +00:00
> ajp13 프로토콜은 패킷 지향입니다. 성능상의 이유로 가독성이 높은 일반 텍스트 대신 이진 형식이 선택되었습니다. 웹 서버는 TCP 연결을 통해 서블릿 컨테이너와 통신합니다. 소켓 생성의 비용을 줄이기 위해 웹 서버는 서블릿 컨테이너와의 지속적인 TCP 연결을 유지하려고 시도하며, 여러 요청/응답 주기에 대해 연결을 재사용합니다.
2024-02-10 21:30:13 +00:00
**기본 포트:** 8009
2022-05-01 13:25:53 +00:00
```
PORT STATE SERVICE
8009/tcp open ajp13
```
2022-05-01 13:25:53 +00:00
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
2024-02-10 21:30:13 +00:00
AJP 포트가 노출되어 있다면, Tomcat은 Ghostcat 취약점에 취약할 수 있습니다. 이 [exploit](https://www.exploit-db.com/exploits/48143)은 이 문제와 함께 작동합니다.
2024-02-10 21:30:13 +00:00
Ghostcat은 LFI 취약점이지만, 다소 제한적입니다: 특정 경로의 파일만 가져올 수 있습니다. 그럼에도 불구하고, 이는 `WEB-INF/web.xml`과 같은 파일을 포함할 수 있으며, 이는 서버 설정에 따라 Tomcat 인터페이스의 자격 증명과 같은 중요한 정보를 노출시킬 수 있습니다.
2024-02-10 21:30:13 +00:00
9.0.31 이상, 8.5.51 이상, 7.0.100 이상의 패치된 버전은 이 문제를 해결했습니다.
2024-02-10 21:30:13 +00:00
## 열거
2024-02-10 21:30:13 +00:00
### 자동화된 방법
2022-10-03 13:43:01 +00:00
```bash
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
2022-05-01 13:25:53 +00:00
```
2024-02-10 21:30:13 +00:00
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#ajp)
2022-10-03 13:43:01 +00:00
2024-02-10 21:30:13 +00:00
## AJP 프록시
2022-10-03 13:43:01 +00:00
2024-02-10 21:30:13 +00:00
### Nginx 역 프록시 & AJP
2024-02-10 21:30:13 +00:00
[Dockerized 버전 확인](#Dockerized-version)
2022-10-03 13:43:01 +00:00
2024-02-10 21:30:13 +00:00
AJP 프록시 포트(8009 TCP)가 열려 있는 경우, 우리는 `ajp_module`을 사용하여 "숨겨진" Tomcat Manager에 접근하기 위해 Nginx를 사용할 수 있습니다. 이를 위해 다음과 같이 Nginx 소스 코드를 컴파일하고 필요한 모듈을 추가해야 합니다:
2024-02-10 21:30:13 +00:00
* Nginx 소스 코드 다운로드
* 필요한 모듈 다운로드
* `ajp_module`을 사용하여 Nginx 소스 코드 컴파일
* AJP 포트를 가리키는 구성 파일 생성
```bash
2022-10-03 13:43:01 +00:00
# Download Nginx code
wget https://nginx.org/download/nginx-1.21.3.tar.gz
tar -xzvf nginx-1.21.3.tar.gz
# Compile Nginx source code with the ajp module
git clone https://github.com/dvershinin/nginx_ajp_module.git
cd nginx-1.21.3
sudo apt install libpcre3-dev
./configure --add-module=`pwd`/../nginx_ajp_module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules
make
sudo make install
nginx -V
```
2024-02-10 21:30:13 +00:00
`/etc/nginx/conf/nginx.conf` 파일의 `http` 블록 내에 다음 라인을 추가하고, `server` 블록 전체를 주석 처리하세요.
2022-10-03 13:43:01 +00:00
```shell-session
upstream tomcats {
2024-02-10 21:30:13 +00:00
server <TARGET_SERVER>:8009;
keepalive 10;
}
2022-10-03 13:43:01 +00:00
server {
2024-02-10 21:30:13 +00:00
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
2022-10-03 13:43:01 +00:00
}
```
2024-02-10 21:30:13 +00:00
로컬 호스트에 cURL 요청을 보내어 Nginx가 올바르게 작동하는지 확인하고 시작하십시오.
2022-10-03 13:43:01 +00:00
```html
sudo nginx
curl http://127.0.0.1:80
<!DOCTYPE html>
<html lang="en">
2024-02-10 21:30:13 +00:00
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/X.X.XX</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</headas
<body>
<div id="wrapper">
<div id="navigation" class="curved container">
<span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span>
<span id="nav-config"><a href="/docs/config/">Configuration</a></span>
<span id="nav-examples"><a href="/examples/">Examples</a></span>
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
<span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
<br class="separator" />
</div>
<div id="asf-box">
<h1>Apache Tomcat/X.X.XX</h1>
</div>
<div id="upper" class="curved container">
<div id="congrats" class="curved container">
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
2022-10-03 13:43:01 +00:00
<SNIP>
```
2024-02-10 21:30:13 +00:00
### Nginx 도커화 버전
Nginx is a popular web server that is often used as a reverse proxy. It is known for its high performance and scalability. In this section, we will discuss how to run Nginx in a Docker container.
Nginx는 자주 사용되는 웹 서버로, 역 프록시로 사용되는 경우가 많습니다. 높은 성능과 확장성으로 알려져 있습니다. 이 섹션에서는 Nginx를 Docker 컨테이너에서 실행하는 방법에 대해 설명하겠습니다.
#### Dockerizing Nginx
To run Nginx in a Docker container, you need to create a Dockerfile. Here is an example of a basic Dockerfile for Nginx:
Nginx를 Docker 컨테이너에서 실행하려면 Dockerfile을 생성해야 합니다. 다음은 Nginx를 위한 기본 Dockerfile의 예입니다:
```dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
In this Dockerfile, we start with the latest Nginx image from the Docker Hub. We then copy our custom `nginx.conf` file to the appropriate location in the container. The `EXPOSE` instruction exposes port 80, which is the default port for HTTP traffic. Finally, the `CMD` instruction starts the Nginx server with the `daemon off;` option, which keeps the process running in the foreground.
이 Dockerfile에서는 Docker Hub에서 최신 Nginx 이미지로 시작합니다. 그런 다음 사용자 정의 `nginx.conf` 파일을 컨테이너의 적절한 위치로 복사합니다. `EXPOSE` 지시문은 HTTP 트래픽의 기본 포트인 80번 포트를 노출합니다. 마지막으로 `CMD` 지시문은 `daemon off;` 옵션으로 Nginx 서버를 시작하며, 이는 프로세스를 전면에서 실행 상태로 유지합니다.
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
To build the Docker image, navigate to the directory containing the Dockerfile and run the following command:
Docker 이미지를 빌드하려면 Dockerfile이 있는 디렉토리로 이동한 다음 다음 명령을 실행하세요:
```bash
docker build -t my-nginx .
```
This command builds the Docker image with the tag `my-nginx`. The `.` at the end of the command specifies the build context, which is the current directory.
이 명령은 태그가 `my-nginx`인 Docker 이미지를 빌드합니다. 명령의 끝에 있는 `.`은 빌드 컨텍스트를 나타내며, 현재 디렉토리를 의미합니다.
Once the image is built, you can run a container from it using the following command:
이미지가 빌드되면 다음 명령을 사용하여 컨테이너를 실행할 수 있습니다:
2024-02-10 21:30:13 +00:00
```bash
docker run -d -p 80:80 my-nginx
```
This command runs a container from the `my-nginx` image in detached mode (`-d`), mapping port 80 of the host to port 80 of the container (`-p 80:80`).
이 명령은 호스트의 80번 포트를 컨테이너의 80번 포트에 매핑하여 `my-nginx` 이미지에서 컨테이너를 분리된 모드(`-d`)로 실행합니다(`-p 80:80`).
You can now access the Nginx server by navigating to `http://localhost` in your web browser.
이제 웹 브라우저에서 `http://localhost`로 이동하여 Nginx 서버에 액세스할 수 있습니다.
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
2024-02-10 21:30:13 +00:00
`nginx.conf` 파일에서 `TARGET-IP`를 AJP IP로 대체한 후 빌드하고 실행하세요.
``` bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
2024-02-10 21:30:13 +00:00
### Apache AJP 프록시
2024-02-10 21:30:13 +00:00
다른 접근 가능한 웹 포트 없이 8009 포트가 열려 있는 것은 드물지만, 여전히 **Metasploit**을 사용하여 이를 악용할 수 있습니다. **Apache**를 프록시로 활용하여 요청을 8009 포트에 있는 **Tomcat**으로 리디렉션할 수 있습니다.
2024-02-08 21:36:35 +00:00
```bash
sudo apt-get install libapache2-mod-jk
sudo vim /etc/apache2/apache2.conf # append the following line to the config
2024-02-10 21:30:13 +00:00
Include ajp.conf
sudo vim /etc/apache2/ajp.conf # create the following file, change HOST to the target address
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
Allow from localhost
</Proxy>
ProxyPass / ajp://HOST:8009/
ProxyPassReverse / ajp://HOST:8009/
2024-02-08 21:36:35 +00:00
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo systemctl restart apache2
```
2024-02-10 21:30:13 +00:00
이 설정은 **AJP 프로토콜의 이진 형식**으로 인해 침입 탐지 및 방지 시스템 (IDS/IPS) 우회 가능성을 제공하지만, 이 기능은 확인되지 않았습니다. 정상적인 Metasploit Tomcat exploit을 `127.0.0.1:80`으로 전송하여 대상 시스템을 효과적으로 제어할 수 있습니다.
2024-02-08 21:36:35 +00:00
```bash
msf exploit(tomcat_mgr_deploy) > show options
```
2024-02-10 21:30:13 +00:00
## 참고 자료
2024-02-08 21:36:35 +00:00
* [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
2022-10-03 13:43:01 +00:00
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
2022-04-28 16:01:33 +00:00
2023-12-04 15:45:05 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
2024-02-10 21:30:13 +00:00
경험 많은 해커와 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
2022-11-05 09:07:43 +00:00
2024-02-10 21:30:13 +00:00
**해킹 통찰력**\
해킹의 스릴과 도전에 대해 자세히 알아보는 콘텐츠에 참여하세요.
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
**실시간 해킹 뉴스**\
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요.
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
**최신 공지사항**\
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 최신 정보를 받아보세요.
2023-02-27 09:28:45 +00:00
2024-02-10 21:30:13 +00:00
**[Discord](https://discord.com/invite/N3FrSbmwdy)**에 가입하여 최고의 해커들과 협업을 시작하세요!
2022-11-05 09:07:43 +00:00
2022-10-03 13:43:01 +00:00
<details>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-01-03 10:42:55 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
2022-04-28 16:01:33 +00:00
</details>