注入XML解释器
Posted danku
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注入XML解释器相关的知识,希望对你有一定的参考价值。
XML:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。它被设计用来传输和存储数据(而不是储存数据),可扩展标记语言是一种很像超文本标记语言的标记语言。它的设计宗旨是传输数据,而不是显示数据。它的标签没有被预定义。您需要自行定义标签。它被设计为具有自我描述性。它是W3C的推荐标准。
可扩展标记语言(XML)和超文本标记语言(html)为不同的目的而设计;XML目的是传输数据,主要体现在数据的内容,而HTML目的是显示数据,体现在数据的外观。
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
文档类型定义DTD可以在XML文档内声明也可以外部引用。
内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
引用外部DTD
<!DOCTYPE 根元素 SYSTEM "文件名">
或者
<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
DTD的实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
我们可以在内部确定其值(内部子集):
或从外部来源:(外部子集):
或
<!ENTITY 实体名称 SYSTEM "URI/URL">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
SYSTEM标识符意味着该实体从外部来源获取内容。
如果要引用一个外部资源,可以借助各种协议 几个例子:
file:///path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php
外部实体的类型:
XML 中的实体分为以下五种:字符实体,命名实体,外部实体,参数实体,内部实体,普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上 SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。
XML注入
XML External Entity,XML外部实体注入。
通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。所以攻击者可以通过 XML 实体传递自己构造的恶意值,是处理程序解析它。当引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
ENTITY 实体,在一个甚至多个XML文档中频繁使用某一条数据,我们可以预先定义一个这条数据的“别名”,即一个ENTITY,然后在这些文档中需要该数据的地方调用它。XML定义了两种类型的ENTITY,一种在XML文档中使用。
<!DOCTYPE 文件名 [
<!ENTITY 实体名 "实体内容">
]>
定义好的ENTITY在文档中通过“&实体名;”来使用。举例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE booklist [ <!ENTITY publisher "ABC company"> ]> <booklist> <book> <name>Ajax</name> <price>$5.95</price> <description>Foundations of Ajax.</description> <publisher>&publisher;</publisher> 这里的&publisher;会被“ABC company”替换 </book> <book> <name>Ajax Patterns</name> <price>$7.95</price> <description>Introduction of Ajax Patterns.</description> <publisher>&publisher;</publisher> 这里的&publisher;会被“ABC company”替换 </book> </booklist>
...未完待续
简单漏洞利用:https://bbs.ichunqiu.com/thread-44650-1-7.html
学习自https://www.cnblogs.com/backlion/p/9302528.html
以上是关于注入XML解释器的主要内容,如果未能解决你的问题,请参考以下文章
以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段