如何通过BDC反序列化在Microsoft SharePoint上执行任务

本篇文章为大家展示了如何通过BDC反序列化在Microsoft SharePoint上执行任务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

漏洞细节

这个漏洞存在于微软SharePoint中的业务数据(BDC)连接服务之中,由于自定义的BDC模型中可以使用任意的方法参数类型,从而导致Microsoft SharePoint 2016中的业务数据连接(BDC)服务容易受到XmlSerializer流的任意反序列化的攻击。早

SharePoint允许使用业务数据连接模型文件格式(MS-BDCMFFS)数据格式来指定自定义的BDC模型,这种规范中的部分内容为方法和参数定义。下面给出的是微软提供的样本

如何通过BDC反序列化在Microsoft SharePoint上执行任务

上述代码定义了一个名叫GetCustomer的方法,它负责封装一个名叫sp_GetCustomer的程序,这两者的输入参数(Direction="In")和返回参数(Direction="Return")都使用了各自对应类型的描述来定义。

在上述样本中,输入参数的原始类型为System.Int32,这就没什么大问题。但如果定义的BDC模型参数类型为Microsoft.BusinessData.Runtime.DynamicType,就会出现问题了。这种方案的好处在于允许开发人员灵活地通过该参数传递不同类型的值,但坏处就是为反序列化的调用方提供了任意的XmlSerializer流。

漏洞利用

我们的测试设备为Microsoft SharePoint Server 2016,并且安装了KB4464594,操作系统版本为64位的Windows Server 2016 update 14393.3025。

漏洞利用步骤及过程如下:

1、管理员首先需要自定义一个BDC模型,其中包括一个参数类型为Microsoft.BusinessData.Runtime.DynamicType的方法。针对自定义的BDC模型,程序会使用数据库模型样本来作为模板对其进行大规模简化:

如何通过BDC反序列化在Microsoft SharePoint上执行任务

2、接下来,管理员需要通过SharePoint管理中心|应用管理|管理服务应用程序|业务数据连接服务来上传BDC模型。当然了,这个操作也可以通过PowerShell来完成:

如何通过BDC反序列化在Microsoft SharePoint上执行任务

3、然后,攻击者就可以调用这个方法了,并通过函数参数来传递攻击Payload:

如何通过BDC反序列化在Microsoft SharePoint上执行任务

在SharePoint服务器上,你将会发现生成了两个cmd.exe实例以及一个win32calc.exe实例,它们都会以SharePoint应用程序池的身份运行。

如果你想要查看代码路径的话,你可以把调试器绑定到SharePoint应用程序的w3wp.exe上,并在system.web.dll上设置断点。

我们可以通过System.Web.dll!System.Web.UI.ObjectStateFormatter.Deserialize来查看调用堆栈:

如何通过BDC反序列化在Microsoft SharePoint上执行任务

需要注意的是,即便是你能够成功利用该漏洞并实施攻击,你也无法拿到服务器端的管理员权限,不过攻击者可以利用该漏洞在SharePoint应用程序池以及SharePoint服务器账号的上下文环境中执行他们的代码。根据微软方面的描述,他们已经在9月份推送的补丁中修复了此漏洞。

上述内容就是如何通过BDC反序列化在Microsoft SharePoint上执行任务,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。