8009 - Pentesting Apache JServ Protocol (AJP)

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

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

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๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • https://nginx.org/en/download.html์—์„œ Nginx๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ajp ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค:
# 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.conf์˜ http ๋ธ”๋ก์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
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

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

nginx.conf์—์„œ TARGET-IP๋ฅผ AJP IP๋กœ ๊ต์ฒดํ•œ ํ›„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ