作家
登录

Fastjson远程反序列化程序验证的构造和分析

作者: 来源: 2017-05-04 20:57:11 阅读 我要评论

 + 
  •                 "\"_name\":\"a\",\"_version\":\"1.0\",\"allowedProtocols\":\"all\"}\n"
  •         System.out.println(text1); 
  •         
  •         Object obj = JSON.par搜刮引擎优化bject(text1, Object.class, config, Feature.SupportNonPublicField); 
  •         //assertEquals(Model.class, obj.getClass()); 
  •     } 
  •     public static void main(String args[]){ 
  •         try { 
  •             test_autoTypeDeny(); 
  •         } catch (Exception e) { 
  •             e.printStackTrace(); 
  •         } 
  •     } 
  • 在这个法度榜样验证代铝闼楝最核心的部分是_bytecodes,它是要履行的代码,@type是指定的解析类,fastjson会根据指定类去反序列化获得该类的实例,在默认情况下,fastjson只会反序列化公开的属性和域,而com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl中_bytecodes倒是私有属性,_name也是私有域,所以在par搜刮引擎优化bject的时刻须要设置Feature.SupportNonPublicField,如许_bytecodes字段才会被反序列化。_tfactory这个字段在TemplatesImpl既没有get办法也没有set办法,所所以设置不了的,弹寂?骥的图中展示了然则实际运行却没有应用,只能依附于jdk的实现,作者在1.8.0_25,1.7.0_05测试都能弹出寂?骥,某些版本中在defineTransletClasses()用到会引用_tfactory属性导致异常退出。

    接下来我们看下TemplatesImpl.java的几个关键函数:

    静态分析得知,要结垢荷琐可用的法度榜样,肯定得惹人denyList的库。刚开端fastjson官方颁布马脚信息时,当时就测验测验构造验证法度榜样,怎奈fastjson的代码确切宏大年夜,还有asm机制,经由过程asm机制生成的临时代码下不了断点。当时也只能经由过程在经由过程类初始化的时刻弹出一个寂?骥,很显然这个构造方法不具有通用性,比来jackson爆出反序列马脚,个中就应用了TemplatesImpl类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes生成java实例,的确不克不及再更妙,这就解决了fastjson经由过程字段传入一个类,再经由过程这个类履行有害代码。后来浏览ysoserial的代码时也发明在gadgets.java这个文件中也应用到了这个类来动态生成可履行敕令的代码。

    1. public synchronized Properties getOutputProperties() { 
    2.         try { 
    3.             return newTransformer().getOutputProperties(); 
    4.         } 
    5.         catch (TransformerConfigurationException e) { 
    6.             return null
    7.         } 
    8.     } 
    1. public synchronized Transformer newTransformer() 
    2.         throws TransformerConfigurationException 
    3.     { 
    4.         TransformerImpl transformer; 
    5.   
    6.         transformer = new TransformerImpl(getTransletInstance(), _outputProperties, 

    7.   推荐阅读

        提高Linux安全性:14项检查建立安全的Linux服务器

      1. 记录主机信息每当您正在应用新的Linux主机进行安然加强时,您须要创建一个文档并记录本文档中列出的项目,工作完成后,您将须要检查这些项目。别的,在开端时该文档,您须要记录有关Li>>>详细阅读


      本文标题:Fastjson远程反序列化程序验证的构造和分析

      地址:http://www.17bianji.com/lsqh/35009.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)