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

10 KiB

8009 - Pentesting Apache JServ Protocol (AJP)

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!

Hacking-Einblicke
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 bei und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!

Grundlegende Informationen

Von: 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, die einem eigenständigen Webserver wie Apache ermöglicht, mit Tomcat zu kommunizieren. Historisch gesehen war Apache beim Bereitstellen von statischem Inhalt viel schneller als Tomcat. Die Idee ist, Apache den statischen Inhalt bereitstellen zu lassen, wenn möglich, aber die Anfrage an Tomcat für tomcatbezogenen Inhalt weiterzuleiten.

Auch interessant:

Das ajp13-Protokoll ist paketorientiert. Ein binäres Format wurde vermutlich aus Leistungsgründen anstelle des lesbareren Klartexts gewählt. Der Webserver kommuniziert über TCP-Verbindungen mit dem Servlet-Container. Um den teuren Prozess der Socket-Erstellung zu reduzieren, wird der Webserver versuchen, 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'

Wenn der AJP-Port freigelegt ist, könnte Tomcat anfällig für die Ghostcat-Schwachstelle sein. Hier ist ein Exploit, 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 darunter Dateien wie WEB-INF/web.xml fallen, die wichtige Informationen wie Anmeldeinformationen für die Tomcat-Schnittstelle preisgeben können, abhängig von der Serverkonfiguration.

Behobene Versionen ab 9.0.31, 8.5.51 und 7.0.100 haben dieses Problem behoben.

Enumeration

Automatisch

nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>

Brute Force

AJP-Proxy

Nginx-Reverse-Proxy & AJP

Überprüfen Sie die Dockerisierte 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 man den Nginx-Quellcode herunterlädt und das erforderliche Modul hinzufügt, 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 zeigt
# 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 {
-#     listen 80;
-#     server_name example.com;
-#     location / {
-#         root /var/www/html;
-#         index index.html;
-#     }
-# }
+    location /secret {
+        root /var/www/hidden;
+        index confidential.html;
+    }
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

Starte Nginx und überprüfe, ob alles korrekt funktioniert, indem du eine cURL-Anfrage an deinen lokalen Host sendest.

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

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.

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, dies mit Metasploit auszunutzen. Durch die Nutzung von Apache als Proxy können Anfragen auf den Port 8009 zu Tomcat umgeleitet werden.

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 Systems (IDS/IPS) aufgrund der binären Natur des AJP-Protokolls zu umgehen, obwohl diese Fähigkeit nicht verifiziert wurde. Indem Sie einen regulären Metasploit Tomcat-Exploit auf 127.0.0.1:80 umleiten, können Sie effektiv die Kontrolle über das Zielssystem übernehmen.

msf  exploit(tomcat_mgr_deploy) > show options

Referenzen

Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!

Hacking-Einblicke
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 bei auf Discord und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: