XXE
slug
series-status
status
summary
date
series
type
password
icon
tags
category
XXE
XXE漏洞会用到哪些函数
XML External Entity (XXE) 漏洞是一种针对 XML 解析器的攻击,攻击者通过注入恶意的 XML 实体来尝试读取服务器上的敏感数据、执行远程请求或实现拒绝服务攻击。XXE 漏洞通常涉及到以下几种 XML 解析器或函数:
Java
PHP
Python
Ruby
.NET
Go
Node.js
要防止 XXE 漏洞,可以遵循以下最佳实践:
- 禁用外部实体解析
- 使用不易受 XXE 攻击影响的库
- 对输入数据进行过滤和验证
- 保持软件和依赖关系的更新
XXE是怎么造成的(代码层面)
XXE(XML External Entity)漏洞是由于 XML 解析器处理外部实体时的不安全配置或者不当实现造成的。从代码层面来看,XXE 漏洞通常是由以下几种情况导致的:
- 解析器配置不安全:许多 XML 解析器在默认配置下允许处理外部实体。攻击者可以利用这一点,通过向 XML 文档中插入恶意的外部实体引用,来访问服务器上的敏感文件或发起远程请求。要防止 XXE 漏洞,需要显式地禁用外部实体解析。 例如,在 Java 中使用 DocumentBuilderFactory 时,可以通过以下方式禁用外部实体解析:
- 不正确的输入验证:如果应用程序接受用户提供的 XML 数据作为输入,而没有进行适当的验证,攻击者可能会注入恶意的 XML 实体。为了防止 XXE 漏洞,需要对输入数据进行严格的验证,以确保只接受合法的 XML 文档。
- 缺乏安全编码:在处理 XML 数据时,如未对特殊字符进行适当的转义,攻击者可能会利用这一点来注入恶意代码。要防止 XXE 漏洞,需要确保 XML 文档中的所有特殊字符都经过安全编码。
- 使用易受攻击的库:某些 XML 解析库可能存在已知的 XXE 漏洞。要防止 XXE 漏洞,应该使用不易受 XXE 攻击影响的库,或者及时更新库以修复已知漏洞。
总之,在代码层面,要防止 XXE 漏洞,需要确保使用安全的解析器配置、进行严格的输入验证、采用安全编码,并使用不易受攻击的库。
除了使用
disallow-doctype-decl
参数禁用文档类型声明(DOCTYPE)以预防 XXE 漏洞之外,还可以使用其他参数来防范 XXE。不同的编程语言和 XML 解析器可能有不同的参数设置。以下是一些常见的参数:- Java:
- DocumentBuilderFactory 和 SAXParserFactory:
http://xml.org/sax/features/external-general-entities
:禁用外部通用实体http://xml.org/sax/features/external-parameter-entities
:禁用外部参数实体- XMLInputFactory(StAX 解析器):
XMLInputFactory.SUPPORT_DTD
:禁用 DTD 支持XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES
:禁用外部实体支持- TransformerFactory:
http://javax.xml.XMLConstants/property/accessExternalDTD
:限制访问外部 DTDhttp://javax.xml.XMLConstants/property/accessExternalStylesheet
:限制访问外部样式表- SchemaFactory:
http://javax.xml.XMLConstants/property/accessExternalDTD
:限制访问外部 DTDhttp://javax.xml.XMLConstants/property/accessExternalSchema
:限制访问外部 Schema
- .NET:
XmlReaderSettings
:ProhibitDtd
属性:禁用 DTD 支持DtdProcessing
属性:设置为DtdProcessing.Prohibit
以禁用 DTD 支持XmlResolver
属性:设置为null
以禁用外部实体解析
- PHP:
libxml_disable_entity_loader()
函数:禁用外部实体加载器,防止 XXE 漏洞
- Python:
defusedxml
库:这是一个安全的 XML 库,可以防止 XXE 漏洞。使用此库替换内置的 XML 库。
- Ruby:
- Nokogiri :
Nokogiri::XML::ParseOptions::NOENT
:禁用外部实体解析Nokogiri::XML::ParseOptions::DTDLOAD
:禁用 DTD 加载
- Node.js:
xml2js
:xml2js.Parser
的options
参数中设置resolveExternalEntities
为false
,禁用外部实体解析xmldom
:- *设置自定义的 **
DOMParser
配置,以禁用外部实体解析
不同的编程语言和库可能需要不同的参数设置,建议查阅官方文档,了解如何安全地配置 XML 解析器,以防范 XXE 漏洞。
XXE无回显
- 攻击服务器上放置如下dtd文件:
- 启动httpserver
- 发送如下payload给靶场
- 查看httplog:

成功收到回显
。

无回显内网探测
- 攻击外部dtd
- 攻击payload
- 攻击效果


可知内网172.17.0.1主机的80端口存活。
Loading...