当前位置:   article > 正文

XML外部实体注入漏洞——XXE简单分析_documentbuilder禁止外部实体注入

documentbuilder禁止外部实体注入

前言:

        XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波。

一、XXE 漏洞是什么:

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

二、XML基础知识:

想要了解 XXE漏洞,需要先了解一下关于 XML的基础知识。

1、XML是什么?
  • XML全称:可扩展标记语言(Extensible Markup Language)。

  • XML是独立于软件和硬件的信息传输工具,它把数据从HTML中分离。 XML语言没有预定义的标签,需要作者定义自己的标签和自己的文档结构。

  • XML 被设计用来传输和存储数据,HTML 被设计用来显示数据。

2、XML文档结构:

XML文档结构包括:

  1. XML声明

  2. DTD 文档类型定义(可选)

  3. 文档元素。

示例代码:
在这里插入图片描述
其中 DTD (Document Type Definition)即 文档类型定义 部分 定义了XML文档的标签以及元素属性。

如上图中的DTD 就定义了XML的根元素为 note,然后根元素下面有一些子元素 (to,from,heading,body),那么下面的文档元素就可以使用这些元素:

<!--文档元素-->
<note> 
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body> 
</note>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注:

  • PCDATA:可被解析的字符数据。PCDATA 数据类型是会被解析器解析的文本。这些文本将被解析器检查 实体 以及 标记。文本中的标签会被当作标记来处理,而实体会被展开。与之对应的是CDATA

  • CDATA:不被解析的字符数据,CDATA 数据类型是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对 待,其中的实体也不会被展开。详细可点这 链接

DTD声明方式:

其中DTD有两种构建方式,分别为内部 DTD声明和外部 DTD声明。

1、内部DTD声明:

声明格式:

<!DOCTYPE 根元素 [元素声明]>
  • 1

如 上例使用就是内部 DTD声明。

2、外部DTD声明:

通过引入 dtd文件的方式进行声明(这一点和 css,javascript 很像)。

声明格式:

<!DOCTYPE 根元素 SYSTEM "文件名">
  • 1

例:

<?xml version="1.0"?>
 <!DOCTYPE note SYSTEM "test.dtd"> 
 <note> 
 <to>H</to>
 <from>E</from>
 <head>L</head>
 <body>LO</body> 
 </note>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

test.dtd:

<!ELEMENT to (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)><!--定义head元素为”#PCDATA”类型--> 
<!ELEMENT body (#PCDATA)><!--定义body元素为”#PCDATA”类型-->
  • 1
  • 2
  • 3
  • 4

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/612747
推荐阅读
相关标签