12.Fastjson(.NET)反序列化点前篇

admin 2024年10月29日13:33:50评论11 views字数 1134阅读3分46秒阅读模式

1.Fastjson的使用

.NET版本的Fastjson如何呢,用它序列化试试,这里要对Y4er师傅的代码修改一下,如果这个类没有public的标记,反序列化的时候会出现错误

12.Fastjson(.NET)反序列化点前篇

12.Fastjson(.NET)反序列化点前篇

加上public就好了:

12.Fastjson(.NET)反序列化点前篇

2.Fastjson(.NET)反序列化

比起前面几个介绍的Json处理组件需要开启某些配置才能显示出__type或者$type,.NET Fastjson这边毫不避讳,正常序列化的时候就会搞出一个大大的$types,指向目标类的type,生怕别人不知道这里可以反序列化。。。总之,这很Fastjson

{"$types":{"Fastjson.NetSerializer.Person, ConsoleApp3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null":"1"},"$type":"1","Name":"jack"}

注意这里的写法,应该是Fastjson自己的一些规范,在开头写一个$types,把相关的type都放在这里,然后给每个type都设置一个“别名”(个人理解),比如这里把

Fastjson.NetSerializer.Person

设置为1,然后后续使用$type去使用,传入目标type设置好的别名,比如这里后面就使用"$type":"1"去调用了。

所以我们也很容易把之前的json有关的反序列化payload改造成符合.NET Fastjson规则的格式:

12.Fastjson(.NET)反序列化点前篇

如下图,只要ToObject()方法接收的json数据可控,即可实现RCE

12.Fastjson(.NET)反序列化点前篇

3.关于fastjson黑名单

非常经典的,Fastjson知道这个反序列化问题后,在fastjson 2.3.0版本之后,加了一个黑名单,在处理用户传入的type时,先与_blacklistTypes做匹配,如果匹配到就直接抛出异常

12.Fastjson(.NET)反序列化点前篇

这个_blacklistTypes内容如下

12.Fastjson(.NET)反序列化点前篇

我们常用的

system.windows.data.objectdataprovider

就在其中,不过这里我很好奇,除了objectdataprovider,其它几个Sink点都是怎样的,感觉也是非常值得学习的,这个我们会放在下一篇文章里学习。

4.结语

在审计中主要关注目标是否使用了.NET Fastjson,且其版本是否小于2.3.0,然后再找一个调用了ToObject()方法的点,观察传入的json数据是否可控,若可控则存在反序列化问题。

下篇文章会简单研究Fastjson _blacklistTypes中涉及到的其它方法,这些方法都挺有趣的。

5.参考

https://xz.aliyun.com/t/9604

原文始发于微信公众号(HW专项行动小组):12.Fastjson(.NET)反序列化点前篇

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月29日13:33:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   12.Fastjson(.NET)反序列化点前篇http://cn-sec.com/archives/3326928.html

发表评论

匿名网友 填写信息