WEB漏洞-XXE&XML之利用检测
该文章为学习笔记大佬勿喷
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE Injection全称XML External Entity Injection,即xml外部实体注入漏洞,也就是XML外部实体注入攻击。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML 的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
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
文档类型定义(DTD)可定义合法的XML文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
<!DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
<!DOCTYPE 根元素 SYSTEM ”文件名”>
#DTD实体
(1)内部实体
在程序用的比较多就是内部实体
参数实体声明:<!ENTITY 实体名称 ”实体的值”>
<?xml version=”1.0″ encoding=”ISO-8859-1″?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don’t forget the meeting!</body></note>
(2)外部实体
外部实体可支持http、file等协议 不同程序支持的协议也不同。
参数实体声明:<!ENTITY 实体名称 SYSTEM ”URI/URL”>
<?php
$string_xml = ‘<?xml version=”1.0″ encoding=”utf-8″?><note><to>George</to><from>John</from><heading>Reminder</heading><body>xml实体注入</body></note>’;
$xml = isset($GET[‘xml’])?$GET[‘xml’]:$string_xml;
$data = simplexml_load_string($xml);
echo ‘<meta charset=”UTF-8″>’;
print_r($data);
?>
(3)有回显
任意读取文件
<?xml version=”1.0″?><!DOCTYPE a [<!ENTITY b SYSTEM “file:///etc/passwd”>]><c>&b;</c>
使用是要进行编码
在php里还可以利用伪协议读取文件
扫描端口
执行命令
(4)称为 blind xxe 可以使用外带数据通道 提取数据
xxe漏洞修复与防御方案-php,java,python-过滤及禁用
方案1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案2-过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
来源:freebuf.com 2021-06-16 22:34:58 by: 明月清风hzx
请登录后发表评论
注册