XML&XXE是什么

XML

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,把数据从HTML分离,是独立于软件和硬件的信息传输工具。

XXE漏洞原理

XXE漏洞全程XML External Entity Injection,即xml外部实体注入漏洞,该漏洞产生在应用程序解析XML输入时没有禁止外部实体的加载,导致可加载恶意外部文件,文件读取,命令执行,内网端口扫描,攻击内网网站等危害。

XML和HTML区别

XML:被设计用来传输和存储数据,其焦点是数据内容。

HTML:用来显示数据,其焦点是数据的外观。

XML基本语句

<!--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>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>

#DTD
1.DTD,文档类型定义,可定义合法的XML文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD可被成行的声明于XML文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
<!DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
<!DOCTYPE 根元素 SYSTEM ”文件名”>

#DTD实体
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>

修复方案

xxe漏洞修复与防御方案-php,java,python-过滤及禁用
#方案1-禁用外部实体

PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

#方案2-过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<ENTITY,或者SYSTEM和PUBLIC

注:漏洞利用及XML语法在漏洞利用中会详细讲解

点击跳转:

最后修改:2020 年 11 月 05 日 09 : 31 PM
如果觉得我的文章对你有用,请随意赞赏