mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
88 lines
3.7 KiB
Markdown
88 lines
3.7 KiB
Markdown
# 8009 - Pentesting Apache JServ Protocol (AJP)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
## Informations de base
|
|
|
|
From [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. C'est une version optimisée du protocole HTTP pour permettre à 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 c'est possible, mais de faire passer la requête à Tomcat pour le contenu lié à Tomcat.
|
|
|
|
Aussi intéressant :
|
|
|
|
> Le protocole ajp13 est orienté paquet. Un format binaire a probablement é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 processus coûteux de 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 requête/réponse.
|
|
|
|
**Port par défaut :** 8009
|
|
```
|
|
PORT STATE SERVICE
|
|
8009/tcp open ajp13
|
|
```
|
|
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
|
|
|
|
C'est une vulnérabilité LFI qui permet d'accéder à certains fichiers comme `WEB-INF/web.xml` qui contient des identifiants. C'est un [exploit](https://www.exploit-db.com/exploits/48143) pour abuser de la vulnérabilité et les ports exposés AJP pourraient y être vulnérables.
|
|
|
|
Les versions corrigées sont à partir de 9.0.31, 8.5.51 et 7.0.100.
|
|
|
|
## Enumeration
|
|
|
|
### Automatic
|
|
```bash
|
|
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
|
```
|
|
### [**Brute force**](../generic-hacking/brute-force.md#ajp)
|
|
|
|
## Proxy AJP
|
|
|
|
### Nginx Reverse Proxy + AJP
|
|
|
|
([Consultez la version Dockerisée](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
|
|
|
|
Il est possible de communiquer avec un port proxy AJP ouvert (8009 TCP) en utilisant le module apache `ajp_module` de Nginx et d'accéder au Tomcat Manager depuis ce port, ce qui pourrait finalement conduire à une RCE sur le serveur vulnérable.
|
|
|
|
- Commencez par télécharger Nginx depuis [https://nginx.org/en/download.html](https://nginx.org/en/download.html) puis compilez-le avec le module ajp :
|
|
```bash
|
|
# Compile Nginx with the ajp module
|
|
git clone https://github.com/dvershinin/nginx_ajp_module.git
|
|
cd nginx-version
|
|
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
|
|
```
|
|
- Ensuite, commentez le bloc `server` et ajoutez ce qui suit dans le bloc `http` dans `/etc/nginx/conf/nginx.conf`.
|
|
```json
|
|
upstream tomcats {
|
|
server <TARGET_SERVER>:8009;
|
|
keepalive 10;
|
|
}
|
|
server {
|
|
listen 80;
|
|
location / {
|
|
ajp_keep_conn on;
|
|
ajp_pass tomcats;
|
|
}
|
|
}
|
|
```
|
|
- Enfin, démarrez nginx (`sudo nginx`) et vérifiez qu'il fonctionne en accédant à `http://127.0.0.1`
|
|
|
|
### Version Dockerisée de Nginx
|
|
```bash
|
|
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
|
|
cd nginx-ajp-docker
|
|
```
|
|
Remplacez `TARGET-IP` dans `nginx.conf` par l'IP AJP, puis construisez et exécutez.
|
|
```bash
|
|
docker build . -t nginx-ajp-proxy
|
|
docker run -it --rm -p 80:80 nginx-ajp-proxy
|
|
```
|
|
### Proxy AJP Apache
|
|
|
|
Il est également possible d'utiliser un **proxy AJP Apache** pour accéder à ce port au lieu de **Nginx**.
|
|
|
|
## Références
|
|
|
|
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|