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

205 lines
9.9 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 (380).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!
## Podstawowe informacje
From: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP to protokół sieciowy. Jest to zoptymalizowana wersja protokołu HTTP, która pozwala samodzielnemu serwerowi internetowemu, takiemu jak [Apache](http://httpd.apache.org/), komunikować się z Tomcatem. Historycznie, Apache był znacznie szybszy niż Tomcat w serwowaniu statycznej zawartości. Idea polega na tym, aby pozwolić Apache'owi serwować statyczną zawartość, gdy to możliwe, ale przekazywać żądanie do Tomcata w przypadku zawartości związanej z Tomcatem.
Również interesujące:
> Protokół ajp13 jest zorientowany na pakiety. Format binarny został prawdopodobnie wybrany zamiast bardziej czytelnego tekstu zwykłego z powodów wydajnościowych. Serwer internetowy komunikuje się z kontenerem servletów za pośrednictwem połączeń TCP. Aby ograniczyć kosztowny proces tworzenia gniazd, serwer internetowy będzie starał się utrzymywać trwałe połączenia TCP z kontenerem servletów i ponownie wykorzystywać połączenie do wielu cykli żądanie/odpowiedź.
**Domyślny port:** 8009
```
PORT STATE SERVICE
8009/tcp open ajp13
```
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
Jeśli port AJP jest wystawiony, Tomcat może być podatny na lukę Ghostcat. Oto [eksploit](https://www.exploit-db.com/exploits/48143), który działa z tym problemem.
Ghostcat to luka LFI, ale w pewnym stopniu ograniczona: można pobierać tylko pliki z określonej ścieżki. Mimo to, mogą to być pliki takie jak `WEB-INF/web.xml`, które mogą ujawniać ważne informacje, takie jak dane uwierzytelniające do interfejsu Tomcat, w zależności od konfiguracji serwera.
Poprawione wersje w wersji 9.0.31 lub wyższej, 8.5.51 i 7.0.100 naprawiły ten problem.
## Enumeration
### Automatic
```bash
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
```
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#ajp)
## AJP Proxy
### Nginx Reverse Proxy & AJP
[Sprawdź wersję Dockerową](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)
Kiedy napotykamy otwarty port proxy AJP (8009 TCP), możemy użyć Nginx z `ajp_module`, aby uzyskać dostęp do "ukrytego" Menedżera Tomcat. Można to zrobić, kompilując kod źródłowy Nginx i dodając wymagany moduł, w następujący sposób:
* Pobierz kod źródłowy Nginx
* Pobierz wymagany moduł
* Skompiluj kod źródłowy Nginx z `ajp_module`.
* Utwórz plik konfiguracyjny wskazujący na port 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
```
Skomentuj cały blok `server` i dodaj następujące linie wewnątrz bloku `http` w `/etc/nginx/conf/nginx.conf`.
```shell-session
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
```
Uruchom Nginx i sprawdź, czy wszystko działa poprawnie, wydając żądanie cURL do swojego lokalnego hosta.
```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 w wersji Dockerowej
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
Zamień `TARGET-IP` w `nginx.conf` na AJP IP, a następnie zbuduj i uruchom.
```bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
### Apache AJP Proxy
Napotkanie otwartego portu 8009 bez innych dostępnych portów webowych jest rzadkie. Jednak nadal możliwe jest jego wykorzystanie za pomocą **Metasploit**. Wykorzystując **Apache** jako proxy, żądania mogą być przekierowywane do **Tomcat** na porcie 8009.
```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
```
To ustawienie oferuje potencjał do obejścia systemów wykrywania i zapobiegania włamaniom (IDS/IPS) z powodu **binarnej natury protokołu AJP**, chociaż ta zdolność nie została zweryfikowana. Kierując regularny exploit Metasploit Tomcat do `127.0.0.1:80`, możesz skutecznie przejąć kontrolę nad docelowym systemem.
```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 (380).png" alt=""><figcaption></figcaption></figure>
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
**Hacking Insights**\
Zaangażuj się w treści, które zgłębiają dreszczyk emocji i wyzwania związane z hackingiem
**Real-Time Hack News**\
Bądź na bieżąco z dynamicznym światem hackingu dzięki wiadomościom i spostrzeżeniom w czasie rzeczywistym
**Latest Announcements**\
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
{% endhint %}