48.10-2 xxe漏洞原理和案例实验演示(Av96582332,P48)
XXE(
xml external entity injection"
第一部分: 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”>
外部实体引用
payload:
<?xml version = "1.0"?>
<!DOCTYPE ANY
<!ENTITY f SYSTEM "file:///etc/
<x>&f;</
外部引用可以支持
http,file ftp 等协议。
如果一个接口支持接收
xml 数据,且没有对 xml 数据做任何安全上的措施,就可
能导致 XXE 漏洞。
simplexml_load_string()
函数转换形式良好的
XML 字符串为 SimpleXMLElement 对象
在
PHP 里面解析 xml 用的是 libxml, 其在 2.9.0 的版本中 默认是禁止解析 xml 外
部实体内容的。
待补充理解