hacktricks/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md

5.8 KiB

8009 - Pentesting Apache JServ Protocol (AJP)

{{#include ../banners/hacktricks-training.md}}

Basic Information

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

AJP एक वायर प्रोटोकॉल है। यह HTTP प्रोटोकॉल का एक अनुकूलित संस्करण है जो एक स्वतंत्र वेब सर्वर जैसे कि Apache को Tomcat से बात करने की अनुमति देता है। ऐतिहासिक रूप से, Apache ने स्थिर सामग्री को सेवा देने में Tomcat की तुलना में बहुत तेज़ी दिखाई है। विचार यह है कि जब संभव हो, तो Apache स्थिर सामग्री को सेवा दे, लेकिन Tomcat से संबंधित सामग्री के लिए अनुरोध को Tomcat पर प्रॉक्सी करें।

Also interesting:

AJP13 प्रोटोकॉल पैकेट-उन्मुख है। प्रदर्शन के कारणों से एक बाइनरी प्रारूप को अधिक पठनीय साधारण पाठ पर चुना गया था। वेब सर्वर TCP कनेक्शनों के माध्यम से सर्वलेट कंटेनर के साथ संवाद करता है। सॉकेट निर्माण की महंगी प्रक्रिया को कम करने के लिए, वेब सर्वर सर्वलेट कंटेनर के लिए स्थायी TCP कनेक्शन बनाए रखने का प्रयास करेगा, और कई अनुरोध/प्रतिक्रिया चक्रों के लिए एक कनेक्शन का पुन: उपयोग करेगा।

Default port: 8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

यह एक LFI कमजोरियों है जो कुछ फ़ाइलें प्राप्त करने की अनुमति देती है जैसे WEB-INF/web.xml जिसमें क्रेडेंशियल्स होते हैं। यह कमजोरियों का दुरुपयोग करने के लिए एक exploit है और 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 संस्करण देखें)

एक खुले AJP प्रॉक्सी पोर्ट (8009 TCP) के साथ संवाद करना संभव है Nginx ajp_module अपाचे मॉड्यूल का उपयोग करके और इस पोर्ट से टॉमेट मैनेजर तक पहुंच प्राप्त करना जो अंततः कमजोर सर्वर में 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 Proxy

इसके बजाय Nginx का उपयोग करने के लिए उस पोर्ट तक पहुँचने के लिए Apache AJP proxy का उपयोग करना भी संभव है।

References

{{#include ../banners/hacktricks-training.md}}