当前位置: 首页 > 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("filter"));

 

总结:

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

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

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

http://www.hskmm.com/?act=detail&tid=22233

相关文章:

  • 详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界
  • 将图片某个区域批量填充白色(jsx代码)
  • 《初等数论(第四版,北京大学出版社,潘承洞,潘承彪著)》阅读笔记+心得
  • 完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?
  • markdown笔记文件批量打上时间戳
  • 251001
  • 微服务调整中心高可用设计:从踩坑到落地的实战指南(二)
  • NOIP2025模拟赛27
  • NOIP2025模拟赛28
  • 十月数据结构题没做
  • NOIP2025模拟赛30
  • 2025西安品牌新房,西安刚需新房,陕西优质新房住宅推荐,地建嘉信臻境,超2000㎡高端会所,满足多元化生活需求
  • 2025年未央区高端楼盘,西咸新区品质楼盘,西安高新品牌楼盘住宅口碑推荐,地建嘉信臻境周边配套丰富,教育医疗商业齐全
  • 2025西安高端新房,西安优质新房,西安品牌新房住宅推荐,地建嘉信臻境,沣东文商板块门户,享双地铁便利
  • 2025年西安洋房楼盘,陕西优质楼盘,西咸新区现房楼盘住宅口碑推荐,地建嘉信臻境超2000㎡高端会所,功能多样
  • Python 闭包的应用场景与实战案例
  • input() 函数
  • 如何确保CMS系统能够飞快响应用户请求?全面性能优化指南
  • 近期
  • Playwright MCP 的使用与调试技巧
  • 实用指南:零基础学AI大模型之LangChain-PromptTemplate
  • 文件上传攻击全面指南:从侦察到防御
  • 2025年陕西洋房楼盘,西安城西品质楼盘,沣东品牌楼盘住宅口碑推荐,地建嘉信臻境户型多元布局,满足全周期生活需求
  • asus nuc15 pro ultra7 255H 外接 fevm 雷电5显卡坞 BIOS设置
  • P11529 [THUPC 2025 初赛] 辞甲猾扎
  • 2025年陕西品牌楼盘,西安城西优质楼盘,西咸新区核心楼盘住宅口碑推荐,地建嘉信臻境距吾悦广场一路之隔,商业配套完善
  • ARC113E Rvom and Rsrev
  • 2025年西咸新区高端楼盘,西安刚需楼盘,沣东改善楼盘住宅口碑推荐,地建嘉信臻境3分钟通达高新,区位优势明显
  • P12704 Retribution
  • Sunny Pro 网络验证- 仅需一键,即可为您的exe添加高强度防破加密!