fastjson漏洞分析-历史漏洞(图解)
一 fastjson1.2.24
修复方式: 添加黑白名单校验
二 Templateslmpl利用链
条件: 开启autoTypeSuppose
三 fastjson1.2.41
条件: 开启autoTypeSuppose
利用方式: "L;" 绕过
修复方式: 过滤一次"L;"
四 fastjson1.2.41中checkAutoType逻辑
简单来说
不管开不开autoTypeSuppose,都会经过黑白名单,最后开启autoTypeSuppose才会返回类,否则即使是业务类、测试的User/Cat都不会通过。
后续的47/68 绕过则围绕着mapping和期望类入手
四 fastjson1.2.42
条件: 开启autoTypeSuppose
利用方式: 双写"L;"
修复方式: 校验LL
五 fastjson1.2.43
条件: 开启autoTypeSuppose
利用方式: [开头的绕过方式还没有去除
六 fastjson1.2.47 mappings绕过
利用方式: mappings写入
修复方式:
1 safeModeclass
2 class的val无法将类写入mapping
七 fastjson1.2.68 safeMode
开启safeMode后,不解析autoType,除非自定义的
八 fastjson1.2.68 autoCloseable 期望类绕过
1 期望类需求:
- commit https://github.com/alibaba/fastjson/commit/d7078548dc34c4f7645be9641490edac6f336ced:没找到为什么
- 猜测:mappings中的基础类是可信的,现想要其部分派生类在转变时也可以直接加载(如java.lang.Byte/java.lang.Short/java.lang.Integer/java.lang.Long),不用开启SupportAutoType。(期望类可以由mappings中的类对应getDeserializer得到)
2 期望类实现:checkAutoType中设计一个参数(期望类),如果加载类是期望类子类,可直接加载。再设置一些常规类的解析器可直接调。
3 期望类失误:某些期望类的子类存在利用链。
4 修复:不能直接从mappings去除,AutoCloseable有用。期望类功能也有用。只是因AutoCloseable派生类有问题,不让其用期望类功能了。
总结:期望类是一些基础的类,派生类相对安全,fastjson本意想要其派生类也可直接加载而不需要开启SupportAutoType。第一层为期望类时,第二层期望类的派生类在没开启autoType Support时也可以直接加载。
简图
全图
九 fastjson 1.2.80 java.lang.Exception 期望类绕过
autoCloseable中说到,期望类功能不想去除,所以修复的时候只是在checkAutoType函数里把autoCloseable给加到黑名单里,即允许直接加载,但不允许加载嵌套的派生类。
而1.2.68时,还有另一个反序列化器会调用派生类,ThrowableDeserializer(java.lang.Throwable的派生类会走该序列化器,Throwable也将被当做期望类),只是当时没找到利用链。
1.2.80 payload 就是在这之下找到的链。
payload: {"@type":"java.lang.Exception","@type":"org.python.antlr.ParseException",}
Throwable本身是可信的。
其派生类Exception 异常类也被当做可信的,会选择"异常抛出Throwable"的反序列化器,反序列化器将Throwable作为期望类,并允许其后的jython pgsql 直接加载。
简图
转标表明:https://www.cnblogs.com/huim/p/16566911.html
参考
fastjson24-47: https://www.cnblogs.com/nishoushun/p/16074640.html
TemplatesImpl链: http://www.red3691.top/2021/12/20/Fastjson-TemplatesImpl链-反序列化漏洞分析/
fastjson用法: http://www.lmxspace.com/2019/06/29/FastJson-反序列化学习/
反射: https://blog.csdn.net/Eve_perfect/article/details/125675719
fastjson1.2.68分析: https://y4er.com/posts/fastjson-bypass-autotype-1268/#分析