当前位置: 首页 > news >正文

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

最近有一篇写的很好的关于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.zskr.cn/news/14562.html

相关文章:

  • 详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界
  • NOIP2025模拟赛28
  • markdown笔记文件批量打上时间戳
  • 十月数据结构题没做
  • 2025年未央区高端楼盘,西咸新区品质楼盘,西安高新品牌楼盘住宅口碑推荐,地建嘉信臻境周边配套丰富,教育医疗商业齐全
  • 2025年西安洋房楼盘,陕西优质楼盘,西咸新区现房楼盘住宅口碑推荐,地建嘉信臻境超2000㎡高端会所,功能多样
  • US$9 TF Card 4GB Flash Memory Card Can Work on Ksuite
  • 详细介绍:手把手教你用 ESP32 接入 OneNet 平台(MQTT 方式)
  • 完整教程:Python学习历程——组织结构(包含for、if、while等等)
  • Nginx 反向代理、负载均衡与 Keepalived 高可用 - 实践
  • 文件上传攻击全面指南:从侦察到防御
  • 2025年陕西洋房楼盘,西安城西品质楼盘,沣东品牌楼盘住宅口碑推荐,地建嘉信臻境户型多元布局,满足全周期生活需求
  • asus nuc15 pro ultra7 255H 外接 fevm 雷电5显卡坞 BIOS设置
  • ARC113E Rvom and Rsrev
  • IDEA 高效配备指南:从基础到进阶的设置全解析
  • web图像触发防盗链,无法显示
  • php 简单下载数据库数据 导出cvs - 何苦
  • 完整教程:C++设计模式之结构型模式:适配器模式(Adapter)
  • 第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】 - 指南
  • LoRa/LoRaWAN技术手册
  • 2025南通宠物医院权威推荐榜:专业诊疗与暖心服务口碑之选
  • 高等数学基础知识 - 实践
  • sqlite-vec 简单试用
  • linux 系统cshrc 资料
  • 2025 年西安品质楼盘住宅推荐排行榜权威发布,精选优质楼盘推荐
  • Python国庆祝福 - 指南
  • 华为造车“内战”!徐直军下场做“启境”,会比余承东五界更强?
  • 余承东的新职位传递了华为重大信息
  • 财务分析怎么做 - 智慧园区
  • 摩尔定律的历史与AI统计学:从命名误导到本质洞察