8009 - Pentesting Apache JServ Protocol (AJP)

Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami błędów!

Spojrzenie na Hakowanie Zanurz się w treściach dotyczących emocji i wyzwań hakowania

Aktualności z Hakowania na Żywo Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom i spojrzeniom na żywo

Najnowsze Ogłoszenia Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy

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

Podstawowe informacje

Źródło: https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/

AJP to protokół przewodowy. Jest to zoptymalizowana wersja protokołu HTTP, która umożliwia samodzielny serwer internetowy, takie jak Apache, komunikować się z Tomcatem. Historycznie rzecz biorąc, Apache był znacznie szybszy niż Tomcat w obsłudze treści statycznych. Pomysł polega na tym, aby pozwolić Apache serwować treści statyczne, gdy to możliwe, ale przekazywać żądanie do Tomcata w przypadku treści związanych z Tomcatem.

Również interesujące:

Protokół ajp13 jest zorientowany pakietowo. Format binarny został prawdopodobnie wybrany zamiast bardziej czytelnego tekstu z powodów wydajnościowych. Serwer internetowy komunikuje się z kontenerem serwletów poprzez połączenia TCP. Aby ograniczyć kosztowny proces tworzenia gniazd, serwer internetowy będzie próbował utrzymywać trwałe połączenia TCP z kontenerem serwletów i ponownie używać połączenia dla wielokrotnych 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 podatność Ghostcat. Oto exploit, który działa z tym problemem.

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

Zapatchowane wersje równe lub wyższe niż 9.0.31, 8.5.51 i 7.0.100 naprawiły ten problem.

Wyliczanie

Automatyczne

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

Proxy AJP

Odwrócony proxy Nginx & AJP

Sprawdź wersję w Dockerze

Gdy napotkamy otwarty port proxy AJP (8009 TCP), możemy użyć Nginx z modułem 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ł, jak następuje:

  • 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

Zakomentuj cały blok server i dodaj poniższe linie wewnątrz bloku http w pliku /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, wysyłając żądanie cURL do 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>

Wersja z Dockerem Nginx

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

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

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

Proxy Apache AJP

Napotkanie otwartego portu 8009 bez innych dostępnych portów sieci web jest rzadkie. Niemniej jednak, nadal istnieje możliwość jego wykorzystania za pomocą Metasploita. Korzystając z Apache jako proxy, żądania mogą być przekierowane do Tomcata 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 ominięcia systemów wykrywania i zapobiegania intruzom (IDS/IPS) ze względu na binarną naturę protokołu AJP, chociaż ta zdolność nie została zweryfikowana. Przekierowując zwykłe narzędzie eksploitujące Tomcat Metasploit na 127.0.0.1:80, można efektywnie przejąć kontrolę nad docelowym systemem.

msf  exploit(tomcat_mgr_deploy) > show options

Odnośniki

Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami luk za nagrody!

Spojrzenie na Hacking Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania

Aktualności z Hackingu na Żywo Bądź na bieżąco z szybkim światem hackowania dzięki aktualnościom i spojrzeniom na żywo

Najnowsze Ogłoszenia Bądź na bieżąco z najnowszymi programami nagród za znalezienie luk i istotnymi aktualizacjami platformy

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

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated