• java 反序列化 漏洞


     
     

    java在反序列化的时候会默认调用被重写的readObject(ObjectInputStream )方法。

    在远程服务端一个需要反序列化的接口中,比如一个web服务,他那个接口调用链中有反序列化方法调用,那我在post到他的web接口中的二进制里,放一个被序列化的字节数组。web服务会根据这些字节流中的包名先解析到用哪个本地class去反序列化,首先去调用这个本地class的readObject方法。

    为了实现恶意代码,需要确认web端广泛存在的class的readObject方法可以根据我们的入参进行执行代码。所以需要找到一个特定的广为使用的class。发现AnnotationInvocationHandler这个类,readObject方法被重写了。分析他的重写方法,调用了他的类变量map的setValue方法,继而联想到map的value改变时可以触发我们自定义的操作。想到了Apache Commons Collections的TransformedMap,普通map被他装饰了之后,(装饰的时候传入一个调用链)key或者value被修改的时候,会执行调用链的方法。

    所以,先构建一个奇葩的AnnotationInvocationHandler,这个类的类变量map就是被Apache Commons Collections的TransformedMap装饰过的map,调用链精心设计后,在readObject方法调用时setValue执行,整个调用链在远端web被执行。于是成功。

    所以,必备条件,第一AnnotationInvocationHandler,这个是sun的内部类,在rt.jar里,肯定都有。第二必须有map在setValue的时候执行调用链,就是Apache Commons Collections的TransformedMap。调用链必须有InvokerTransformer可以根据参数反射得到类并且执行此类的方法。

    调用链:

    执行是就是:

     
     
  • 相关阅读:
    P1351 联合权值
    c++ 贪心讲解大礼包
    取石子 找规律
    树 dfs暴力判环 题意转化
    P2519 [HAOI2011]problem a
    P1640 [SCOI2010]连续攻击游戏 二分图最大匹配 匈牙利算法
    P2756 飞行员配对方案问题 二分图匹配 匈牙利算法
    cogs 49. 跳马问题 DFS dp
    cogs 2. 旅行计划 dijkstra+打印路径小技巧
    cogs 1440. [NOIP2013]积木大赛 贪心水题
  • 原文地址:https://www.cnblogs.com/tmpt/p/5165027.html
Copyright © 2020-2023  润新知