C#调用方法控制台编写演示

时间:2015-10-08 15:48:01

标签: c#

下面的代码片段来自ASP.NET MVC应用程序。它接受来自浏览器的所有参数。我相信它很脆弱。

我正在测试应用程序的安全性,它使用Invoke方法,但是从用户的输入中动态接受Object类型,方法和参数。我认为这很危险,我试图证明这一点。

您认为我可以调用Console.Write或执行某种任意/危险的代码吗?

我想尝试使用C#Invoke方法写入控制台来证明漏洞。这就是我所做的:

static void Main(string[] args)
{
    Type magicType = Type.GetType("System");
    ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes);
    object magicClassObject = magicConstructor.Invoke(new object[] { });                

    MethodInfo magicMethod = magicType.GetMethod("Console.Write");
    object magicValue = magicMethod.Invoke(magicClassObject, new object[] { 100 });
}

但它不起作用。它说对象没有初始化。我错过了什么?

1 个答案:

答案 0 :(得分:4)

System不是类型,它是名称空间。您实际上在寻找System.Console,这是控制台类。之后,您正在寻找具有正确重载的WriteLine方法,该方法需要int,这是您传递给Type.GetMethod的方法。只有这样,您才可以使用MethodInfo作为对象(因为这是Invoke类)和正确的参数来调用null对象。

你真正想要的是:

static