java17及以上版本如何抵御TemplatesImpl注入

news/2025/10/1 13:33:24/文章来源:https://www.cnblogs.com/k4n5ha0/p/19122390

最近有一篇写的很好的关于java17反序列化绕过模块化的文章:https://mp.weixin.qq.com/s/DrUUAJaLig_RtXZWaAm1IQ

关于本篇的方式方法也比较传统,直接jep290在java运行时增加命令行参数:

-Djdk.serialFilter=!com.sun.org.apache.xalan.internal.xsltc.**

有没有办法在反射时也能限制对TemplatesImpl的反射呢?可以使用如下java代码

import jdk.internal.reflect.Reflection;

import之后在反射形成反序列化链之前限制对TemplatesImpl的反射,如下

Reflection.registerMethodsToFilter(TemplatesImpl.class, Set.of("*"));
Reflection.registerFieldsToFilter(TemplatesImpl.class, Set.of("*"));

 增加完之后发现系统提示:

Exception in thread "main" java.lang.IllegalAccessError: class SerializeJDK8 (in unnamed module @0x6d311334) cannot access class jdk.internal.reflect.Reflection (in module java.base) because module java.base does not export jdk.internal.reflect to unnamed module @0x6d311334at SerializeJDK8.main(SerializeJDK8.java:20)

所以我们要在java进程执行时增加vm参数:

--add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED

其中我们要看一下Reflection的源代码:

static {fieldFilterMap = Map.of(Reflection.class, ALL_MEMBERS,AccessibleObject.class, ALL_MEMBERS,Class.class, Set.of("classLoader", "classData", "modifiers", "protectionDomain", "primitive"),ClassLoader.class, ALL_MEMBERS,Constructor.class, ALL_MEMBERS,Field.class, ALL_MEMBERS,Method.class, ALL_MEMBERS,Module.class, ALL_MEMBERS);methodFilterMap = Map.of();
}

Reflection的所有字段被限制反射了,但是方法却没有,所以还可以把上述代码增加一下改成:

Reflection.registerMethodsToFilter(TemplatesImpl.class, Set.of("*"));
Reflection.registerFieldsToFilter(TemplatesImpl.class, Set.of("*"));
Reflection.registerMethodsToFilter(Reflection.class, Set.of("*"));

防止对Reflection的方法进行随意反射减少未知绕过的可能性

上述代码在java8中略有不同,代码如下:

Reflection.registerMethodsToFilter(TemplatesImpl.class, Set.of("readObject","writeObject"));
Reflection.registerFieldsToFilter(TemplatesImpl.class, Set.of("_bytecodes"));
Reflection.registerMethodsToFilter(Reflection.class, Set.of("*"));

 

总结:

1)反序列化时对流进行反序列校验增加未知漏洞的防护

2)反射限制可以增加对未知的反射导致0day的防护能力

3)参照:https://alibaba.github.io/fastjson2/autotype_cn.html  对输入的校验使用白名单是目前已知最好的编码方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

wordpress让小工具支持简码汕头百度seo在哪里

2006-2023年各地级市债务余额数据 1、时间:2006-2023年 2、来源:整理自wind 3、指标:地区、地方政府债-债券数量(只)、地方政府债-债券余额(亿)、地方政府债-债券余额占比(%)、城投债-债券数量(只)、城投债-债券余额(亿)、城投债-债券余额…

将图片某个区域批量填充白色(jsx代码)

// 定义源文件夹和目标文件夹路径 var sourceFolderPath = "C:/Users/***/Desktop/拆分/"; var destFolderPath = "C:/Users/***/Desktop/结果/";// 定义要填充的区域坐标 (x, y, 宽度, 高度) var…

青岛做网站哪个公司好网站建设报告论文

电影《楚门的世界》中描述过这样的故事:楚门这个快乐单纯的青年,一直以为自己是平凡小镇上普通的保险推销员。直到有一天他发现这世界上的一切都是为他精心安排的。他会遇到谁、在他身上将要发生什么事件,都是按照剧本被人操纵的。甚至连他的…

详细介绍:四数之和_优选算法(C++)双指针法总结

详细介绍:四数之和_优选算法(C++)双指针法总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

网站建设 嘉定宣传片制作公司前景

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

《初等数论(第四版,北京大学出版社,潘承洞,潘承彪著)》阅读笔记+心得

I、整除理论 一、自然数与整数 这里的自然数定义和各种规律以及反证法的定义就不再赘述,我们从归纳法开始讲起。 1.归纳原理 归纳原理: 设 S 是 N 的一个子集,满足条件: (i) \(1 \in S\) (ii) \(n \in S\),那么有…

完整教程:Ansible Playbook

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

免费招聘的网站自己的网站什么做优化

我的施工之路Python 绘图入门这是施工系列第18篇,同时也进入到一个新的阶段:Python绘图篇。作为绘图模块的第一篇,与大家一起过过最基本的Python绘图原理。掌握基本的绘图原理很有必要,各个常用绘图库的原理基本都是相通的。所以了…

做企业云网站的企业邮箱丰都网站建设公司

Web页面中的特殊效果,如菜单效果,对话框效果都需要通过定位属性来实现。定位样式position属性可以控制元素的定位类型position属性值可以为sataic、fixed、absolute、relativeposition属性的语法结构- position:value;定位属性static默认值。没有定位&am…

深圳做分销网站的公司大学生心里健康网站设计与建设

深入理解Linux守护进程Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的…

完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?

完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

没有网站怎样做外贸wordpress文章换行符

前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。 但是对于很多情况,顺序结构的代码是远远不够的,这时我们就要使用判断语句即if else语句。 …

珠海哪里学网站开发拓者设计吧官网app

计算机专业毕业后大致的工作方向是软、硬、网、图 四大类 尤其以软件、网络为现今的首选 从岗位上分,又可以分为技术道路、营销道路两大方向 if 你选择作技术,then 从现在开始,牢记: 天道酬勤!!&#xff…

制作网站首先做的工作重庆网站排名优化教程

系统配置:Windows XP 32位R 3.1.1一、安装RMySQL:1,安装RTools并配置环境变量:我的电脑——属性——高级——环境变量,在系统变量一栏中选择PATH,点击编辑,在后面添加RTools的路径(如:D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin;D:\R…

做网站需要购买服务器吗wordpress 果酱小程序

13 集合 实现方法时,不同的数据结构会导致性能有很大差异。 13.1 集合接口 Java集合类库将接口(interface)与实现(implementation)分离。 可以使用接口类型存放集合的应用,一旦改变了想法,可…

NOIP2025模拟赛28

T1 T2 T3 T4\(\color{#52C41A} 普及+/提高\) \(\color {#3498DB} 提高+/省选-\) \(\color {#3498DB} 提高+/省选-\) \(\color{#9D3DCF} 省选/NOI-\)参赛网址:https://oj.33dai.cn/d/TYOI/contest/68a2efb9c5d9c2f14c2…

markdown笔记文件批量打上时间戳

解决了给一个文件夹(包含子文件夹)下的所有.md文件在最前面添加时间戳。 例如`Typora 笔记迁移 Obsidian 图片链接处理.md`修改为`20251001-Typora 笔记迁移 Obsidian 图片链接处理` 打上时间戳的笔记能够更好配合笔…