CSDNfastjson到底做错了什么?为什么会被频繁爆出漏洞?( 三 )
L和; , 形如Lcom.lang.Thread; 。
本文插图
L和;就可以绕过黑白名单的检查了 , 也不耽误被fastjson正常加载 。 如Lcom.sun.rowset.JdbcRowSetImpl; , 会先通过白名单校验 , 然后fastjson在加载类的时候会去掉前后的L和 , 变成了com.sun.rowset.JdbcRowSetImpl 。 为了避免被攻击 , 在之后的 v1.2.42版本中 , 在进行黑白名单检测的时候 , fastjson先判断目标类的类名的前后是不是L和; , 如果是的话 , 就截取掉前后的L和;再进行黑白名单的校验 。 看似解决了问题 , 但是黑客发现了这个规则之后 , 就在攻击时在目标类前后双写LL和;; , 这样再被截取之后还是可以绕过检测 。 如LLcom.sun.rowset.JdbcRowSetImpl;;魔高一尺 , 道高一丈 。 在 v1.2.43中 , fastjson这次在黑白名单判断之前 , 增加了一个是否以LL未开头的判断 , 如果目标类以LL开头 , 那么就直接抛异常 , 于是就又短暂的修复了这个漏洞 。 黑客在L和;这里走不通了 , 于是想办法从其他地方下手 , 因为fastjson在加载类的时候 , 不只对L和;这样的类进行特殊处理 , 还对[也被特殊处理了 。 同样的攻击手段 , 在目标类前面添加[ , v1.2.43以前的所有版本又沦陷了 。 于是 , 在 v1.2.44版本中 , fastjson的作者做了更加严格的要求 , 只要目标类以[开头或者以;结尾 , 都直接抛异常 。 也就解决了 v1.2.43及历史版本中发现的bug 。 在之后的几个版本中 , 黑客的主要的攻击方式就是绕过黑名单了 , 而fastjson也在不断的完善自己的黑名单 。 autoType不开启也能被攻击?但是好景不长 , 在升级到 v1.2.47 版本时 , 黑客再次找到了办法来攻击 。 而且这个攻击只有在autoType关闭的时候才生效 。 是不是很奇怪 , autoType不开启反而会被攻击 。 因为在fastjson中有一个全局缓存 , 在类加载的时候 , 如果autotype没开启 , 会先尝试从缓存中获取类 , 如果缓存中有 , 则直接返回 。 黑客正是利用这里机制进行了攻击 。 黑客先想办法把一个类加到缓存中 , 然后再次执行的时候就可以绕过黑白名单检测了 , 多么聪明的手段 。 首先想要把一个黑名单中的类加到缓存中 , 需要使用一个不在黑名单中的类 , 这个类就是java.lang.Classjava.lang.Class类对应的deserializer为MiscCodec , 反序列化时会取json串中的val值并加载这个val对应的类 。
本文插图
推荐阅读
- 浪浪科技精选|超频三GI-CX240 ARGB水冷,极致性能冷酷到底
- 艾滋病|丈夫婚检查出艾滋病,医生却对妻子保密?医生到底有没有错?
- 葛梦茹说娱乐|搞笑GIF:这地方到底有什么?竟然是一个危险的地方!
- 娱乐当家|洗头先用洗发水仍是护发素?许多人都搞错了,难怪头发油腻又掉发
- 聚会@灵签占卜:同学聚会,你会选哪件礼服?测你另一半到底有多爱你?
- 官方通报干部疑出轨在妻死后失联|【后续来了】官方通报干部疑出轨在妻死后失联 真相到底是什么?
- 妈妈倒车时不慎撞死自己孩子|可怕!妈妈倒车时不慎撞死自己孩子是怎么回事?真相到底是什么?
- 医生为督促女孩康复训练将其训哭|感动!医生为督促女孩康复训练将其训哭是怎么回事?真相到底是什么?
- 狮子|老虎厉害还是狮子厉害?科学研究表明,其实大多数人都想错了
- 苹果|死磕到底?苹果CEO库克霸气回应:我们是不会做出任何让步
