hacktricks/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md
2023-06-06 18:56:34 +00:00

11 KiB

8009 - Pentesting Protocolo Apache JServ (AJP)

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Siga HackenProof para aprender mais sobre bugs web3

🐞 Leia tutoriais sobre bugs web3

🔔 Receba notificações sobre novos programas de recompensas por bugs

💬 Participe de discussões na comunidade

Informações Básicas

De: https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/

AJP é um protocolo de rede. É uma versão otimizada do protocolo HTTP que permite que um servidor web independente, como o Apache, 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 o 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'

Se a porta AJP estiver exposta, o Tomcat pode ser suscetível à vulnerabilidade Ghostcat. Aqui está um exploit que funciona com esse problema.

Ghostcat é uma vulnerabilidade LFI, mas um pouco restrita: apenas arquivos de um determinado caminho podem ser puxados. 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 corrigiram esse problema.

Enumeração

Automático

nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>

Força bruta

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-lo, certo? Conforme declarado 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 elas não pareciam ser necessárias.

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

Um efeito colateral interessante de usar essa configuração é que você pode frustrar os sistemas IDS/IPS em vigor, já que o protocolo AJP é um pouco binário, mas eu não verifiquei isso. Agora você pode simplesmente apontar sua exploração de tomcat metasploit regular para 127.0.0.1:80 e assumir o controle desse sistema. Aqui está também a saída do metasploit:

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 e AJP

Quando encontramos uma porta de proxy AJP aberta (TCP 8009), podemos usar o Nginx com o módulo ajp_module para acessar o Gerenciador Tomcat "oculto". 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.
# 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.

upstream tomcats {
	server <TARGET_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 host local.

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>

Referências

Siga HackenProof para aprender mais sobre bugs web3

🐞 Leia tutoriais sobre bugs web3

🔔 Receba notificações sobre novas recompensas por bugs

💬 Participe de discussões na comunidade

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥