9.1 KiB
8009 - Pentesting Apache JServ Protocol (AJP)
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 分享黑客技巧。
加入 HackenProof Discord 服务器,与经验丰富的黑客和漏洞赏金猎人交流!
黑客见解
参与深入探讨黑客的刺激与挑战的内容
实时黑客新闻
通过实时新闻和见解,跟上快速变化的黑客世界
最新公告
了解最新的漏洞赏金计划和重要平台更新
今天就加入我们的 Discord,与顶尖黑客开始合作吧!
基本信息
来自: 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 漏洞的影响。这里有一个 exploit 可以利用这个问题。
Ghostcat 是一个 LFI 漏洞,但有些限制:只能提取来自特定路径的文件。尽管如此,这仍然可能包括像 WEB-INF/web.xml
这样的文件,这可能会泄露重要信息,如 Tomcat 界面的凭据,具体取决于服务器的设置。
在 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
当我们遇到一个开放的 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
将整个 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 并通过向本地主机发出 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>
Nginx Docker化版本
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
遇到一个开放的8009端口而没有其他可访问的网络端口是很少见的。然而,仍然可以使用Metasploit进行利用。通过将Apache作为代理,可以将请求重定向到8009端口上的Tomcat。
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
此设置由于AJP协议的二进制特性,提供了绕过入侵检测和防御系统(IDS/IPS)的潜力,尽管这一能力尚未得到验证。通过将常规的Metasploit Tomcat漏洞利用指向127.0.0.1:80
,您可以有效地控制目标系统。
msf exploit(tomcat_mgr_deploy) > show options
参考文献
- https://github.com/yaoweibin/nginx_ajp_module
- https://academy.hackthebox.com/module/145/section/1295
加入 HackenProof Discord 服务器,与经验丰富的黑客和漏洞赏金猎人交流!
黑客见解
参与深入探讨黑客的刺激与挑战的内容
实时黑客新闻
通过实时新闻和见解,跟上快速变化的黑客世界
最新公告
了解最新的漏洞赏金发布和重要平台更新
加入我们 Discord,今天就开始与顶级黑客合作!
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。