8009 - Pentesting Apache JServ Protocol (AJP)

Reading time: 4 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

From https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/

AJP is 'n draadprotokol. Dit is 'n geoptimaliseerde weergawe van die HTTP-protokol om 'n standalone webbediener soos Apache in staat te stel om met Tomcat te kommunikeer. Histories was Apache baie vinniger as Tomcat om statiese inhoud te bedien. Die idee is om Apache statiese inhoud te laat bedien wanneer moontlik, maar om die versoek na Tomcat te proxy vir Tomcat-verwante inhoud.

Ook interessant:

Die ajp13-protokol is pakket-georiënteerd. 'n Binaire formaat is vermoedelik gekies bo die meer leesbare gewone teks om redes van prestasie. Die webbediener kommunikeer met die servlet-container oor TCP-verbindinge. Om die duur proses van sokket-skepping te verminder, sal die webbediener probeer om volhoubare TCP-verbindinge met die servlet-container te handhaaf, en om 'n verbinding vir meerdere versoek/antwoord siklusse te hergebruik.

Standaard poort: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

Dit is 'n LFI kwesbaarheid wat dit moontlik maak om sekere lêers soos WEB-INF/web.xml te verkry wat akrediteerdata bevat. Dit is 'n exploit om die kwesbaarheid te misbruik en AJP blootgestelde poorte mag kwesbaar wees daarvoor.

Die gepatchte weergawes is op of bo 9.0.31, 8.5.51, en 7.0.100.

Enumerasie

Outomaties

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

Brute force

AJP Proxy

Nginx Reverse Proxy + AJP

(Kyk na die Dockerized weergawe)

Dit is moontlik om te kommunikeer met 'n oop AJP proxy poort (8009 TCP) deur die Nginx ajp_module apache module te gebruik en toegang te verkry tot die Tomcat Bestuurder vanaf hierdie poort, wat uiteindelik kan lei tot RCE in die kwesbare bediener.

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
  • Kommentaar dan die server blok en voeg die volgende in die http blok in /etc/nginx/conf/nginx.conf by.
json
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
  • Laastens, begin nginx (sudo nginx) en kontroleer of dit werk deur toegang te verkry tot http://127.0.0.1

Nginx Dockerized-weergawe

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

Vervang TARGET-IP in nginx.conf met AJP IP en bou en voer dan uit.

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

Apache AJP Proxy

Dit is ook moontlik om 'n Apache AJP proxy te gebruik om toegang tot daardie poort te verkry in plaas van Nginx.

References

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks