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

249 lines
14 KiB
Markdown
Raw Normal View History

2022-05-01 13:25:53 +00:00
# 8009 - Pentesting Apache JServ Protocol (AJP)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
2023-06-03 13:10:46 +00:00
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-11-05 09:07:43 +00:00
**HackenProof est la plateforme des primes de bugs cryptographiques.**
2023-02-27 09:28:45 +00:00
**Obtenez des récompenses sans délai**\
Les primes HackenProof sont lancées uniquement lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
2023-02-27 09:28:45 +00:00
**Acquérez de l'expérience en pentesting web3**\
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 dès ses débuts.
2023-02-27 09:28:45 +00:00
**Devenez la légende du hacker web3**\
Gagnez des points de réputation avec chaque bug vérifié et conquérez le sommet du classement hebdomadaire.
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos piratages !
{% embed url="https://hackenproof.com/register" %}
2022-11-05 09:07:43 +00:00
2023-06-03 13:10:46 +00:00
## Informations de base
À partir de : [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP est un protocole de communication. Il s'agit d'une version optimisée du protocole HTTP permettant à un serveur web autonome tel qu'[Apache](http://httpd.apache.org/) de communiquer avec Tomcat. Historiquement, Apache a été beaucoup plus rapide que Tomcat pour servir du contenu statique. L'idée est de laisser Apache servir le contenu statique lorsque cela est possible, mais de faire proxy de la demande vers Tomcat pour le contenu lié à Tomcat.
2023-06-03 13:10:46 +00:00
Aussi intéressant :
> Le protocole ajp13 est orienté paquets. Un format binaire a été choisi plutôt que le texte brut plus lisible pour des raisons de performance. Le serveur web communique avec le conteneur de servlets via des connexions TCP. Pour réduire le coût élevé de la création de sockets, le serveur web tentera de maintenir des connexions TCP persistantes avec le conteneur de servlets et de réutiliser une connexion pour plusieurs cycles de demande/réponse.
2023-06-03 13:10:46 +00:00
**Port par défaut :** 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)
2023-06-03 13:10:46 +00:00
Si le port AJP est exposé, Tomcat pourrait être vulnérable à la vulnérabilité Ghostcat. Voici une [exploit](https://www.exploit-db.com/exploits/48143) qui fonctionne avec ce problème.
Ghostcat est une vulnérabilité LFI, mais quelque peu restreinte : seuls les fichiers d'un certain chemin peuvent être extraits. Cela peut néanmoins inclure des fichiers tels que `WEB-INF/web.xml`, qui peuvent divulguer des informations importantes telles que les identifiants de l'interface Tomcat, en fonction de la configuration du serveur.
Les versions corrigées à partir de 9.0.31, 8.5.51 et 7.0.100 ont résolu ce problème.
2023-06-03 13:10:46 +00:00
## Énumération
2023-06-03 13:10:46 +00:00
### Automatique
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
```
2022-10-03 13:43:01 +00:00
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#ajp)
## AJP Proxy
2022-10-03 13:43:01 +00:00
### Proxy AJP
2022-10-03 13:43:01 +00:00
Il est rare de trouver le port 8009 ouvert et aucun autre port web ouvert. Dans ce cas, il serait intéressant d'utiliser des outils existants comme Metasploit pour le pirater, n'est-ce pas ? Comme indiqué dans l'une des citations, vous pouvez (ab)user d'Apache pour faire proxy des requêtes vers le port 8009 de Tomcat. Dans les références, vous trouverez un guide détaillé sur la façon de le faire (lisez-le d'abord), ce qui suit est simplement un aperçu des commandes que j'ai utilisées sur ma propre machine. J'ai omis certaines des instructions originales car elles ne semblaient pas nécessaires.
2022-10-03 13:43:01 +00:00
```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
```
Un effet secondaire intéressant de l'utilisation de cette configuration est que vous pourriez contrecarrer les systèmes IDS/IPS en place, car le protocole AJP est quelque peu binaire, mais je n'ai pas vérifié cela. Maintenant, vous pouvez simplement pointer votre exploit tomcat habituel de Metasploit vers 127.0.0.1:80 et prendre le contrôle de ce système. Voici également la sortie de Metasploit :
2022-10-03 13:43:01 +00:00
```bash
msf exploit(tomcat_mgr_deploy) > show options
Module options (exploit/multi/http/tomcat_mgr_deploy):
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD tomcat no The password for the specified username
PATH /manager yes The URI path of the manager app (/deploy and /undeploy will be used)
Proxies no Use a proxy chain
RHOST localhost yes The target address
RPORT 80 yes The target port
USERNAME tomcat no The username to authenticate as
VHOST no HTTP server virtual host
```
### Proxy inverse Nginx & AJP
[Vérifiez la version Dockerisée](#Version-Dockerisée)
Lorsque nous rencontrons un port proxy AJP ouvert (8009 TCP), nous pouvons utiliser Nginx avec le module `ajp_module` pour accéder au gestionnaire Tomcat "caché". Cela peut être fait en compilant le code source de Nginx et en ajoutant le module requis, comme suit:
2023-06-03 13:10:46 +00:00
* Téléchargez le code source de Nginx
* Téléchargez le module requis
* Compilez le code source de Nginx avec le `ajp_module`.
2023-06-03 13:10:46 +00:00
* Créez un fichier de configuration pointant vers le port 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
```
2023-06-03 13:10:46 +00:00
Commentez l'intégralité du bloc `server` et ajoutez les lignes suivantes à l'intérieur du bloc `http` dans `/etc/nginx/conf/nginx.conf`.
2022-10-03 13:43:01 +00:00
```shell-session
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
2022-10-03 13:43:01 +00:00
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
2022-10-03 13:43:01 +00:00
}
```
Démarrez Nginx et vérifiez si tout fonctionne correctement en effectuant une requête cURL vers votre hôte local.
2022-10-03 13:43:01 +00:00
```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>
2022-10-03 13:43:01 +00:00
<SNIP>
```
### Version Dockerisée
The Dockerized version of Apache JServ Protocol (AJP) is a convenient way to deploy and test AJP-based applications in a containerized environment. By using Docker, you can easily set up and manage the AJP server and its associated services.
To get started with the Dockerized version of AJP, follow these steps:
1. Install Docker on your system if you haven't already done so. Docker provides installation instructions for various operating systems on their website.
2. Pull the AJP Docker image from the Docker Hub repository by running the following command:
```
docker pull ajp-image:latest
```
This will download the latest version of the AJP Docker image to your local machine.
3. Once the image is downloaded, you can create a new Docker container using the following command:
```
docker run -d -p 8009:8009 --name ajp-container ajp-image:latest
```
This command will create a new Docker container named "ajp-container" and map port 8009 of the container to port 8009 of the host system.
4. Verify that the AJP server is running by accessing the following URL in your web browser:
```
http://localhost:8009
```
If the AJP server is running correctly, you should see a default landing page or a response indicating that the server is up and running.
5. You can now deploy your AJP-based applications to the Docker container and test them in the containerized environment.
By using the Dockerized version of AJP, you can easily manage and test AJP-based applications without the need for complex setup and configuration. Docker provides a lightweight and portable environment for running AJP servers, making it an ideal choice for development and testing purposes.
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
Remplacez `TARGET-IP` dans `nginx.conf` par l'adresse IP AJP, puis compilez et exécutez.
``` bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
2023-06-03 13:10:46 +00:00
## Références
2022-04-28 16:01:33 +00:00
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
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProof est la plateforme des primes de bugs cryptographiques.**
**Obtenez des récompenses sans délai**\
Les primes HackenProof sont lancées uniquement lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
2022-11-05 09:07:43 +00:00
**Acquérez de l'expérience en pentest web3**\
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 dès ses débuts.
2023-02-27 09:28:45 +00:00
**Devenez une légende du hacking web3**\
Gagnez des points de réputation avec chaque bug vérifié et conquérez le sommet du classement hebdomadaire.
2023-02-27 09:28:45 +00:00
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos hacks !
2023-02-27 09:28:45 +00:00
{% embed url="https://hackenproof.com/register" %}
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
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2023-06-03 13:10:46 +00:00
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>