8009 - Pentesting Apache JServ Protocol (AJP)

Tip

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) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información Básica

De 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 proxy 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’

Esta es una vulnerabilidad LFI que permite obtener algunos archivos como WEB-INF/web.xml que contiene credenciales. Este es un exploit para abusar de la vulnerabilidad y los puertos expuestos AJP podrían ser vulnerables a ella.

Las versiones corregidas son 9.0.31 o superiores, 8.5.51, y 7.0.100.

Enumeración

Automático

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

Fuerza bruta

Proxy AJP

Proxy inverso Nginx + AJP

(Consulta la versión Dockerizada)

Es posible comunicarse con un puerto proxy AJP abierto (8009 TCP) utilizando el módulo ajp_module de Apache en Nginx y acceder al Tomcat Manager desde este puerto, lo que podría llevar a RCE en el servidor vulnerable.

# 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
  • Luego, comenta el bloque server y añade lo siguiente en el 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;
}
}
  • Finalmente, inicia nginx (sudo nginx) y verifica que funcione accediendo a http://127.0.0.1

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

Proxy AJP de Apache

También es posible utilizar un proxy AJP de Apache para acceder a ese puerto en lugar de Nginx.

Referencias

Tip

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) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks