XXE的原理

tech2024-08-12  42

XEE漏洞

XXE(XML External Entity Injection)外部实体注入漏洞,XML在引用外部实体是时候,攻击者可以构造恶意的XML代码,以造成任意文件读取、命令执行甚至是中断服务器。

XML是一种是分流行的标记语言,他和HTML区别就是被设计用来传输、存储数据使用。

XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准

举个例子:

<?xml version=”1.0″?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don’t forget me this weekend!</body> </note>

解析:

文档的第一行是一个应该经常包含的XML申明,它定义了XML文档的版本号,在这个例子中表示文档将使用XML1.0的规范<?xml version="1.0″?>

下一行定义了文档里面的第一个元素(element),也称第一个元素为根元素:

再下面定义了根元素的四个子元素(分别是to, from, heading,和body): Tove Jani Reminder

Don’t forget me this weekend!

XML与HTML的区别:

XML 不是 HTML 的替代。 XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息,而 XML 旨在传输信息。

XMLHTML所有的元素都必须要有一个结束标志并非所有元素都需要结束标志。大小写敏感大小写不敏感所有元素嵌套必须正确不需要正确的嵌套所有的XML文档都必须要有一个根标志并非必须有一个根标识

DTD(Document Type Definition)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。用来为XML文档定义语义约束,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

内部调用,直接在XML头写入

内部调用例子:

<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>

解析:

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。 !ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body” !ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型 !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型 !ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型 !ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

外部调用(假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

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

本地外部调用

本地调用例子:

<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>

bote.dtd(调用的文件)

<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

远程外部调用

最新回复(0)