SharePoint站点页面安全性分析

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
Resources:可以用来读取可访问的资源。然而这些资源要么用处不大,要么并没有包含任何私密信息。
RouteUrl及RouteValue:这些表达式可以用来处理路由功能,从URL中读取信息,或者处理链接。同样,由于我们无法在SharePoint中定义自己的路由,因此这里没有直接的利用场景。
2、特定的数据绑定表达式:我们找到了两种被允许的数据绑定表达式,分别为Bind及Eval。虽然这些表达式没有被阻止,但也无法被我们滥用。在受限编译模式下,我们无法通过这些表达式来调用任何属性。此外,Eval表达式同样需要服务端脚本权限。
由于使用了CompilationMode.Never,事件属性也不能派上用场,服务端会立即阻塞这些属性。
滥用有趣的控件
如果我们能找到被允许的控件,通过设置控件属性来执行有趣的操作,那么就有可能成功攻击目标服务器。比如,我们可以通过如下方式,利用XML控件实现XXE,从文件系统中窃取文件:
asp:xml DocumentSource="probesdl.xml" runat="server">asp:xml>
不幸的是,SharePoint在默认情况下并不允许该控件,我们可以查看web.config文件中的如下设置:
SafeControl
               Assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
               Namespace="System.Web.UI.WebControls"
               TypeName="Xml"
               Safe="False"
               AllowRemoteDesigner="False"
               SafeAgainstScript="False"
/>
需要注意的是,SharePoint使用了白名单及黑名单机制来允许安全的控件,因此其中可能的确存在能够利用的控件。在初步分析中,我们搜索了与.NET反序列化有关的关键词,但没有找到任何有趣的控件。然而服务端中还是存在许多扩展,有可能会被滥用,这需要进一步研究。
 
0x03 常见错误配置
允许不安全的控件
在审查SharePoint应用程序的安全性时,我们需要审查自定义控件或者已导入的控件的安全性。允许不安全控件可能意味着某些ASCX文件可以被注入到ASPX或者Master文件中。如果启用了编译选项,那么攻击者就可能通过这种方式在服务端上运行代码。
例如,web.config文件(路径为Drive:/inetpub/wwwroot/wss/VirtualDirectories[port])中的如下设置演示了如何配置不安全控件:
SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="250" AllowPageLevelTrace="false">
    PageParserPaths>
        PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Never" AllowServerSideScript="false" IncludeSubFolders="false" AllowUnsafeControls="true" />
    PageParserPaths>
SafeMode>
虽然由于缺少服务端代码及编译条件,这种配置无法导致代码执行,但依然留下了可能被攻击的一个点,需要进一步研究。
允许服务端脚本的编译模式
这可能不是最安全的一种简单解决方案,有可能破坏所有安全机制。虽然在特定路径下允许编译是非常危险的一种操作,但有时候是SharePoint系统管理员唯一可选的一种方案,可以帮助偷懒的管理员早点收工。这种方式将允许通过文件上传实现代码执行,也是经典的一种代码执行方式。
如下示例是非常不安全的一种配置,允许Master文件执行代码:
SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="250" AllowPageLevelTrace="false">
    PageParserPaths>
        PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>
    PageParserPaths>
SafeMode>
恶意站点管理员可以上传恶意master文件,然后在ASPX文件中引用该文件,从而实现在服务端执行代码,或者也可以在/_catalogs/masterpage/目录中直接上传一个ASPX文件,达到相同目标。
禁用服务端脚本的编译模式
此时我们无法启用未编译的服务端脚本,但有可能通过其他方式完成任务。尽管这种设置并不能帮助开发者简化开发过程,但看上去是可以挑战的一项任务。这种方式提供了一定的可扩展性及安全性,我们也在其他场景中看过这类配置条件。
典型的配置信息如下所示:
SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="250" AllowPageLevelTrace="false">
    PageParserPaths>
        PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Always" AllowServerSideScript="false" IncludeSubFolders="false"/>
    PageParserPaths>
SafeMode>
这种设置可以轻松阻止内联脚本、事件属性、可用的表达式甚至某些指令(如@assembly)。

上一页  [1] [2] [3]  下一页