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 漏洞,可以遵循以下最佳实践:
  1. 禁用外部实体解析
  1. 使用不易受 XXE 攻击影响的库
  1. 对输入数据进行过滤和验证
  1. 保持软件和依赖关系的更新

XXE是怎么造成的(代码层面)

XXE(XML External Entity)漏洞是由于 XML 解析器处理外部实体时的不安全配置或者不当实现造成的。从代码层面来看,XXE 漏洞通常是由以下几种情况导致的:
  1. 解析器配置不安全:许多 XML 解析器在默认配置下允许处理外部实体。攻击者可以利用这一点,通过向 XML 文档中插入恶意的外部实体引用,来访问服务器上的敏感文件或发起远程请求。要防止 XXE 漏洞,需要显式地禁用外部实体解析。 例如,在 Java 中使用 DocumentBuilderFactory 时,可以通过以下方式禁用外部实体解析:
  1. 不正确的输入验证:如果应用程序接受用户提供的 XML 数据作为输入,而没有进行适当的验证,攻击者可能会注入恶意的 XML 实体。为了防止 XXE 漏洞,需要对输入数据进行严格的验证,以确保只接受合法的 XML 文档。
  1. 缺乏安全编码:在处理 XML 数据时,如未对特殊字符进行适当的转义,攻击者可能会利用这一点来注入恶意代码。要防止 XXE 漏洞,需要确保 XML 文档中的所有特殊字符都经过安全编码。
  1. 使用易受攻击的库:某些 XML 解析库可能存在已知的 XXE 漏洞。要防止 XXE 漏洞,应该使用不易受 XXE 攻击影响的库,或者及时更新库以修复已知漏洞。
总之,在代码层面,要防止 XXE 漏洞,需要确保使用安全的解析器配置、进行严格的输入验证、采用安全编码,并使用不易受攻击的库。
除了使用 disallow-doctype-decl​ 参数禁用文档类型声明(DOCTYPE)以预防 XXE 漏洞之外,还可以使用其他参数来防范 XXE。不同的编程语言和 XML 解析器可能有不同的参数设置。以下是一些常见的参数:
  1. 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​:限制访问外部 DTD
        • http://javax.xml.XMLConstants/property/accessExternalStylesheet​:限制访问外部样式表
      • SchemaFactory:
        • http://javax.xml.XMLConstants/property/accessExternalDTD​:限制访问外部 DTD
        • http://javax.xml.XMLConstants/property/accessExternalSchema​:限制访问外部 Schema
  1. .NET:
      • XmlReaderSettings​:
        • ProhibitDtd​ 属性:禁用 DTD 支持
        • DtdProcessing​ 属性:设置为 DtdProcessing.Prohibit​ 以禁用 DTD 支持
        • XmlResolver​ 属性:设置为 null​ 以禁用外部实体解析
  1. PHP:
      • libxml_disable_entity_loader()​ 函数:禁用外部实体加载器,防止 XXE 漏洞
  1. Python:
      • defusedxml​ 库:这是一个安全的 XML 库,可以防止 XXE 漏洞。使用此库替换内置的 XML 库。
  1. Ruby:
      • Nokogiri
        • Nokogiri::XML::ParseOptions::NOENT​:禁用外部实体解析
        • Nokogiri::XML::ParseOptions::DTDLOAD​:禁用 DTD 加载
  1. Node.js:
      • xml2js​:
        • xml2js.Parser​ 的 options​ 参数中设置 resolveExternalEntities​ 为 false​,禁用外部实体解析
      • xmldom​:
        • *设置自定义的 **DOMParser​ 配置,以禁用外部实体解析
不同的编程语言和库可能需要不同的参数设置,建议查阅官方文档,了解如何安全地配置 XML 解析器,以防范 XXE 漏洞。

XXE无回显

  • 攻击服务器上放置如下dtd文件:
  • 启动httpserver
  • 发送如下payload给靶场
  • 查看httplog:
notion image
​成功收到回显
notion image

无回显内网探测

  • 攻击外部dtd
  • 攻击payload
  • 攻击效果
notion image
notion image
可知内网172.17.0.1主机的80端口存活。
Loading...

尚未开始
更新中
近期核心
已完结
已弃更

© River 2021-2025