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

88 lines
4.7 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 - Pentesting Apache JServ Protocol (AJP)
{{#include ../banners/hacktricks-training.md}}
## Основна інформація
З [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/)
> AJP - це протокол передачі даних. Це оптимізована версія протоколу HTTP, що дозволяє автономному веб-серверу, такому як [Apache](http://httpd.apache.org/), спілкуватися з Tomcat. Історично, Apache був значно швидшим за Tomcat у обслуговуванні статичного контенту. Ідея полягає в тому, щоб дозволити Apache обслуговувати статичний контент, коли це можливо, але проксувати запит до Tomcat для контенту, пов'язаного з Tomcat.
Також цікаво:
> Протокол ajp13 є пакетно-орієнтованим. Бінарний формат, ймовірно, був обраний замість більш читабельного простого тексту з причин продуктивності. Веб-сервер спілкується з контейнером сервлетів через TCP-з'єднання. Щоб зменшити витрати на створення сокетів, веб-сервер намагатиметься підтримувати постійні TCP-з'єднання з контейнером сервлетів і повторно використовувати з'єднання для кількох циклів запит/відповідь.
**Порт за замовчуванням:** 8009
```
PORT STATE SERVICE
8009/tcp open ajp13
```
## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat)
Це вразливість LFI, яка дозволяє отримати деякі файли, такі як `WEB-INF/web.xml`, що містять облікові дані. Це [експлойт](https://www.exploit-db.com/exploits/48143) для зловживання вразливістю, і порти 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>
```
### [**Брутфорс**](../generic-hacking/brute-force.md#ajp)
## AJP Проксі
### Nginx Реверсний Проксі + AJP
([Перегляньте версію з Docker](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version))
Можливо спілкуватися з відкритим AJP проксі портом (8009 TCP), використовуючи модуль `ajp_module` для Apache в Nginx, і отримати доступ до Tomcat Manager з цього порту, що в кінцевому підсумку може призвести до RCE на вразливому сервері.
- Почніть завантажувати Nginx з [https://nginx.org/en/download.html](https://nginx.org/en/download.html) і потім скомпілюйте його з модулем ajp:
```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` і додайте наступне в блок `http` у `/etc/nginx/conf/nginx.conf`.
```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
```
Замініть `TARGET-IP` в `nginx.conf` на AJP IP, а потім зберіть і запустіть.
```bash
docker build . -t nginx-ajp-proxy
docker run -it --rm -p 80:80 nginx-ajp-proxy
```
### Apache AJP Proxy
Також можливо використовувати **Apache AJP proxy** для доступу до цього порту замість **Nginx**.
## References
- [https://github.com/yaoweibin/nginx_ajp_module](https://github.com/yaoweibin/nginx_ajp_module)
{{#include ../banners/hacktricks-training.md}}