# 8009 - Pentesting Apache JServ Protocol (AJP) {{#include ../banners/hacktricks-training.md}} ## Podstawowe informacje Z [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](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 na komunikację samodzielnego serwera WWW, takiego jak [Apache](http://httpd.apache.org/), z Tomcatem. Historycznie, Apache był znacznie szybszy niż Tomcat w serwowaniu statycznej zawartości. Idea polega na tym, aby pozwolić Apache na serwowanie statycznej zawartości, 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 WWW komunikuje się z kontenerem servletów za pośrednictwem połączeń TCP. Aby zredukować kosztowny proces tworzenia gniazd, serwer WWW będzie starał się utrzymywać trwałe połączenia TCP z kontenerem servletów i ponownie wykorzystywać połączenie dla wielu cykli żądanie/odpowiedź. **Domyślny port:** 8009 ``` PORT STATE SERVICE 8009/tcp open ajp13 ``` ## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat) Jest to luka LFI, która pozwala na uzyskanie niektórych plików, takich jak `WEB-INF/web.xml`, które zawierają dane uwierzytelniające. To jest [eksploit](https://www.exploit-db.com/exploits/48143) do wykorzystania tej luki, a porty AJP mogą być na nią narażone. Poprawione wersje to 9.0.31, 8.5.51 i 7.0.100. ## Enumeracja ### Automatyczna ```bash nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ``` ### [**Brute force**](../generic-hacking/brute-force.md#ajp) ## AJP Proxy ### Nginx Reverse Proxy + AJP ([Sprawdź wersję Dockerową](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)) Możliwe jest komunikowanie się z otwartym portem proxy AJP (8009 TCP) za pomocą modułu `ajp_module` Nginx i uzyskanie dostępu do Menedżera Tomat z tego portu, co ostatecznie może prowadzić do RCE na podatnym serwerze. - Rozpocznij pobieranie Nginx z [https://nginx.org/en/download.html](https://nginx.org/en/download.html) i następnie skompiluj go z modułem ajp: ```bash # Compile Nginx with the ajp module git clone https://github.com/dvershinin/nginx_ajp_module.git cd nginx-version 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 ``` - Następnie skomentuj blok `server` i dodaj następujące do bloku `http` w `/etc/nginx/conf/nginx.conf`. ```json upstream tomcats { server :8009; keepalive 10; } server { listen 80; location / { ajp_keep_conn on; ajp_pass tomcats; } } ``` - Na koniec uruchom nginx (`sudo nginx`) i sprawdź, czy działa, uzyskując dostęp do `http://127.0.0.1` ### Wersja Dockerowa Nginx ```bash git clone https://github.com/ScribblerCoder/nginx-ajp-docker cd nginx-ajp-docker ``` Zamień `TARGET-IP` w `nginx.conf` na IP AJP, a następnie zbuduj i uruchom. ```bash docker build . -t nginx-ajp-proxy docker run -it --rm -p 80:80 nginx-ajp-proxy ``` ### Apache AJP Proxy Możliwe jest również użycie **proxy Apache AJP** do uzyskania dostępu do tego portu zamiast **Nginx**. ## References - [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module) {{#include ../banners/hacktricks-training.md}}