8009 - Pentesting Apache JServ Protocol (AJP)

tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Informaci贸n B谩sica

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

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

bash
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.

bash
# 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.
json
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 funciona accediendo a http://127.0.0.1

Versi贸n Dockerizada de Nginx

bash
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.

bash
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

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks