什么是XXE
XXE(XML External Entity Injection)即XML外部实体类注入漏洞。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。XXE漏洞触发的点往往是可以上传XML文件的位置,没有对上传的XML文件进行过滤,导致可上传恶意XML文件。
今天训练营将给大家介绍和演示XXE漏洞,下面是一个XML示例,和HTML相似但是标签更加随意
<note>
<to>这是个示例</to>
<from>标签是随意的</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
这个是DTD文件的格式
<!ELEMENT 元素名 类型>
下面是一个DTD文件的示例
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
比如我们可以通过DTD来访问目标电脑的上的某些文件,例如
<!ENTITY content SYSTEM "file:///etc/passwd">
]>
<note>
<name>&content;</name>
</note>
在安装了expect扩展时我们还可以让其执行一些系统命令
可以使用语言提供的禁用外部实体的方法、
例如PHP
libxml_disable_entity_loader(true);
JAVA
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
.setFeature("http://apache.org/xml/features/disallow-doctypedecl",true);
.setFeature("http://xml.org/sax/features/external-generalentities",false)
.setFeature("http://xml.org/sax/features/external-parameterentities",false);
Python
from lxml importetree
xmlData=etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
或者对XML进行检查对关键字进行黑名单
比如SYSTEM和PUBLIC。
地址|北京市海淀区奥北科技园20号楼5层
原文始发于微信公众号(大学生网络安全尖锋训练营):【学习园地】XXE漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论