PortSwigger XML外部实体注入(XXE)

一、漏洞原理

        当应用程序使用 XML 格式传输数据,应用程序使用的是标准库来处理上传到服务器上的 XML 数据。由于XML 规范中包含了各种潜在的危险功能,而标准的解析器支持这些危险的功能,进而导致了XXE漏洞,换句话说就是引用了外部的恶意DTD。

二、常见利用方式

        1、利用外部实体检索文件

 ]>
&xxe;

        2、利用外部实体执行SSRF攻击

 ]>
&xxe;

        3、外带交互的盲XXE

 ]>
&xxe;

        4、通过XML参数实体进行外带交互的盲XXE

 %xxe; ]>
%xxe;

        5、利用盲XEE使用外部恶意DTD泄露数据

//外部恶意DTD

">
%eval;
%exfiltrate;
//客户端插入XXE代码
 %xxe;]>

        6、利用盲XXE通过错误消息检索数据

//客户端插入XXE代码

">
%eval;
%error;

        7、利用XXE通过重新调整本地DTD的用途来检索数据

//用来测试该路径下是否存在docbookx.dtd文件,不存在报错。

%local_dtd;
]>
//custom_entity 为重写的实体名


">
%eval;
%error;
'>
%local_dtd;
]>

        8、利用XInclude检索文件(隐藏XXE)

//将以下XXE代码当参数传入后端,后端处理参数时会引用http://www.w3.org/2001/XInclude命名空间,执行识别xi:include标签的功能性。


        9、通过图像文件上传利用XXE

//将以下代码放入SVG文件并上传
 ]>&xxe;

三、常见防护措施

        1、禁用外部实体:

//php
libxml_disable_entity_loader(true);
//java
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

.setFeature("http://xml.org/sax/features/external-general-entities",false)

.setFeature("http://xml.org/sax/features/external-parameter-entities",false);
python
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

         2、过滤用户提交的XML数据:

        关键词: 、 、SYSTEM、PUBLIC、INCLUDE。

你可能感兴趣的:(PortSwigger,靶场总结,xml,安全,web安全,网络安全)