8009 - Apache JServ Protokolü (AJP) için Pentesting

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Temel Bilgiler

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

AJP, bir iletişim protokolüdür. Tomcat ile konuşabilmesi için Apache gibi bağımsız bir web sunucusunun optimize edilmiş bir HTTP protokolü versiyonudur. Tarihsel olarak, Apache, statik içeriği sunma konusunda Tomcat'ten çok daha hızlı olmuştur. Amaç, mümkün olduğunda Apache'nin statik içeriği sunmasına izin vermek, ancak Tomcat ile ilgili içerikler için isteği Tomcat'e yönlendirmektir.

Ayrıca ilginç:

ajp13 protokolü paket odaklıdır. Performans nedenleriyle daha okunabilir düz metin yerine ikili bir formatın seçildiği varsayılmaktadır. Web sunucusu, TCP bağlantıları üzerinden servlet konteyneri ile iletişim kurar. Soket oluşturma sürecinin maliyetini azaltmak için, web sunucusu servlet konteynerine kalıcı TCP bağlantılarını sürdürmeye çalışacak ve birden fazla istek/yanıt döngüsü için bir bağlantıyı yeniden kullanacaktır.

Varsayılan port: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

Bu, kimlik bilgilerini içeren WEB-INF/web.xml gibi bazı dosyaları elde etmeye izin veren bir LFI zafiyetidir. Bu, zafiyeti istismar etmek için bir exploit olup, AJP açık portları buna karşı savunmasız olabilir.

Yamanlanmış sürümler 9.0.31, 8.5.51 ve 7.0.100 veya üzerindedir.

Enumeration

Automatic

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

Kaba kuvvet

AJP Proxy

Nginx Ters Proxy + AJP

(Dockerize edilmiş versiyonu kontrol edin)

Açık bir AJP proxy portu (8009 TCP) ile Nginx ajp_module apache modülünü kullanarak iletişim kurmak ve bu porttan Tomat Manager'a erişmek mümkündür; bu da nihayetinde savunmasız sunucuda RCE'ye yol açabilir.

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
  • Ardından, server bloğunu yorumlayın ve /etc/nginx/conf/nginx.conf içindeki http bloğuna aşağıdakileri ekleyin.
json
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
  • Son olarak, nginx'i başlatın (sudo nginx) ve http://127.0.0.1 adresine erişerek çalıştığını kontrol edin.

Nginx Dockerize edilmiş versiyonu

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

nginx.conf dosyasındaki TARGET-IP'yi AJP IP ile değiştirin, ardından inşa edin ve çalıştırın.

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

Apache AJP Proxy

Nginx yerine o porta erişmek için bir Apache AJP proxy kullanmak da mümkündür.

References

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin