hacktricks/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md

88 lines
3.6 KiB
Markdown

# 8009 - Pentesting Apache JServ Protocol (AJP)
{{#include ../banners/hacktricks-training.md}}
## Informações Básicas
De [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP é um protocolo de rede. É uma versão otimizada do protocolo HTTP para permitir que um servidor web autônomo, como o [Apache](http://httpd.apache.org/), se comunique com o Tomcat. Historicamente, o Apache tem sido muito mais rápido que o Tomcat na entrega de conteúdo estático. A ideia é permitir que o Apache sirva o conteúdo estático sempre que possível, mas faça proxy da solicitação para o Tomcat para conteúdo relacionado ao Tomcat.
Também interessante:
> O protocolo ajp13 é orientado a pacotes. Um formato binário foi presumivelmente escolhido em vez do texto simples mais legível por razões de desempenho. O servidor web se comunica com o contêiner de servlets por meio de conexões TCP. Para reduzir o caro processo de criação de soquetes, o servidor web tentará manter conexões TCP persistentes com o contêiner de servlets e reutilizar uma conexão para múltiplos ciclos de solicitação/resposta.
**Porta padrão:** 8009
```
PORT STATE SERVICE
8009/tcp open ajp13
```
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
Esta é uma vulnerabilidade LFI que permite obter alguns arquivos como `WEB-INF/web.xml`, que contém credenciais. Este é um [exploit](https://www.exploit-db.com/exploits/48143) para abusar da vulnerabilidade e as portas expostas AJP podem ser vulneráveis a isso.
As versões corrigidas são 9.0.31 ou superiores, 8.5.51 e 7.0.100.
## Enumeração
### Automático
```bash
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
```
### [**Força bruta**](../generic-hacking/brute-force.md#ajp)
## Proxy AJP
### Nginx Reverse Proxy + AJP
([Confira a versão Dockerizada](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
É possível se comunicar com uma porta de proxy AJP aberta (8009 TCP) usando o módulo `ajp_module` do Apache no Nginx e acessar o Tomcat Manager a partir dessa porta, o que pode levar a RCE no servidor vulnerável.
- Comece a baixar o Nginx de [https://nginx.org/en/download.html](https://nginx.org/en/download.html) e, em seguida, compile-o com o módulo ajp:
```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
```
- Em seguida, comente o bloco `server` e adicione o seguinte no bloco `http` em `/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, inicie o nginx (`sudo nginx`) e verifique se está funcionando acessando `http://127.0.0.1`
### Versão Dockerizada do Nginx
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
Substitua `TARGET-IP` em `nginx.conf` pelo IP AJP e, em seguida, construa e execute.
```bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
### Proxy AJP do Apache
Também é possível usar um **proxy AJP do Apache** para acessar essa porta em vez de **Nginx**.
## Referências
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
{{#include ../banners/hacktricks-training.md}}