mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
189 lines
11 KiB
Markdown
189 lines
11 KiB
Markdown
|
# 8009 - Pentesting Protocolo Apache JServ (AJP)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿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)
|
||
|
* Consigue el [**swag oficial de PEASS y HackTricks**](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)**.**
|
||
|
* **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).
|
||
|
|
||
|
</details>
|
||
|
|
||
|
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||
|
|
||
|
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
|
||
|
|
||
|
🐞 Lee tutoriales de errores web3
|
||
|
|
||
|
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
|
||
|
|
||
|
💬 Participa en discusiones comunitarias
|
||
|
|
||
|
## Información básica
|
||
|
|
||
|
Desde: [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 red. Es una versión optimizada del protocolo HTTP que permite que un servidor web independiente, como [Apache](http://httpd.apache.org/), hable 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 es 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'](https://www.chaitin.cn/en/ghostcat)
|
||
|
|
||
|
Si el puerto AJP está expuesto, Tomcat podría ser susceptible a la vulnerabilidad Ghostcat. Aquí hay un [exploit](https://www.exploit-db.com/exploits/48143) 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 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
|
||
|
```bash
|
||
|
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
||
|
```
|
||
|
### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#ajp)
|
||
|
|
||
|
## Proxy AJP
|
||
|
|
||
|
### Proxy AJP de Apache
|
||
|
|
||
|
No es común encontrar el puerto 8009 abierto y ningún otro puerto web abierto. En ese caso, ¿no sería genial usar herramientas existentes como Metasploit para tomar el control? Como se indica en una de las citas, se puede (ab)usar Apache para hacer de proxy de las solicitudes al puerto 8009 de Tomcat. En las referencias encontrará una guía detallada sobre cómo hacerlo (léala 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.
|
||
|
```bash
|
||
|
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
|
||
|
```
|
||
|
Un buen efecto secundario de usar esta configuración es que podrías frustrar los sistemas IDS/IPS que estén en su lugar, ya que el protocolo AJP es algo binario, pero no lo he verificado. Ahora solo tienes que apuntar tu exploit de tomcat de metasploit regular a 127.0.0.1:80 y tomar el control de ese sistema. Aquí también está la salida de metasploit:
|
||
|
```bash
|
||
|
msf exploit(tomcat_mgr_deploy) > show options
|
||
|
|
||
|
Module options (exploit/multi/http/tomcat_mgr_deploy):
|
||
|
|
||
|
Name Current Setting Required Description
|
||
|
---- --------------- -------- -----------
|
||
|
PASSWORD tomcat no The password for the specified username
|
||
|
PATH /manager yes The URI path of the manager app (/deploy and /undeploy will be used)
|
||
|
Proxies no Use a proxy chain
|
||
|
RHOST localhost yes The target address
|
||
|
RPORT 80 yes The target port
|
||
|
USERNAME tomcat no The username to authenticate as
|
||
|
VHOST no HTTP server virtual host
|
||
|
```
|
||
|
### Proxy Inverso de Nginx y AJP
|
||
|
|
||
|
Cuando nos encontramos con un puerto de proxy AJP abierto (8009 TCP), podemos usar 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.
|
||
|
```bash
|
||
|
# 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
|
||
|
```
|
||
|
Comenta todo el bloque `server` y añade las siguientes líneas dentro del bloque `http` en `/etc/nginx/conf/nginx.conf`.
|
||
|
```shell-session
|
||
|
upstream tomcats {
|
||
|
server <TARGET_SERVER>:8009;
|
||
|
keepalive 10;
|
||
|
}
|
||
|
server {
|
||
|
listen 80;
|
||
|
location / {
|
||
|
ajp_keep_conn on;
|
||
|
ajp_pass tomcats;
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
Inicie Nginx y verifique que todo esté funcionando correctamente emitiendo una solicitud cURL a su host local.
|
||
|
```html
|
||
|
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>
|
||
|
```
|
||
|
## Referencias
|
||
|
|
||
|
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
|
||
|
|
||
|
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
|
||
|
|
||
|
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
|
||
|
|
||
|
🐞 Lee tutoriales sobre errores web3
|
||
|
|
||
|
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
|
||
|
|
||
|
💬 Participa en discusiones de la comunidad
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa 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)**.**
|
||
|
* **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).
|
||
|
|
||
|
</details>
|