9.9 KiB
8009 - Pentesting Apache JServ Protocol (AJP)
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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>
Brute force
AJP Proxy
Nginx Reverse Proxy & AJP
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
- https://github.com/yaoweibin/nginx_ajp_module
- https://academy.hackthebox.com/module/145/section/1295
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ś!
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na GitHubie.