hacktricks/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md
2024-02-10 15:36:32 +00:00

236 lines
13 KiB
Markdown

# 8009 - Pentesting Apache JServ Protocol (AJP)
<details>
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
**Hacking Insights**\
Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen.
**Echtzeit-Hack-News**\
Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden.
**Neueste Ankündigungen**\
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert.
**Treten Sie uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
## Grundlegende Informationen
Von: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP ist ein Drahtprotokoll. Es handelt sich um eine optimierte Version des HTTP-Protokolls, mit der ein eigenständiger Webserver wie [Apache](http://httpd.apache.org/) mit Tomcat kommunizieren kann. Historisch gesehen war Apache beim Bereitstellen statischer Inhalte viel schneller als Tomcat. Die Idee besteht darin, Apache den statischen Inhalt bereitstellen zu lassen, wenn möglich, aber die Anfrage für Tomcat-bezogene Inhalte an Tomcat weiterzuleiten.
Auch interessant:
> Das ajp13-Protokoll ist paketorientiert. Ein binäres Format wurde vermutlich aus Gründen der Leistung gegenüber dem lesbareren Klartext gewählt. Der Webserver kommuniziert über TCP-Verbindungen mit dem Servlet-Container. Um den teuren Vorgang der Socket-Erstellung zu reduzieren, versucht der Webserver, persistente TCP-Verbindungen zum Servlet-Container aufrechtzuerhalten und eine Verbindung für mehrere Anfrage-/Antwortzyklen wiederzuverwenden.
**Standardport:** 8009
```
PORT STATE SERVICE
8009/tcp open ajp13
```
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
Wenn der AJP-Port freigegeben ist, könnte Tomcat anfällig für die Ghostcat-Schwachstelle sein. Hier ist ein [Exploit](https://www.exploit-db.com/exploits/48143), der mit diesem Problem funktioniert.
Ghostcat ist eine LFI-Schwachstelle, jedoch etwas eingeschränkt: Es können nur Dateien aus einem bestimmten Pfad abgerufen werden. Dennoch können dies Dateien wie `WEB-INF/web.xml` sein, die wichtige Informationen wie Anmeldeinformationen für die Tomcat-Schnittstelle preisgeben können, abhängig von der Serverkonfiguration.
Gepatchte Versionen ab 9.0.31, 8.5.51 und 7.0.100 haben dieses Problem behoben.
## Enumeration
### Automatisch
```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
[Überprüfen Sie die Docker-Version](#Dockerized-version)
Wenn wir auf einen offenen AJP-Proxy-Port (8009 TCP) stoßen, können wir Nginx mit dem `ajp_module` verwenden, um auf den "versteckten" Tomcat Manager zuzugreifen. Dies kann erreicht werden, indem der Nginx-Quellcode heruntergeladen und das erforderliche Modul hinzugefügt wird, wie folgt:
* Den Nginx-Quellcode herunterladen
* Das erforderliche Modul herunterladen
* Den Nginx-Quellcode mit dem `ajp_module` kompilieren.
* Eine Konfigurationsdatei erstellen, die auf den AJP-Port verweist
```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
```
Kommentieren Sie den gesamten `server`-Block aus und fügen Sie die folgenden Zeilen innerhalb des `http`-Blocks in `/etc/nginx/conf/nginx.conf` an.
```shell-session
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
```
Starten Sie Nginx und überprüfen Sie, ob alles korrekt funktioniert, indem Sie eine cURL-Anfrage an Ihren lokalen Host senden.
```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 Dockerisierte Version
Nginx is a popular web server and reverse proxy server that is often used to serve static content, handle SSL/TLS termination, and load balance traffic to backend servers. In recent years, containerization has become a popular way to deploy and manage applications, and Docker has emerged as a leading containerization platform. Docker allows you to package an application and its dependencies into a container, which can then be run on any system that has Docker installed.
To run Nginx in a Docker container, you first need to create a Dockerfile. This file specifies the base image to use, any additional packages to install, and the commands to run when the container starts. Here is an example Dockerfile for running Nginx:
```docker
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
In this Dockerfile, we start with the latest version of the Nginx base image. We then copy our custom configuration files, `nginx.conf` and `default.conf`, into the appropriate locations in the container. The `EXPOSE` directive tells Docker to expose port 80, which is the default port for HTTP traffic. Finally, the `CMD` directive specifies the command to run when the container starts, which in this case is `nginx -g "daemon off;"`.
Once you have created the Dockerfile, you can build the Docker image by running the following command in the same directory as the Dockerfile:
```bash
docker build -t my-nginx .
```
This command tells Docker to build an image with the tag `my-nginx` using the Dockerfile in the current directory. The `-t` flag specifies the tag to use, and the `.` at the end of the command specifies the build context, which is the current directory.
After the image has been built, you can run a container based on that image by running the following command:
```bash
docker run -d -p 80:80 my-nginx
```
This command tells Docker to run a container based on the `my-nginx` image in detached mode (`-d`), and to map port 80 on the host to port 80 in the container (`-p 80:80`). This allows you to access the Nginx server running in the container from your host machine.
You can then access the Nginx server by opening a web browser and navigating to `http://localhost`. If everything is set up correctly, you should see the default Nginx welcome page.
That's it! You now have a Dockerized version of Nginx up and running. You can customize the configuration files and add additional features as needed.
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
Ersetzen Sie `TARGET-IP` in `nginx.conf` durch die AJP-IP, dann bauen und ausführen.
``` bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
### Apache AJP-Proxy
Das Auftreten eines offenen Ports 8009 ohne andere zugängliche Web-Ports ist selten. Es ist jedoch immer noch möglich, ihn mit **Metasploit** auszunutzen. Durch die Nutzung von **Apache** als Proxy können Anfragen auf den Port 8009 von **Tomcat** umgeleitet werden.
```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
```
Diese Konfiguration bietet das Potenzial, Intrusion Detection und Prevention Systeme (IDS/IPS) zu umgehen, aufgrund der binären Natur des AJP-Protokolls, obwohl diese Fähigkeit nicht verifiziert wurde. Indem Sie einen regulären Metasploit Tomcat-Exploit auf `127.0.0.1:80` lenken, können Sie effektiv die Kontrolle über das Zielssystem übernehmen.
```bash
msf exploit(tomcat_mgr_deploy) > show options
```
## Referenzen
* [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 (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
**Hacking Insights**\
Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen.
**Echtzeit-Hack-News**\
Bleiben Sie mit den neuesten Nachrichten und Einblicken aus der schnelllebigen Hacking-Welt auf dem Laufenden.
**Neueste Ankündigungen**\
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert.
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
<details>
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
</details>