8009 - Pentesting Apache JServ Protocol (AJP)

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Basic Information

From: 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 a Tomcat per i contenuti relativi a Tomcat.

Also interesting:

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.

Default port: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

Se la porta AJP è esposta, Tomcat potrebbe essere suscettibile alla vulnerabilità Ghostcat. Ecco un exploit che funziona con questo problema.

Ghostcat è una vulnerabilità LFI, ma in qualche modo ristretta: possono essere estratti solo file da un certo percorso. Tuttavia, questo può includere file come WEB-INF/web.xml che possono leakare informazioni importanti come le credenziali per l'interfaccia Tomcat, a seconda della configurazione del server.

Le versioni corrette a partire da 9.0.31, 8.5.51 e 7.0.100 hanno risolto questo problema.

Enumeration

Automatic

nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>

AJP Proxy

Nginx Reverse Proxy & AJP

Controlla la versione Dockerizzata

Quando ci imbattiamo in una porta proxy AJP aperta (8009 TCP), possiamo utilizzare Nginx con il ajp_module per accedere al "nascosto" Tomcat Manager. Questo può essere fatto compilando il codice sorgente di Nginx e aggiungendo il modulo richiesto, come segue:

  • Scarica il codice sorgente di Nginx

  • Scarica il modulo richiesto

  • Compila il codice sorgente di Nginx con il ajp_module.

  • Crea un file di configurazione che punta alla porta AJP

# 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

Commenta l'intero blocco server e aggiungi le seguenti righe all'interno del blocco http in /etc/nginx/conf/nginx.conf.

upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

Avvia Nginx e controlla se tutto funziona correttamente emettendo una richiesta cURL al tuo host locale.

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>
<SNIP>

Nginx versione Dockerizzata

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.

docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy

Apache AJP Proxy

Incontrare una porta 8009 aperta senza altre porte web accessibili è raro. Tuttavia, è ancora possibile sfruttarla utilizzando Metasploit. Sfruttando Apache come proxy, le richieste possono essere reindirizzate a Tomcat sulla porta 8009.

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

Questa configurazione offre la possibilità di bypassare i sistemi di rilevamento e prevenzione delle intrusioni (IDS/IPS) a causa della natura binaria del protocollo AJP, sebbene questa capacità non sia stata verificata. Direzionando un exploit Tomcat di Metasploit regolare a 127.0.0.1:80, puoi effettivamente prendere il controllo del sistema target.

msf  exploit(tomcat_mgr_deploy) > show options

Riferimenti

Unisciti al HackenProof Discord server per comunicare con hacker esperti e cacciatori di bug bounty!

Approfondimenti sul hacking Interagisci con contenuti che esplorano l'emozione e le sfide dell'hacking

Notizie di hacking in tempo reale Rimani aggiornato con il mondo frenetico dell'hacking attraverso notizie e approfondimenti in tempo reale

Ultimi annunci Rimani informato sui nuovi bug bounty in arrivo e aggiornamenti cruciali della piattaforma

Unisciti a noi su Discord e inizia a collaborare con i migliori hacker oggi stesso!

Supporta HackTricks

Last updated