hacktricks/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md

228 lines
11 KiB
Markdown
Raw Normal View History

2024-02-11 01:46:25 +00:00
# 8009 - Testowanie penetracyjne protokołu Apache JServ (AJP)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:42:55 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
2023-12-04 15:45:05 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy!
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
**Spostrzeżenia dotyczące hakerstwa**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
**Aktualności na żywo z hakerstwa**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i spostrzeżeniom
2023-07-14 15:03:41 +00:00
2024-02-11 01:46:25 +00:00
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
2023-07-14 15:03:41 +00:00
2024-02-11 01:46:25 +00:00
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
2022-11-05 09:07:43 +00:00
2024-02-11 01:46:25 +00:00
## Podstawowe informacje
2024-02-11 01:46:25 +00:00
Źródło: [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
2024-02-11 01:46:25 +00:00
> AJP to protokół przesyłania danych. Jest to zoptymalizowana wersja protokołu HTTP, która umożliwia samodzielny serwer WWW, tak jak [Apache](http://httpd.apache.org/), komunikację z Tomcatem. Historycznie rzecz biorąc, Apache był znacznie szybszy od Tomcata w obsłudze treści statycznych. Pomysł polega na tym, aby pozwolić Apache na obsługę treści statycznych, jeśli to możliwe, ale przekierować żądanie do Tomcata w przypadku treści związanych z Tomcatem.
2024-02-11 01:46:25 +00:00
Również interesujące:
2024-02-11 01:46:25 +00:00
> Protokół ajp13 jest oparty na pakietach. Format binarny został prawdopodobnie wybrany z powodów wydajnościowych, zamiast bardziej czytelnego tekstu. Serwer WWW komunikuje się z kontenerem serwletów za pośrednictwem połączeń TCP. Aby ograniczyć kosztowny proces tworzenia gniazda, serwer WWW będzie próbował utrzymać trwałe połączenia TCP z kontenerem serwletów i ponownie używać połączenia dla wielu cykli żądanie/odpowiedź.
2024-02-11 01:46:25 +00:00
**Domyślny port:** 8009
2022-05-01 13:25:53 +00:00
```
PORT STATE SERVICE
8009/tcp open ajp13
```
2022-05-01 13:25:53 +00:00
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
2024-02-11 01:46:25 +00:00
Jeśli port AJP jest wystawiony, Tomcat może być podatny na podatność Ghostcat. Oto [exploit](https://www.exploit-db.com/exploits/48143), który działa w przypadku tego problemu.
2024-02-11 01:46:25 +00:00
Ghostcat to podatność LFI, ale nieco ograniczona: można pobrać tylko pliki z określonej ścieżki. Niemniej jednak, może to obejmować pliki takie jak `WEB-INF/web.xml`, które mogą wyciekać ważne informacje, takie jak poświadczenia dla interfejsu Tomcat, w zależności od konfiguracji serwera.
2024-02-11 01:46:25 +00:00
Zaktualizowane wersje 9.0.31, 8.5.51 i 7.0.100 lub nowsze naprawiły ten problem.
2024-02-11 01:46:25 +00:00
## Wyliczanie
2024-02-11 01:46:25 +00:00
### Automatyczne
2022-10-03 13:43:01 +00:00
```bash
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
2022-05-01 13:25:53 +00:00
```
2022-10-03 13:43:01 +00:00
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#ajp)
## AJP Proxy
### Nginx Reverse Proxy & AJP
2024-02-11 01:46:25 +00:00
[Sprawdź wersję w Dockerze](#Dockerized-version)
2024-02-11 01:46:25 +00:00
Gdy natrafimy na otwarty port AJP proxy (8009 TCP), możemy użyć Nginx z modułem `ajp_module`, aby uzyskać dostęp do "ukrytego" Tomcat Managera. Można to zrobić, kompilując kod źródłowy Nginx i dodając wymagany moduł, jak następuje:
2024-02-11 01:46:25 +00:00
* Pobierz kod źródłowy Nginx
* Pobierz wymagany moduł
* Skompiluj kod źródłowy Nginx z modułem `ajp_module`.
* Utwórz plik konfiguracyjny wskazujący na port AJP.
```bash
2022-10-03 13:43:01 +00:00
# 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
```
2024-02-11 01:46:25 +00:00
Zakomentuj cały blok `server` i dodaj następujące linie wewnątrz bloku `http` w pliku `/etc/nginx/conf/nginx.conf`.
2022-10-03 13:43:01 +00:00
```shell-session
upstream tomcats {
2024-02-11 01:46:25 +00:00
server <TARGET_SERVER>:8009;
keepalive 10;
}
2022-10-03 13:43:01 +00:00
server {
2024-02-11 01:46:25 +00:00
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
2022-10-03 13:43:01 +00:00
}
```
2024-02-11 01:46:25 +00:00
Uruchom Nginx i sprawdź, czy wszystko działa poprawnie, wysyłając żądanie cURL do lokalnego hosta.
2022-10-03 13:43:01 +00:00
```html
sudo nginx
curl http://127.0.0.1:80
<!DOCTYPE html>
<html lang="en">
2024-02-11 01:46:25 +00:00
<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>
2022-10-03 13:43:01 +00:00
<SNIP>
```
2024-02-11 01:46:25 +00:00
### Wersja Nginx w kontenerze Docker
Nginx jest popularnym serwerem HTTP i proxy reverse-proxy. Może być uruchamiany w kontenerze Docker, co ułatwia jego wdrażanie i skalowanie. Poniżej przedstawiono przykładowy plik Dockerfile, który pozwala na uruchomienie Nginx w kontenerze Docker.
```dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
W powyższym pliku Dockerfile używamy obrazu `nginx:latest` jako podstawy. Następnie kopiujemy plik konfiguracyjny `nginx.conf` do katalogu `/etc/nginx/nginx.conf` w kontenerze. Używamy również polecenia `EXPOSE` do odsłonięcia portu 80, który jest domyślnym portem HTTP dla Nginx. Na koniec, w poleceniu `CMD`, uruchamiamy Nginx w trybie demona.
Aby zbudować obraz Docker z powyższym plikiem Dockerfile, wykonaj polecenie:
2024-02-11 01:46:25 +00:00
```bash
docker build -t nginx-dockerized .
```
Następnie, aby uruchomić kontener z obrazem Nginx, wykonaj polecenie:
```bash
docker run -d -p 80:80 nginx-dockerized
```
Teraz Nginx będzie dostępny na porcie 80 na hoście Docker. Możesz dostosować plik konfiguracyjny `nginx.conf` według własnych potrzeb, aby skonfigurować Nginx zgodnie z wymaganiami Twojej aplikacji.
```bash
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
cd nginx-ajp-docker
```
2024-02-11 01:46:25 +00:00
Zamień `TARGET-IP` w pliku `nginx.conf` na adres IP AJP, a następnie skompiluj i uruchom.
``` bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
2024-02-11 01:46:25 +00:00
### Proxy Apache AJP
2024-02-11 01:46:25 +00:00
Napotkanie otwartego portu 8009 bez innych dostępnych portów internetowych jest rzadkie. Jednak wciąż istnieje możliwość jego wykorzystania za pomocą **Metasploit**. Korzystając z **Apache** jako proxy, żądania mogą być przekierowywane do **Tomcat** na porcie 8009.
2024-02-08 21:36:35 +00:00
```bash
sudo apt-get install libapache2-mod-jk
sudo vim /etc/apache2/apache2.conf # append the following line to the config
2024-02-11 01:46:25 +00:00
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/
2024-02-08 21:36:35 +00:00
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo systemctl restart apache2
```
2024-02-11 01:46:25 +00:00
Ta konfiguracja oferuje potencjał do obejścia systemów wykrywania i zapobiegania włamaniom (IDS/IPS) ze względu na binarną naturę protokołu AJP, chociaż ta zdolność nie została potwierdzona. Przekierowując zwykłe narzędzie Metasploit Tomcat na `127.0.0.1:80`, można efektywnie przejąć kontrolę nad docelowym systemem.
2024-02-08 21:36:35 +00:00
```bash
msf exploit(tomcat_mgr_deploy) > show options
```
2024-02-11 01:46:25 +00:00
## Odwołania
2024-02-08 21:36:35 +00:00
* [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
2022-10-03 13:43:01 +00:00
* [https://academy.hackthebox.com/module/145/section/1295](https://academy.hackthebox.com/module/145/section/1295)
2022-04-28 16:01:33 +00:00
2023-12-04 15:45:05 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
2024-02-11 01:46:25 +00:00
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
2022-11-05 09:07:43 +00:00
2024-02-11 01:46:25 +00:00
**Wgląd w hakerstwo**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
**Aktualności na żywo z hakerstwa**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i wglądom
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
2023-02-27 09:28:45 +00:00
2024-02-11 01:46:25 +00:00
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
2022-11-05 09:07:43 +00:00
2022-10-03 13:43:01 +00:00
<details>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:42:55 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>