shiro反序列化之k1/2利用链

前言

shiro的k1/k2链条其实之前我已经分析过了,但是呢,没以文章的形式发出来。可能有点懒惰了。上篇文章我们一起看了t3协议,t3反序列化的修复手段是在resolveClass方法添加检查,增加黑名单的形式。而shiro是重写了resolveClass方法导致很多利用链无法使用,但是shiro在编写的时候,并不是为了防御反序列化漏洞才去重写的resolveClass,但是就是这么一个无意间的举动,导致了防御住了大部分攻击。下面我们分析。

直接使用cc6

cc6的利用链我们前面有,拿来直接用,默认keykPH+bIxk5D2deZiIxcaaaA==去加密,再base64编码。
在这里插入图片描述
发送后我们可以看到tomcat报错:
在这里插入图片描述
看到错误栈中最下面的那个类:
org.apache.shiro.io.ClassResolvingObjectInputStream.resolveClass
在这里插入图片描述
resolveClass方法是反序列化中用来查找类的方法,shiro反序列化的函数不是我们述职的ObjectInputStream().readObject,而是ClassResolvingObjectInputStream类,他继承了ObjectInputStream类,重写了resolveClass方法,原因就出现 再重写后的resolveClass方法,跟进ClassUtils.forName(osc.getName());
在这里插入图片描述
出异常时加载的类名为 [Lorg.apache.commons.collections.Transformer;。这个类名看起来 怪,其实就是表示org.apache.commons.collections.Transformer的数组。
跟进Class clazz = THREAD_CL_ACCESSOR.loadClass(fqcn);
在这里插入图片描述
加载和获取当前线程的类,参考phith0n的结论:如果反序列化流中包含非Java自身的数组,则会出现无法加载类的错误。 所以CC6

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值