diff --git a/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md b/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md index 16108a16b..6a7822403 100644 --- a/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md +++ b/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md @@ -33,7 +33,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c De: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/) -> AJP es un protocolo de transmisión. Es una versión optimizada del protocolo HTTP que permite que un servidor web independiente como [Apache](http://httpd.apache.org/) se comunique con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat para servir contenido estático. La idea es permitir que Apache sirva el contenido estático cuando sea posible, pero redirigir la solicitud a Tomcat para el contenido relacionado con Tomcat. +> AJP es un protocolo de comunicación. Es una versión optimizada del protocolo HTTP que permite que un servidor web independiente como [Apache](http://httpd.apache.org/) se comunique con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat para 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 es interesante: @@ -64,7 +64,7 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ### Proxy AJP de Apache -No es común encontrar el puerto 8009 abierto y ningún otro puerto web abierto. En ese caso, sería bueno poder utilizar herramientas existentes como Metasploit para aprovecharlo, ¿verdad? Como se menciona en una de las citas, se puede (ab)usar Apache para redirigir las solicitudes al puerto 8009 de Tomcat. En las referencias encontrarás una guía detallada de cómo hacerlo (léela primero), lo que sigue es solo una descripción general de los comandos que utilicé en mi propia máquina. Omití algunas de las instrucciones originales ya que no parecían ser necesarias. +No es común encontrar el puerto 8009 abierto y ningún otro puerto web abierto. En ese caso, sería bueno poder utilizar herramientas existentes como Metasploit para aprovecharlo, ¿verdad? Como se menciona en una de las citas, se puede (ab)usar Apache para redirigir las solicitudes al puerto 8009 de Tomcat. En las referencias encontrarás una guía detallada de cómo hacerlo (léela primero), lo siguiente es solo un resumen de los comandos que utilicé en mi propia máquina. Omití algunas de las instrucciones originales ya que no parecían ser necesarias. ```bash sudo apt-get install libapache2-mod-jk sudo vim /etc/apache2/apache2.conf # append the following line to the config @@ -100,7 +100,9 @@ VHOST no HTTP server virtual host ``` ### Proxy Inverso de Nginx y AJP -Cuando nos encontramos con un puerto AJP proxy abierto (8009 TCP), 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: +[Ver la versión Dockerizada](#Versión-Dockerizada) + +Cuando nos encontramos con un puerto proxy AJP abierto (8009 TCP), 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 @@ -134,7 +136,7 @@ ajp_pass tomcats; } } ``` -Inicie Nginx y verifique si todo está funcionando correctamente emitiendo una solicitud cURL a su localhost. +Inicie Nginx y verifique si todo está funcionando correctamente emitiendo una solicitud cURL a su host local. ```html sudo nginx curl http://127.0.0.1:80 @@ -168,6 +170,57 @@ curl http://127.0.0.1:80

If you're seeing this, you've successfully installed Tomcat. Congratulations!

``` +### Versión en Docker + +La versión en Docker del protocolo Apache JServ (AJP) es una forma conveniente de ejecutar y probar este protocolo en un entorno aislado. Docker es una plataforma de contenedores que permite empaquetar una aplicación y todas sus dependencias en un contenedor ligero y portátil. + +Para crear una versión en Docker del protocolo AJP, primero debemos crear un archivo Dockerfile. Este archivo contiene las instrucciones para construir la imagen del contenedor. A continuación se muestra un ejemplo de un Dockerfile básico para el protocolo AJP: + +```dockerfile +FROM ubuntu:latest + +# Instalar dependencias +RUN apt-get update && apt-get install -y apache2 + +# Copiar archivos de configuración +COPY ajp.conf /etc/apache2/conf-available/ + +# Habilitar el módulo AJP +RUN a2enconf ajp + +# Exponer el puerto 8009 +EXPOSE 8009 + +# Iniciar el servidor Apache +CMD ["apache2ctl", "-D", "FOREGROUND"] +``` + +En este ejemplo, utilizamos una imagen base de Ubuntu y luego instalamos Apache2 y sus dependencias. Luego, copiamos un archivo de configuración llamado `ajp.conf` a la ubicación adecuada en el contenedor. A continuación, habilitamos el módulo AJP en la configuración de Apache y exponemos el puerto 8009 para que pueda ser accedido desde fuera del contenedor. Por último, iniciamos el servidor Apache en primer plano. + +Una vez que tengamos el Dockerfile, podemos construir la imagen del contenedor utilizando el siguiente comando: + +```bash +docker build -t ajp-server . +``` + +Esto creará una imagen llamada `ajp-server` basada en el Dockerfile. A continuación, podemos ejecutar un contenedor basado en esta imagen utilizando el siguiente comando: + +```bash +docker run -d -p 8009:8009 ajp-server +``` + +Esto ejecutará un contenedor en segundo plano y mapeará el puerto 8009 del contenedor al puerto 8009 del host. Ahora podemos acceder al servidor AJP en `localhost:8009` desde fuera del contenedor. + +La versión en Docker del protocolo AJP es una forma conveniente de ejecutar y probar este protocolo sin tener que instalar y configurar manualmente un servidor Apache en nuestro sistema. Además, al ejecutar el protocolo AJP en un contenedor aislado, podemos asegurarnos de que no haya conflictos con otros servicios o aplicaciones en nuestro sistema. +```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, luego compile y ejecute. +``` bash +docker build . -t nginx-ajp-proxy +docker run -it --rm -p 80:80 nginx-ajp-proxy +``` ## Referencias * [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295) @@ -196,7 +249,7 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c * ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) -* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).