mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
88 lines
3.5 KiB
Markdown
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}}
|