24.学习ysoserial.net的plugins第三弹

admin 2024年12月9日23:22:34评论16 views字数 1683阅读5分36秒阅读模式
(.NET反序列化今年没有多少篇啦,除开这篇后续的都挺有活的)
1.SessionSecurityTokenHandler
24.学习ysoserial.net的plugins第三弹
还是先来看一下这个的安全问题,在其ReadToken()方法中可以看到一个非常明显的BinaryFormatter反序列化
24.学习ysoserial.net的plugins第三弹
那么反序列化的数据是否可控呢?追溯memoryStream的来源
24.学习ysoserial.net的plugins第三弹
可以看到主要是对某个数据经过
ReadElementContentAsBase64()
ApplyTransforms()
两个方法的调用而来,其中,后者会对数据进行一些解密操作,看起来比较关键
24.学习ysoserial.net的plugins第三弹
乍一看还是挺懵的,我们还是不知道参与反序列化的数据从哪来,也不清楚解密流程,不过微软的文档可以给我们一些解答:
24.学习ysoserial.net的plugins第三弹
从上面这段文字可以提取一些重点,首先就是ReadToken()方法有一个与之对应的WriteToken()方法,这个方法会生成一些值并存储在“Cookie”当中,那么我们猜想ReadToken()也要读取这个“Cookie”并且进行处理。此外还有一个重点是,这个“Cookie”似乎要经过两个类的保护,分别是
DeflateCookieTransform
 ProtectedDataCookieTransform

如果我们在前文提到的ApplyTransforms()方法下一个断点,可以看到这里会进行一个解密操作,依次调用DeflateCookieTransform和ProtectedDataCookieTransform的Decode()方法进行解密

24.学习ysoserial.net的plugins第三弹

现在就可以拼凑出payload的生成流程,把BinaryFormatter的payload依次调用DeflateCookieTransform和ProtectedDataCookieTransform的Encode()方法进行加密,然后再调用一次base64编码。把最终的结果放在<Cookie>节点内。这里来看看ysoserial.net的实现方法:

24.学习ysoserial.net的plugins第三弹

注意Cookie节点,其值来源于:

24.学习ysoserial.net的plugins第三弹

也就是我们前面说的流程,这里测试一下,可以成功实现命令执行

24.学习ysoserial.net的plugins第三弹

不过这里其实有个问题,插件的源码里也写明白了,这个反序列化点在实战里是基本没有利用空间的:

24.学习ysoserial.net的plugins第三弹

这是因为ProtectedDataCookieTransform依赖DPAPI进行加密解密操作,当能接触到这玩意的时候,基本都进入后渗透流程了,确实基本没有必要再利用这个点

24.学习ysoserial.net的plugins第三弹

不过,后续我基于这个反序列化点又找了一个有点相似的反序列化点,利用的可能性要大上不少,我还把它做成了一个新的ysoserial.net插件,留到下一篇文章来细说。

2.TransactionManagerReenlist

24.学习ysoserial.net的plugins第三弹

这个安全问题源于下面这个方法

TransactionManager.Reenlist()

接受一个Guid类型的数据,一个byte[]类型的数据,还需要传入一个实现了IEnlistmentNotification接口的对象

24.学习ysoserial.net的plugins第三弹

这个方法一上来先是把recoveryInformation形参传入BinaryReader(),那接下来要干啥不用我多说了吧,不过在后面是要从序列化数据中读取一些信息的,所以不能用原始的BinaryFormatter payload,这也是这个插件要实现的功能

24.学习ysoserial.net的plugins第三弹

再往后看,这里发现序列化数据进入ReenlistTransaction()方法

24.学习ysoserial.net的plugins第三弹

跟进ReenlistTransaction()方法

24.学习ysoserial.net的plugins第三弹

数据又进入

oletxResourceManager.Reenlist()

继续跟进

24.学习ysoserial.net的plugins第三弹

典中典的BinaryFormatter反序列化点,因此我们来看看ysoserial.net是如何生成序列化payload的,其实只需要简单的修饰一下原始payload就行:

24.学习ysoserial.net的plugins第三弹

主要是为了满足上面提到的这块的判断:

24.学习ysoserial.net的plugins第三弹

还是比较易懂的,这里就不多介绍了,简单测试一下:

24.学习ysoserial.net的plugins第三弹
24.学习ysoserial.net的plugins第三弹

实战中可以多关注是否有TransactionManager.Reenlist()方法的调用,若有,其第二个形参是否可控,若可控则可以实现RCE

原文始发于微信公众号(HW专项行动小组):24.学习ysoserial.net的plugins第三弹

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月9日23:22:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   24.学习ysoserial.net的plugins第三弹https://cn-sec.com/archives/3478183.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息