mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
88 lines
3.4 KiB
Markdown
88 lines
3.4 KiB
Markdown
# 8009 - Pentesting Apache JServ Protocol (AJP)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
## Osnovne informacije
|
|
|
|
From [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
|
|
|
|
> AJP je protokol na žici. To je optimizovana verzija HTTP protokola koja omogućava samostalnom web serveru kao što je [Apache](http://httpd.apache.org/) da komunicira sa Tomcat-om. Istorijski gledano, Apache je bio mnogo brži od Tomcat-a u pružanju statičkog sadržaja. Ideja je da se Apache koristi za pružanje statičkog sadržaja kada je to moguće, ali da se zahtev prosledi Tomcat-u za sadržaj vezan za Tomcat.
|
|
|
|
Takođe zanimljivo:
|
|
|
|
> AJP13 protokol je orijentisan na pakete. Binarni format je verovatno izabran umesto čitljivijeg običnog teksta iz razloga performansi. Web server komunicira sa servlet kontejnerom preko TCP veza. Da bi se smanjio skupi proces kreiranja soketa, web server će pokušati da održi trajne TCP veze sa servlet kontejnerom i da ponovo koristi vezu za više ciklusa zahtev/odgovor.
|
|
|
|
**Podrazumevani port:** 8009
|
|
```
|
|
PORT STATE SERVICE
|
|
8009/tcp open ajp13
|
|
```
|
|
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
|
|
|
|
Ovo je LFI ranjivost koja omogućava pristup nekim datotekama kao što je `WEB-INF/web.xml` koja sadrži akreditive. Ovo je [eksploit](https://www.exploit-db.com/exploits/48143) za zloupotrebu ranjivosti, a AJP izloženi portovi mogu biti ranjivi na to.
|
|
|
|
Zakrpene verzije su 9.0.31 ili novije, 8.5.51 ili novije, i 7.0.100 ili novije.
|
|
|
|
## Enumeration
|
|
|
|
### Automatic
|
|
```bash
|
|
nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 <IP>
|
|
```
|
|
### [**Brute force**](../generic-hacking/brute-force.md#ajp)
|
|
|
|
## AJP Proxy
|
|
|
|
### Nginx Reverse Proxy + AJP
|
|
|
|
([Pogledajte Dockerizovanu verziju](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
|
|
|
|
Moguće je komunicirati sa otvorenim AJP proxy portom (8009 TCP) koristeći Nginx `ajp_module` apache modul i pristupiti Tomcat Manageru sa ovog porta, što bi na kraju moglo dovesti do RCE na ranjivom serveru.
|
|
|
|
- Počnite sa preuzimanjem Nginx-a sa [https://nginx.org/en/download.html](https://nginx.org/en/download.html) i zatim ga kompajlirajte sa ajp modulom:
|
|
```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
|
|
```
|
|
- Zatim, komentarišite `server` blok i dodajte sledeće u `http` blok u `/etc/nginx/conf/nginx.conf`.
|
|
```json
|
|
upstream tomcats {
|
|
server <TARGET_SERVER>:8009;
|
|
keepalive 10;
|
|
}
|
|
server {
|
|
listen 80;
|
|
location / {
|
|
ajp_keep_conn on;
|
|
ajp_pass tomcats;
|
|
}
|
|
}
|
|
```
|
|
- Na kraju, pokrenite nginx (`sudo nginx`) i proverite da li radi pristupanjem `http://127.0.0.1`
|
|
|
|
### Nginx Dockerizovana verzija
|
|
```bash
|
|
git clone https://github.com/ScribblerCoder/nginx-ajp-docker
|
|
cd nginx-ajp-docker
|
|
```
|
|
Zamenite `TARGET-IP` u `nginx.conf` sa AJP IP, a zatim izgradite i pokrenite.
|
|
```bash
|
|
docker build . -t nginx-ajp-proxy
|
|
docker run -it --rm -p 80:80 nginx-ajp-proxy
|
|
```
|
|
### Apache AJP Proxy
|
|
|
|
Takođe je moguće koristiti **Apache AJP proxy** za pristup toj portu umesto **Nginx**.
|
|
|
|
## References
|
|
|
|
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|