XML外部实体注入
文章参考链接:
参考视频: https://www.bilibili.com/video/BV1tW411o7Fd?from=search&seid=13868972487110648015
参考文章 :https://blog.csdn.net/qq_43431158/article/details/102979577?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
参考文章 : https://www.freebuf.com/news/175451.html
xxe漏洞逐渐走向消亡 libxml 2.9.0 以后 ,默认不解析外部实体 遂 xxe漏洞逐渐消亡
XML语法、结构与实体引用:
语法:
1.XML元素都必须有关闭标签。
2.XML 标签对大小写敏感。
3.XML 必须正确地嵌套。
4.XML 文档必须有根元素。
5.XML 的属性值须加引号。
结构:
1.XML 文档声明,在文档的第一行
2.XML 文档类型定义,即DTD,XXE 漏洞所在的地方
3.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 元素中,便会发生错误,这是因为解析器会把它当作新元素的开始。
例如:
<message>hello < world</message>
便会报错,为了避免这些错误,可以实体引用来代替 < 字符
<message>hello < world</message>
XML
中,有 5 个预定义的实体引用,分别为:
![]()
优点:
简单来说DTD就是对xml格式的规划,有了DTD,xml写的更加规范
(文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。带有DTD的XML文档实例)
<?xml version="1.0"?> <!DOCTYPE note [<!--定义此文档是 note 类型的文档--> <!ELEMENT note (to,from,heading,body)><!--定义note元素有四个元素--> <!ELEMENT to (#PCDATA)><!--定义to元素为”#PCDATA”类型--> <!ELEMENT from (#PCDATA)><!--定义from元素为”#PCDATA”类型--> <!ELEMENT head (#PCDATA)><!--定义head元素为”#PCDATA”类型--> <!ELEMENT body (#PCDATA)><!--定义body元素为”#PCDATA”类型--> ]> <note> <to>Y0u</to> <from>@re</from> <head>v3ry</head> <body>g00d!</body> </note>
不写了,还是看CSDN老哥对xxe讲解的比较详细!!