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

88 lines
3.5 KiB
Markdown

# 8009 - Pentesting Apache JServ Protocol (AJP)
{{#include ../banners/hacktricks-training.md}}
## Informazioni di base
Da [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP è un protocollo di rete. È una versione ottimizzata del protocollo HTTP per consentire a un server web autonomo come [Apache](http://httpd.apache.org/) di comunicare con Tomcat. Storicamente, Apache è stato molto più veloce di Tomcat nel servire contenuti statici. L'idea è di lasciare che Apache serva i contenuti statici quando possibile, ma di fare da proxy per la richiesta ai contenuti relativi a Tomcat.
Anche interessante:
> Il protocollo ajp13 è orientato ai pacchetti. Un formato binario è presumibilmente stato scelto rispetto al testo semplice più leggibile per motivi di prestazioni. Il server web comunica con il contenitore servlet tramite connessioni TCP. Per ridurre il costoso processo di creazione di socket, il server web tenterà di mantenere connessioni TCP persistenti con il contenitore servlet e di riutilizzare una connessione per più cicli di richiesta/riposta.
**Porta predefinita:** 8009
```
PORT STATE SERVICE
8009/tcp open ajp13
```
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
Questa è una vulnerabilità LFI che consente di ottenere alcuni file come `WEB-INF/web.xml` che contiene credenziali. Questo è un [exploit](https://www.exploit-db.com/exploits/48143) per abusare della vulnerabilità e le porte AJP esposte potrebbero essere vulnerabili ad essa.
Le versioni corrette sono 9.0.31 o superiori, 8.5.51 e 7.0.100.
## Enumerazione
### Automatica
```bash
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
```
### [**Forza bruta**](../generic-hacking/brute-force.md#ajp)
## Proxy AJP
### Nginx Reverse Proxy + AJP
([Controlla la versione Dockerizzata](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
È possibile comunicare con una porta proxy AJP aperta (8009 TCP) utilizzando il modulo apache `ajp_module` di Nginx e accedere al Tomat Manager da questa porta, il che potrebbe portare a RCE nel server vulnerabile.
- Inizia a scaricare Nginx da [https://nginx.org/en/download.html](https://nginx.org/en/download.html) e poi compila con il modulo 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
```
- Quindi, commenta il blocco `server` e aggiungi quanto segue nel blocco `http` in `/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;
}
}
```
- Infine, avvia nginx (`sudo nginx`) e controlla che funzioni accedendo a `http://127.0.0.1`
### Versione Dockerizzata di Nginx
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
Sostituisci `TARGET-IP` in `nginx.conf` con l'IP AJP, quindi costruisci ed esegui.
```bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
### Apache AJP Proxy
È anche possibile utilizzare un **Apache AJP proxy** per accedere a quella porta invece di **Nginx**.
## References
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
{{#include ../banners/hacktricks-training.md}}