.NET高级代码审计(第14课)反序列化Gadget之详解XAML
2022/5/27 23:22:32
本文主要是介绍.NET高级代码审计(第14课)反序列化Gadget之详解XAML,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
0X01 XAML入门
WPF是用于替代Windows Form来创建Windows客户端的应用程序,和Web项目一样遵从前端布局和后端代码实现分离的原则,Web项目前端通常是HTML,而XAML是用作WPF项目前端界面开发,XAML的全称是 Extensible Application Markup Language,基于通用XML语法用于实例化 .NET对象的标记语言。基本情况如下图
XAML 文档中的每个元素都映射为.NET类的一个实例,如根元素<Window>表示WPF创建Window对象,另外根元素还有<Application>、<Page>、<UserControl>,事实上XAML在编译时也会编成C#类,所以界面对应的.cs文件内的后台代码内要声明 partial 关键字,从而达到在编译的时候UI界面和运行逻辑代码合在一起的状态。如下最基本的XAML代码
<Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> </Grid> </Window>
上述仅包含Window元素以及Grid元素,Window元素代表整个窗口,Grid 可以放置所有的控件。总体结构其实是一个窗体对象内嵌套一个Grid对象。x:Class 代表后端的命名空间和类名,这样的好处在于将WPF里的前端XAML和后端实现代码分开维护,xmlns全拼是:XML namespace,即XML命令空间,xmlns后面可以跟一个可选映射前缀 x,两者之间用冒号分割,另外还声明了两个 xmlns 名称空间,如下表
名称 | 说明 |
http://schemas.microsoft.com/winfx/2006/xaml/presentation | WPF核心名称空间,包含了所有WPF类,包括用来构建用户界面的控件 |
http://schemas.microsoft.com/winfx/2006/xaml | XAML名称空间,该名称空间被映射为前缀 xmlns:x,可通过前缀x来使用该名称空间,如<x:ElementName> |
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="300" Width="300"> <ListBox> <ListBoxItem> <sys:String>this is demo</sys:String> </ListBoxItem> </ListBox> </Window>
xmlns:sys="clr-namespace:System;assembly=mscorlib" 表示将 sys 前缀 映射到.NET基类库System名称空间,后续用<sys:String>获取字符串类型,类似若想引入其他.NET程序集支持的基类,参考如下语法 xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"
名称 | 说明 |
Prefix | XAML标记中用于指示名称空间的XML前缀 |
Namespace | 完全限定.NET命名空间的名称 |
AssemblyName | 声明类型的程序集 |
例如反序列化攻击载荷常用的Diagnostics.Process类所在的程序集: xmlns:c="clr-namespace:System.Diagnostics;assembly=system"
0X02 x:名称指令
笔者创建的项目名ObjectDataProvider有一定迷惑性,这里说明下和反序列化用到的ObjectDataProvider类毫无关联
这篇关于.NET高级代码审计(第14课)反序列化Gadget之详解XAML的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具