mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
205 lines
10 KiB
Markdown
205 lines
10 KiB
Markdown
# 8009 - Pentesting Apache JServ Protocol (AJP)
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
<figure><img src="/.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
|
|
|
|
**Hacking Insights**\
|
|
Engage with content that delves into the thrill and challenges of hacking
|
|
|
|
**Real-Time Hack News**\
|
|
Keep up-to-date with fast-paced hacking world through real-time news and insights
|
|
|
|
**Latest Announcements**\
|
|
Stay informed with the newest bug bounties launching and crucial platform updates
|
|
|
|
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
|
|
|
|
## 기본 정보
|
|
|
|
From: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
|
|
|
|
> AJP는 전송 프로토콜입니다. 독립형 웹 서버인 [Apache](http://httpd.apache.org/)가 Tomcat과 통신할 수 있도록 HTTP 프로토콜의 최적화된 버전입니다. 역사적으로 Apache는 정적 콘텐츠를 제공하는 데 Tomcat보다 훨씬 빠릅니다. 아이디어는 가능한 경우 Apache가 정적 콘텐츠를 제공하고, Tomcat 관련 콘텐츠에 대해서는 요청을 Tomcat으로 프록시하는 것입니다.
|
|
|
|
또한 흥미로운 점:
|
|
|
|
> ajp13 프로토콜은 패킷 지향입니다. 성능상의 이유로 더 읽기 쉬운 일반 텍스트보다 이진 형식이 선택된 것으로 보입니다. 웹 서버는 TCP 연결을 통해 서블릿 컨테이너와 통신합니다. 소켓 생성의 비싼 프로세스를 줄이기 위해 웹 서버는 서블릿 컨테이너에 대한 지속적인 TCP 연결을 유지하고 여러 요청/응답 주기를 위해 연결을 재사용하려고 시도합니다.
|
|
|
|
**기본 포트:** 8009
|
|
```
|
|
PORT STATE SERVICE
|
|
8009/tcp open ajp13
|
|
```
|
|
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
|
|
|
|
AJP 포트가 노출되면 Tomcat은 Ghostcat 취약점에 노출될 수 있습니다. 이 문제와 관련된 [익스플로잇](https://www.exploit-db.com/exploits/48143)이 있습니다.
|
|
|
|
Ghostcat은 LFI 취약점이지만 다소 제한적입니다: 특정 경로의 파일만 가져올 수 있습니다. 그럼에도 불구하고, 이는 서버 설정에 따라 Tomcat 인터페이스의 자격 증명과 같은 중요한 정보를 유출할 수 있는 `WEB-INF/web.xml`과 같은 파일을 포함할 수 있습니다.
|
|
|
|
9.0.31, 8.5.51 및 7.0.100 이상의 패치된 버전에서 이 문제가 수정되었습니다.
|
|
|
|
## Enumeration
|
|
|
|
### Automatic
|
|
```bash
|
|
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
|
```
|
|
### [**브루트 포스**](../generic-methodologies-and-resources/brute-force.md#ajp)
|
|
|
|
## AJP 프록시
|
|
|
|
### Nginx 리버스 프록시 & AJP
|
|
|
|
[도커화된 버전 확인하기](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)
|
|
|
|
열린 AJP 프록시 포트(8009 TCP)를 발견하면, `ajp_module`을 사용하여 Nginx로 "숨겨진" Tomcat Manager에 접근할 수 있습니다. 이는 Nginx 소스 코드를 컴파일하고 필요한 모듈을 추가하여 수행할 수 있습니다:
|
|
|
|
* Nginx 소스 코드 다운로드
|
|
* 필요한 모듈 다운로드
|
|
* `ajp_module`과 함께 Nginx 소스 코드 컴파일
|
|
* AJP 포트를 가리키는 구성 파일 생성
|
|
```bash
|
|
# 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
|
|
```
|
|
`server` 블록 전체를 주석 처리하고 `/etc/nginx/conf/nginx.conf`의 `http` 블록 안에 다음 줄을 추가합니다.
|
|
```shell-session
|
|
upstream tomcats {
|
|
server <TARGET_SERVER>:8009;
|
|
keepalive 10;
|
|
}
|
|
server {
|
|
listen 80;
|
|
location / {
|
|
ajp_keep_conn on;
|
|
ajp_pass tomcats;
|
|
}
|
|
}
|
|
```
|
|
Nginx를 시작하고 로컬 호스트에 cURL 요청을 발행하여 모든 것이 올바르게 작동하는지 확인하십시오.
|
|
```html
|
|
sudo nginx
|
|
curl http://127.0.0.1:80
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<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>
|
|
<SNIP>
|
|
```
|
|
### Nginx 도커화 버전
|
|
```bash
|
|
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
|
|
cd nginx-ajp-docker
|
|
```
|
|
`nginx.conf`에서 `TARGET-IP`를 AJP IP로 교체한 후 빌드하고 실행합니다.
|
|
```bash
|
|
docker build . -t nginx-ajp-proxy
|
|
docker run -it --rm -p 80:80 nginx-ajp-proxy
|
|
```
|
|
### Apache AJP Proxy
|
|
|
|
열려 있는 포트 8009를 다른 접근 가능한 웹 포트 없이 만나는 것은 드뭅니다. 그러나 **Metasploit**을 사용하여 이를 악용하는 것은 여전히 가능합니다. **Apache**를 프록시로 활용하여 요청을 포트 8009의 **Tomcat**으로 리디렉션할 수 있습니다.
|
|
```bash
|
|
sudo apt-get install libapache2-mod-jk
|
|
sudo vim /etc/apache2/apache2.conf # append the following line to the config
|
|
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/
|
|
sudo a2enmod proxy_http
|
|
sudo a2enmod proxy_ajp
|
|
sudo systemctl restart apache2
|
|
```
|
|
이 설정은 **AJP 프로토콜의 이진 특성**으로 인해 침입 탐지 및 방지 시스템(IDS/IPS)을 우회할 수 있는 잠재력을 제공합니다. 이 기능은 검증되지 않았습니다. 일반 Metasploit Tomcat 익스플로잇을 `127.0.0.1:80`으로 전송하면 대상 시스템을 효과적으로 장악할 수 있습니다.
|
|
```bash
|
|
msf exploit(tomcat_mgr_deploy) > show options
|
|
```
|
|
## References
|
|
|
|
* [https://github.com/yaoweibin/nginx\_ajp\_module](https://github.com/yaoweibin/nginx\_ajp\_module)
|
|
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
|
|
|
|
<figure><img src="/.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
|
|
|
|
**Hacking Insights**\
|
|
해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.
|
|
|
|
**Real-Time Hack News**\
|
|
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 최신 상태로 유지하세요.
|
|
|
|
**Latest Announcements**\
|
|
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
|
|
|
|
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하세요!
|
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
|
|
|
</details>
|
|
{% endhint %}
|