首页 > 其他分享 >xxe学习笔记

xxe学习笔记

时间:2024-07-18 13:31:43浏览次数:9  
标签:XML 元素 XXE 实体 笔记 学习 引用 xxe 解析

什么是xxe

XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load默认情况下会解析外部实体,有XXE漏洞的标志性函数为simplexml_load_string()。

当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。

XML构建模块

元素

元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。

属性

属性可提供有关元素的额外信息

实体

实体是用来定义普通文本的变量。实体引用是对实体的引用。

PCDATA

PCDATA的意思是被解析的字符数据(parsed character data)。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

CDATA

CDATA指的是不应由 XML 解析器进行解析的文本数据(unparesed Character Data)
在 XML 元素中,"<" (新元素的开始) 和 "&" (字符实体的开始)是非法的。
某些文本,如JavaScript代码,包含大量 "<" 或 "&" 字符。为例避免错误,可以将脚本代码定义为 CDATA。CDATA 部分在的所有内容都会被解析器忽略。CDATA 部分由 "" 结束。

XML浅浅认识

XML 指可扩展标记语言,只能用来传递数据。

语法

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!--xml文件的声明-->
<bookstore>                                                 <!--根元素-->
<book category="COOKING">        <!--bookstore的子元素,category为属性-->
<title>Everyday Italian</title>           <!--book的子元素,lang为属性-->
<author>Giada De Laurentiis</author>                  <!--book的子元素-->
<year>2005</year>                                     <!--book的子元素-->
<price>30.00</price>                                  <!--book的子元素-->
</book>                                                 <!--book的结束-->
</bookstore>                                       <!--bookstore的结束-->

·声明是可选的
·所有 XML 元素都须有关闭标签。
·XML 标签对大小写敏感。
·XML 必须正确地嵌套。
·XML 文档必须有根元素。
·XML 的属性值须加引号。

DTD

XML元素以形如 foo 的标签开始和结束,如果元素内部出现如< 的特殊字符,解析就会失败,为了避免这种情况,XML用实体引用(entity reference)替换特殊字符。XML预定义五个实体引用,即用< > & ' "替换 < > & ' " 。 实体引用可以起到类似宏定义和文件包含的效果,为了方便,我们会希望自定义实体引用,这个操作在称为 Document Type Defination(DTD,文档类型定义)的过程中进行、

DTD语法

引入内部的dtd文件
<!DOCTYPE 根元素名称 [元素声明]>

参数实体的定义
<!ENTITY % 实体名称 "实体内容">

可以结合伪协议来运用

<!DOCTYPE test [
  <!ENTITY file SYSTEM "file:///etc/passwd">
  %file;
]>

%file(参数实体)是在DTD中被引用的,而&file;是在xml文档中被引用的。

XXE注入(XML 外部实体注入)

定义

XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。

危害

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

漏洞造成

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

XML用实体引用(entity reference) 替换特殊字符

XML元素,例如hello,如果元素内部出现如 < 的特殊字符,解析就会失败,为了避免这种情况,XML 用实体引用(entity reference) 替换特殊字符。XML 预定义五个实体引用。

例题_BUU XXE COURSE 1

[NCTF2019]Fake XML cookbook

XML注入

利用方式

简单来说就是用户能够控制xml文件的输入,攻击者可以通过令语句闭合来改写语句,从而达成目的。
<?xml version="1.0" encoding="utf-8" ?>
<USER>
  <user Account="admin">用户输入</user>
<user Account="root">root</user>
</USER>

当我们输入adminhacker时,上述语句就变成了

<?xml version="1.0" encoding="utf-8" ?>
<USER>
  <user Account="admin">admin</user>
  <user Account="hacker">hacker</user>
  <user Account="root">root</user>
</USER>

这样就添加了一个名为hacker的用户。

标签:XML,元素,XXE,实体,笔记,学习,引用,xxe,解析
From: https://www.cnblogs.com/fupo1/p/18309309

相关文章

  • python笔记:赋值,浅拷贝和深拷贝
    在Python中,变量赋值、浅拷贝和深拷贝在处理对象时有不同的行为和应用场景。以下是它们的详细区别:1.赋值赋值操作只是创建了一个新的引用(别名)来指向同一个对象。也就是说,赋值操作并不创建新的对象,原始对象和赋值后的变量指向同一块内存区域。a=[1,2,3]b=a#b是a......
  • PointNet笔记
    可能遇到的问题在windows上运行pointnet的代码时,可能会遇到一些问题:1.比如提示OSError:nofilewithexpectedextension,这是因为可视化的show3d_balls.py文件运行不了,具体的解决方法可以看这篇文章:https://blog.51cto.com/u_16213693/7738038。2.由于作者的pointnet所用的p......
  • 深度学习框架入门
    #一句话说明白深度学习框架有什么用:利用编程语言来实现复杂的网络架构。不同的开发框架类似不同的语言。常见主流框架介绍 TensorFlow主要用于构建和训练深度学习模型。其强大的可视化工具(如TensorBoard)和对多种硬件的支持,使其在企业级和研究级应用中广泛使用。然而,Ten......
  • Halcon的学习笔记(一)——非线性字符识别
    Halcon非线性模式的字符识别(ocr_cd_print_polar_trans.hdev例程分析)Halcon的学习笔记(一)——非线性字符识别项目上需要对非线性模式的字符进行识别,halcon中包含的例程,我搜了一下,网上对于该例程的解析比较少,因此自己便记录了一下自己的学习例程,也算自己的学习笔记。1.什......
  • 【终极指南】从零开始征服机器学习:初学者的黄金路线图
       踏入机器学习的世界,对许多初学者而言,无疑是一场既兴奋又略带忐忑的冒险。尤其对于那些非数学或计算机专业背景的同学,或是已经在职场打拼的朋友们,寻找一条适合自己的入门路径,显得尤为重要。鉴于此,本文将结合个人经验与导师建议,精心整理一份机器学习学习指南,希望能为渴......
  • 笔记本误克隆病毒破坏装系统分区误删电脑数据
    针对笔记本误克隆病毒导致系统分区被破坏以及误删电脑数据的情况,以下是一些建议的恢复步骤和预防措施:一、数据恢复步骤1.立即停止使用电脑:1.一旦发现数据丢失或系统异常,应立即停止使用该笔记本,避免对硬盘进行进一步写入操作,以防止数据被覆盖,增加恢复难度。2.使用数据恢复软件:......
  • 机器学习:详解迁移学习(Transfer learning)
    详解迁移学习深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。所以例如,也许已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那些知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学......
  • Nodify学习 二:添加节点
    Nodify学习一:介绍与使用-可乐_加冰-博客园(cnblogs.com)Nodify学习二:添加节点-可乐_加冰-博客园(cnblogs.com)添加节点(nodes)通过上一篇我们已经创建好了编辑器实例现在我们为编辑器添加一个节点添加model和viewmodel并将它们绑定到视图publicclassNodeViewMod......
  • 【CAN通讯系列3】如何学习CAN通讯?
    对于汽车行业从业者,如何学习CAN通讯,最重要的是取决于你的岗位职责。一方面岗位职责的定义决定你所能获得的资源,另一方面敢岗位职责基本框定了你所使用的CAN通讯内容范围。比如你不是做底层软件开发,那么你很难切身地深入理解CAN通讯的控制流和数据流,因为你没法像底层软件工程师......
  • 小白学习微信小程序开发中的图片和音频处理
    微信小程序开发中,图片和音频的处理是非常常见的功能之一。在本文中,我将详细介绍如何在小程序中进行图片和音频的处理,并提供相关的代码案例。一、图片处理图片的选择和上传在小程序中,用户可以选择图片并上传。首先需要在app.json中注册chooseImage和uploadFile的相关权限。然......