8009 - Pentesting Apache JServ Protocol (AJP)

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Basic Information

From: 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, 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 faça proxy da solicitação para o Tomcat para conteúdo relacionado ao Tomcat.

Also interesting:

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.

Default port: 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 acessados. No entanto, 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.

Versões corrigidas a partir de 9.0.31, 8.5.51 e 7.0.100 resolveram esse problema.

Enumeração

Automático

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

Proxy AJP

Nginx Reverse Proxy & AJP

Confira a versão Dockerizada

Quando encontramos uma porta de proxy AJP aberta (8009 TCP), podemos usar o Nginx com o 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 em /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>

Nginx versão Dockerizada

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.

docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy

Apache AJP Proxy

Encontrar uma porta 8009 aberta sem outras portas web acessíveis é raro. No entanto, ainda é possível explorá-la usando Metasploit. Ao aproveitar Apache como um proxy, as solicitações podem ser redirecionadas para Tomcat na porta 8009.

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

Esta configuração oferece o potencial de contornar sistemas de detecção e prevenção de intrusões (IDS/IPS) devido à natureza binária do protocolo AJP, embora essa capacidade não tenha sido verificada. Ao direcionar um exploit regular do Metasploit Tomcat para 127.0.0.1:80, você pode efetivamente assumir o controle do sistema alvo.

msf  exploit(tomcat_mgr_deploy) > show options

Referências

Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!

Insights de Hacking Engaje-se com conteúdo que mergulha na emoção e nos desafios do hacking

Notícias de Hack em Tempo Real Mantenha-se atualizado com o mundo do hacking em ritmo acelerado através de notícias e insights em tempo real

Últimos Anúncios Fique informado sobre as novas recompensas de bugs lançadas e atualizações cruciais da plataforma

Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!

Suporte ao HackTricks

Last updated