# 8009 - Pentesting Protocolo Apache JServ (AJP)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
**HackenProof é o lar de todas as recompensas por bugs de criptografia.** **Seja recompensado sem atrasos**\ As recompensas do HackenProof são lançadas apenas quando os clientes depositam o orçamento da recompensa. Você receberá a recompensa após a verificação do bug. **Adquira experiência em pentesting web3**\ Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão. **Torne-se a lenda do hacker web3**\ Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal. [**Cadastre-se no HackenProof**](https://hackenproof.com/register) comece a ganhar com seus hacks! {% embed url="https://hackenproof.com/register" %} ## 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 comunicação. É uma versão otimizada do protocolo HTTP que permite que um servidor web independente, como o [Apache](http://httpd.apache.org/), se comunique com o Tomcat. Historicamente, o Apache tem sido muito mais rápido que o Tomcat ao servir conteúdo estático. A ideia é permitir que o Apache sirva o conteúdo estático sempre que possível, mas encaminhar a 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 motivos de desempenho. O servidor web se comunica com o contêiner de servlets por meio de conexões TCP. Para reduzir o processo caro 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 vários 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) Se a porta AJP estiver exposta, o Tomcat pode ser suscetível à vulnerabilidade Ghostcat. Aqui está um [exploit](https://www.exploit-db.com/exploits/48143) que funciona com esse problema. Ghostcat é uma vulnerabilidade LFI, mas um tanto restrita: apenas arquivos de um determinado caminho podem ser extraídos. Ainda assim, isso pode incluir arquivos como `WEB-INF/web.xml`, que podem vazar informações importantes, como credenciais para a interface do Tomcat, dependendo da configuração do servidor. As versões corrigidas em ou acima de 9.0.31, 8.5.51 e 7.0.100 resolveram esse problema. ## Enumeração ### Automática ```bash nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ``` ### [**Força bruta**](../generic-methodologies-and-resources/brute-force.md#ajp) ## Proxy AJP ### Proxy AJP do Apache Não é comum encontrar a porta 8009 aberta e nenhuma outra porta web aberta. Nesse caso, seria bom usar ferramentas existentes como o metasploit para invadi-la, certo? Conforme mencionado em uma das citações, você pode (abusar) do Apache para fazer proxy das solicitações para a porta 8009 do Tomcat. Nas referências, você encontrará um guia útil sobre como fazer isso (leia-o primeiro), o que segue é apenas uma visão geral dos comandos que usei em minha própria máquina. Omiti algumas das instruções originais, pois não pareciam ser necessárias. ```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 Order deny,allow Deny from all Allow from localhost ProxyPass / ajp://HOST:8009/ ProxyPassReverse / ajp://HOST:8009/ sudo a2enmod proxy_http sudo a2enmod proxy_ajp sudo systemctl restart apache2 ``` Um efeito colateral interessante de usar essa configuração é que você pode frustrar os sistemas IDS/IPS em vigor, já que o protocolo AJP é em parte binário, mas eu não verifiquei isso. Agora você pode simplesmente direcionar sua exploração regular do tomcat no metasploit para 127.0.0.1:80 e assumir o controle desse sistema. Aqui está também a saída do 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 Reverso Nginx & AJP [Verifique a versão Dockerizada](#Versão-Dockerizada) Quando nos deparamos com uma porta de proxy AJP aberta (8009 TCP), podemos usar o Nginx com o `ajp_module` para acessar o "oculto" Tomcat Manager. Isso pode ser feito compilando o código-fonte do Nginx e adicionando o módulo necessário, da seguinte forma: * Baixe o código-fonte do Nginx * Baixe o módulo necessário * Compile o código-fonte do Nginx com o `ajp_module`. * Crie um arquivo de configuração apontando para a porta 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 ``` Comente todo o bloco `server` e adicione as seguintes linhas dentro do bloco `http` no arquivo `/etc/nginx/conf/nginx.conf`. ```shell-session upstream tomcats { server :8009; keepalive 10; } server { listen 80; location / { ajp_keep_conn on; ajp_pass tomcats; } } ``` Inicie o Nginx e verifique se tudo está funcionando corretamente emitindo uma solicitação cURL para o seu localhost. ```html sudo nginx curl http://127.0.0.1:80 Apache Tomcat/X.X.XX

Apache Tomcat/X.X.XX

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

``` ### Versão Dockerizada A versão dockerizada do Apache JServ Protocol (AJP) é uma maneira conveniente de executar e testar o protocolo AJP em um ambiente controlado. O Docker é uma plataforma de virtualização leve que permite empacotar um aplicativo e suas dependências em um contêiner isolado. Isso facilita a implantação e o teste de aplicativos em diferentes ambientes sem a necessidade de configurar manualmente o ambiente de cada vez. Para executar o Apache JServ Protocol (AJP) em um contêiner Docker, siga as etapas abaixo: 1. Certifique-se de ter o Docker instalado em sua máquina. 2. Baixe a imagem Docker do Apache JServ Protocol (AJP) do repositório oficial. 3. Execute o contêiner usando o comando `docker run` e especifique as opções necessárias, como a porta em que o AJP será executado e as configurações adicionais, se necessário. 4. Verifique se o contêiner está em execução e se o AJP está funcionando corretamente. 5. Agora você pode testar o protocolo AJP usando ferramentas de teste, como o Apache JMeter, para verificar a segurança e a integridade do seu aplicativo. A versão dockerizada do Apache JServ Protocol (AJP) oferece uma maneira fácil e rápida de executar e testar o protocolo em um ambiente controlado. Isso pode ser útil para fins de desenvolvimento, teste e depuração de aplicativos que usam o protocolo AJP. ```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, compile e execute. ``` bash docker build . -t nginx-ajp-proxy docker run -it --rm -p 80:80 nginx-ajp-proxy ``` ## Referências * [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
**HackenProof é o lar de todas as recompensas por bugs de criptografia.** **Seja recompensado sem atrasos**\ As recompensas do HackenProof são lançadas apenas quando seus clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug. **Adquira experiência em pentesting web3**\ Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão. **Torne-se uma lenda hacker web3**\ Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal. [**Cadastre-se no HackenProof**](https://hackenproof.com/register) e comece a ganhar com seus hacks! {% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).