8009 - Pentesting Apache JServ Protocol (AJP)

Reading time: 4 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Osnovne informacije

From 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 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'

Ovo je LFI ranjivost koja omogućava pristup nekim datotekama kao što je WEB-INF/web.xml koja sadrži akreditive. Ovo je eksploit 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

AJP Proxy

Nginx Reverse Proxy + AJP

(Pogledajte Dockerizovanu verziju)

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.

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

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks