8009 - Pentesting Apache JServ Protocol (AJP)

Reading time: 3 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

기본 정보

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

AJP는 와이어 프로토콜입니다. 이는 독립형 웹 서버인 Apache가 Tomcat과 통신할 수 있도록 HTTP 프로토콜의 최적화된 버전입니다. 역사적으로 Apache는 정적 콘텐츠를 제공하는 데 Tomcat보다 훨씬 빠릅니다. 아이디어는 가능한 경우 Apache가 정적 콘텐츠를 제공하고, Tomcat 관련 콘텐츠에 대해서는 요청을 Tomcat으로 프록시하는 것입니다.

또한 흥미로운 점:

ajp13 프로토콜은 패킷 지향적입니다. 성능상의 이유로 더 읽기 쉬운 일반 텍스트보다 이진 형식이 선택된 것으로 보입니다. 웹 서버는 TCP 연결을 통해 서블릿 컨테이너와 통신합니다. 소켓 생성의 비용이 많이 드는 과정을 줄이기 위해, 웹 서버는 서블릿 컨테이너에 대한 지속적인 TCP 연결을 유지하고, 여러 요청/응답 주기를 위해 연결을 재사용하려고 시도합니다.

기본 포트: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

이것은 자격 증명이 포함된 WEB-INF/web.xml과 같은 파일을 가져올 수 있는 LFI 취약점입니다. 이 취약점을 악용하기 위한 익스플로잇이며 AJP 노출 포트가 이에 취약할 수 있습니다.

패치된 버전은 9.0.31, 8.5.51 및 7.0.100 이상입니다.

Enumeration

Automatic

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

브루트 포스

AJP 프록시

Nginx 리버스 프록시 + AJP

(Dockerized 버전 확인하기)

Nginx ajp_module 아파치 모듈을 사용하여 열린 AJP 프록시 포트(8009 TCP)와 통신하고 이 포트에서 Tomat Manager에 접근할 수 있으며, 이는 궁극적으로 취약한 서버에서 RCE로 이어질 수 있습니다.

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
  • 그런 다음, server 블록을 주석 처리하고 /etc/nginx/conf/nginx.confhttp 블록에 다음을 추가합니다.
json
upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}
  • 마지막으로, nginx를 시작합니다 (sudo nginx) 그리고 http://127.0.0.1에 접속하여 작동하는지 확인합니다.

Nginx Dockerized-version

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

nginx.conf에서 TARGET-IP를 AJP IP로 교체한 후 빌드하고 실행합니다.

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

Apache AJP 프록시

Nginx 대신 해당 포트에 접근하기 위해 Apache AJP 프록시를 사용할 수도 있습니다.

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기