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!

Podstawowe informacje

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

AJP to protokół sieciowy. Jest to zoptymalizowana wersja protokołu HTTP, która pozwala samodzielnemu serwerowi internetowemu, takiemu jak Apache, komunikować się z Tomcatem. Historycznie, Apache był znacznie szybszy niż Tomcat w serwowaniu statycznej zawartości. Idea polega na tym, aby pozwolić Apache'owi serwować statyczną zawartość, gdy to możliwe, ale przekazywać żądanie do Tomcata w przypadku zawartości związanej z Tomcatem.

Również interesujące:

Protokół ajp13 jest zorientowany na pakiety. Format binarny został prawdopodobnie wybrany zamiast bardziej czytelnego tekstu zwykłego z powodów wydajnościowych. Serwer internetowy komunikuje się z kontenerem servletów za pośrednictwem połączeń TCP. Aby ograniczyć kosztowny proces tworzenia gniazd, serwer internetowy będzie starał się utrzymywać trwałe połączenia TCP z kontenerem servletów i ponownie wykorzystywać połączenie do wielu cykli żądanie/odpowiedź.

Domyślny port: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

Jeśli port AJP jest wystawiony, Tomcat może być podatny na lukę Ghostcat. Oto eksploit, który działa z tym problemem.

Ghostcat to luka LFI, ale w pewnym stopniu ograniczona: można pobierać tylko pliki z określonej ścieżki. Mimo to, mogą to być pliki takie jak WEB-INF/web.xml, które mogą ujawniać ważne informacje, takie jak dane uwierzytelniające do interfejsu Tomcat, w zależności od konfiguracji serwera.

Poprawione wersje w wersji 9.0.31 lub wyższej, 8.5.51 i 7.0.100 naprawiły ten problem.

Enumeration

Automatic

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

AJP Proxy

Nginx Reverse Proxy & AJP

Sprawdź wersję Dockerową

Kiedy napotykamy otwarty port proxy AJP (8009 TCP), możemy użyć Nginx z ajp_module, aby uzyskać dostęp do "ukrytego" Menedżera Tomcat. Można to zrobić, kompilując kod źródłowy Nginx i dodając wymagany moduł, w następujący sposób:

  • Pobierz kod źródłowy Nginx

  • Pobierz wymagany moduł

  • Skompiluj kod źródłowy Nginx z ajp_module.

  • Utwórz plik konfiguracyjny wskazujący na port 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

Skomentuj cały blok server i dodaj następujące linie wewnątrz bloku http w /etc/nginx/conf/nginx.conf.

upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

Uruchom Nginx i sprawdź, czy wszystko działa poprawnie, wydając żądanie cURL do swojego lokalnego hosta.

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 w wersji Dockerowej

git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker

Zamień TARGET-IP w nginx.conf na AJP IP, a następnie zbuduj i uruchom.

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

Apache AJP Proxy

Napotkanie otwartego portu 8009 bez innych dostępnych portów webowych jest rzadkie. Jednak nadal możliwe jest jego wykorzystanie za pomocą Metasploit. Wykorzystując Apache jako proxy, żądania mogą być przekierowywane do Tomcat na porcie 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

To ustawienie oferuje potencjał do obejścia systemów wykrywania i zapobiegania włamaniom (IDS/IPS) z powodu binarnej natury protokołu AJP, chociaż ta zdolność nie została zweryfikowana. Kierując regularny exploit Metasploit Tomcat do 127.0.0.1:80, możesz skutecznie przejąć kontrolę nad docelowym systemem.

msf  exploit(tomcat_mgr_deploy) > show options

References

Dołącz do HackenProof Discord, aby komunikować się z doświadczonymi hackerami i łowcami bugów!

Hacking Insights Zaangażuj się w treści, które zgłębiają dreszczyk emocji i wyzwania związane z hackingiem

Real-Time Hack News Bądź na bieżąco z dynamicznym światem hackingu dzięki wiadomościom i spostrzeżeniom w czasie rzeczywistym

Latest Announcements Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy

Dołącz do nas na Discord i zacznij współpracować z najlepszymi hackerami już dziś!

Wsparcie HackTricks

Last updated