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

12 KiB
Raw Blame History

8009 - 渗透测试Apache JServ协议AJP

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProof是所有加密漏洞赏金的家园。

无需等待即可获得奖励
HackenProof的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后您将获得奖励。

在web3渗透测试中积累经验
区块链协议和智能合约是新的互联网在其兴起的日子里掌握web3安全。

成为web3黑客传奇
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。

在HackenProof上注册开始从您的黑客攻击中获利!

{% embed url="https://hackenproof.com/register" %}

基本信息

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

AJP是一种传输协议。它是HTTP协议的优化版本允许独立的Web服务器Apache与Tomcat进行通信。从历史上看Apache在提供静态内容方面比Tomcat快得多。这个想法是让Apache在可能的情况下提供静态内容但将与Tomcat相关的内容代理到Tomcat。

还有趣的是:

ajp13协议是面向数据包的。出于性能原因二进制格式可能是为了选择比更易读的纯文本。Web服务器通过TCP连接与Servlet容器通信。为了减少昂贵的套接字创建过程Web服务器将尝试维护与Servlet容器的持久TCP连接并重用连接进行多个请求/响应周期。

**默认端口:**8009

PORT     STATE SERVICE
8009/tcp open  ajp13

CVE-2020-1938 'Ghostcat'

如果AJP端口暴露Tomcat可能会受到Ghostcat漏洞的影响。这是一个与此问题配套的利用工具

Ghostcat是一种LFI漏洞但受到一定限制只能获取特定路径下的文件。尽管如此这可能包括像WEB-INF/web.xml这样的文件根据服务器设置这些文件可能会泄露重要信息如Tomcat接口的凭据。

修复此问题的版本为9.0.31及以上、8.5.51及以上和7.0.100及以上。

枚举

自动化枚举

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

暴力破解

AJP代理

Apache AJP代理

很少遇到只有8009端口开放而没有其他Web端口开放的情况。在这种情况下使用现有的工具如metasploit仍然可以控制它是不是很好正如引用中所述您可以滥用Apache将请求代理到Tomcat的8009端口。在参考资料中您将找到一个很好的指南介绍了如何做到这一点先阅读它下面是我在自己的机器上使用的命令的概述。我省略了一些原始指令因为它们似乎不是必要的。

sudo apt-get install libapache2-mod-jk
sudo vim /etc/apache2/apache2.conf # append the following line to the config
Include ajp.conf
sudo vim /etc/apache2/ajp.conf     # create the following file, change HOST to the target address
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
Allow from localhost
</Proxy>
ProxyPass       / ajp://HOST:8009/
ProxyPassReverse    / ajp://HOST:8009/
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo systemctl restart apache2

使用这种设置的一个好处是你可能会阻止已经存在的IDS/IPS系统因为AJP协议是二进制的但我还没有验证过这一点。现在你可以将你的常规metasploit tomcat exploit指向127.0.0.1:80并接管该系统。以下是metasploit的输出

msf  exploit(tomcat_mgr_deploy) > show options

Module options (exploit/multi/http/tomcat_mgr_deploy):

Name      Current Setting  Required  Description
----      ---------------  --------  -----------
PASSWORD  tomcat           no        The password for the specified username
PATH      /manager         yes       The URI path of the manager app (/deploy and /undeploy will be used)
Proxies                    no        Use a proxy chain
RHOST     localhost        yes       The target address
RPORT     80               yes       The target port
USERNAME  tomcat           no        The username to authenticate as
VHOST                      no        HTTP server virtual host

Nginx反向代理和AJP

查看Docker化版本

当我们遇到一个开放的AJP代理端口8009 TCP我们可以使用带有ajp_module的Nginx来访问“隐藏”的Tomcat管理器。这可以通过编译Nginx源代码并添加所需的模块来实现具体步骤如下

  • 下载Nginx源代码
  • 下载所需的模块
  • 使用ajp_module编译Nginx源代码。
  • 创建一个指向AJP端口的配置文件
# Download Nginx code
wget https://nginx.org/download/nginx-1.21.3.tar.gz
tar -xzvf nginx-1.21.3.tar.gz

# Compile Nginx source code with the ajp module
git clone https://github.com/dvershinin/nginx_ajp_module.git
cd nginx-1.21.3
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

/etc/nginx/conf/nginx.conf文件中,将整个server块注释掉,并在http块内添加以下行。

upstream tomcats {
server <TARGET_SERVER>:8009;
keepalive 10;
}
server {
listen 80;
location / {
ajp_keep_conn on;
ajp_pass tomcats;
}
}

启动Nginx并通过向本地主机发送cURL请求来检查一切是否正常运行。

sudo nginx
curl http://127.0.0.1:80

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/X.X.XX</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</headas
<body>
<div id="wrapper">
<div id="navigation" class="curved container">
<span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span>
<span id="nav-config"><a href="/docs/config/">Configuration</a></span>
<span id="nav-examples"><a href="/examples/">Examples</a></span>
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
<span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
<br class="separator" />
</div>
<div id="asf-box">
<h1>Apache Tomcat/X.X.XX</h1>
</div>
<div id="upper" class="curved container">
<div id="congrats" class="curved container">
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
<SNIP>

Docker化版本

The Dockerized version of Apache JServ Protocol (AJP) is a convenient way to deploy and test AJP-based applications. By containerizing the AJP server, you can easily set up and tear down testing environments without the need for manual installation and configuration.

To create a Dockerized version of AJP, you can use the official Apache Tomcat Docker image as a base. Apache Tomcat is a popular Java Servlet container that supports the AJP protocol.

Here are the steps to create a Dockerized version of AJP:

  1. Create a Dockerfile with the following content:
FROM tomcat:latest
EXPOSE 8009
  1. Build the Docker image using the following command:
docker build -t ajp-server .
  1. Run the Docker container using the following command:
docker run -d -p 8009:8009 --name ajp-container ajp-server
  1. Verify that the AJP server is running by accessing the following URL in your browser:
http://localhost:8009

If the AJP server is running correctly, you should see the default Apache Tomcat homepage.

You can now deploy your AJP-based applications to the Dockerized AJP server and test them in a controlled environment. Remember to properly secure your AJP server by configuring authentication and access controls to prevent unauthorized access.

By using Docker, you can easily replicate and distribute your AJP testing environment, making it easier to collaborate with other team members and share your findings.

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

参考资料

HackenProof 是所有加密漏洞赏金的家园。

即刻获得奖励
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后,您将获得奖励。

在 web3 渗透测试中积累经验
区块链协议和智能合约是新的互联网!在其兴起之时掌握 web3 安全。

成为 web3 黑客传奇
每次验证的漏洞都会增加声誉积分,征服每周排行榜的顶端。

在 HackenProof 上注册 并从您的黑客攻击中获利!

{% embed url="https://hackenproof.com/register" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥