8009 - Pentesting Apache JServ Protocol (AJP)

Reading time: 4 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Informazioni di base

Da 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 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'

Questa è una vulnerabilità LFI che consente di ottenere alcuni file come WEB-INF/web.xml che contiene credenziali. Questo è un exploit 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

Proxy AJP

Nginx Reverse Proxy + AJP

(Controlla la versione Dockerizzata)

È 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.

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

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks