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

88 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 8009 - Apache JServ Protokolü (AJP) için Pentesting
{{#include ../banners/hacktricks-training.md}}
## Temel Bilgiler
From [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](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](http://httpd.apache.org/) 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'](https://www.chaitin.cn/en/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](https://www.exploit-db.com/exploits/48143) 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**](../generic-hacking/brute-force.md#ajp)
## AJP Proxy
### Nginx Ters Proxy + AJP
([Dockerize edilmiş versiyonu kontrol edin](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
ı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.
- Nginx'i [https://nginx.org/en/download.html](https://nginx.org/en/download.html) adresinden indirmeye başlayın ve ardından ajp modülü ile derleyin:
```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
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
{{#include ../banners/hacktricks-training.md}}