XXE

  • XXE漏洞产生原因
    XXE漏洞:XML外部实体注入漏洞;应用程序解析XML输入时,没有对上传的XML文件内容进行过滤,没有禁止外部实体的加载,导致可以加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、DOS攻击等。
  • XXE与HTML
    XML是可扩展标记语言、重点在传输数据和存储数据,HTML是展示数据。
  • XXE文档构建模块
    元素、属性、实体、PCDATA、CDATA

    1、XML声明
    2、DTD文档类型定义
    3、文档元素
  • 实体
    实体是用来定义普通文本的变量。实体引用时对实体的引用。
    实体分为一般实体和参数实体。
    1、一般实体:声明方式;引用一般实体的方法:& 实体内容;

    2、参数实体:声明方式: 引用参数实体的方法: %实体名称;
  • DTD实体
    DTD文档类型定义的作用是定义XML文档的合法构建模块。
    DTD实体中,分为内部实体声明和外部实体声明。
  • XXE漏洞可能存在地方

  • XXE利用手段
    1、文件读取:如读取密码文件、配置文件、源代码等。,通过参数实体回显(需要支持外部DTD)
    2、SSRF服务器端请求伪造:外部实体不仅可以访问本地文件file://,还可以利用http://或PHP://filter、ftp://等协议探测内网服务
    3、DOS攻击:通过递归实体引用耗尽资源,构造极小的xml文件、在解析时消耗服务器大量内存,导致服务器瘫痪。
    4、XXE盲注:攻击者可以通过外带信道将数据泄露出来。让服务器将敏感数据通过HTTP或DNS请求发送到攻击者控制的服务器上。
    image
  • XXE防御手段
    1、禁用外部实体
    2、对用户提交的XML数据进行过滤。
    3、配置解析器过滤ENTITY声明
    4、应用程序使用最低的系统权限
    5、及时升级,修补安全漏洞。
  • XXE注入与XML注入的区别
    1、XML注入:攻击者通过注入XML标签或者内容,破坏文档结构或逻辑(如修改用户权限字段)
    2、XXE注入:利用XML解析器加载外部实体的功能,读取文件、发起SSRF或拒绝服务攻击。
    区别:XML注入针对应用逻辑层,XXE利用解析器特性。
    XXE需要依赖外部实体声明:,XML注入无需实体扩展
    XXE 盲注利用方法
    XXE (XML External Entity) 盲注是指当应用程序解析XML输入时存在XXE漏洞,但攻击者无法直接看到解析结果的情况。以下是几种主要的XXE盲注利用方法:
  1. 带外数据外泄 (OOB - Out-of-Band)
    1.1 通过HTTP请求外泄数据
    1.2 通过FTP协议外泄数据
  2. 基于错误的盲注
    2.1 通过错误消息获取数据
  3. 延时技术 (Time-based)
    3.1 使用负载导致处理延迟
  4. 本地DTD利用技术
    4.1 利用已知本地DTD文件
  5. 特殊文件读取技术
    5.1 读取PHP源代码
  6. 服务器端请求伪造 (SSRF):gopher://信息查找系统。用于组织和检索文件。
    6.1 探测内网服务
    防御措施
    1、使用白名单验证XML输入
    2、使用更安全的替代格式(如JSON)
    3、限制XML解析器的网络访问
    4、定期更新XML处理库
    5、禁用DTD和外部实体:
    java
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  • 遇到告警如何研判?
    1、攻击载荷几乎都在POST请求的Body中。
    DOCTYPE声明:存在<!DOCTYPE、<!ENTITY关键字。
    SYSTEM关键字:用于声明外部实体,后面通常会跟一个恶意URL。
    恶意URL方案:文件读取:网络探测ssrf、盲注外带 http://dnslog.cn/xxxx、http://[攻击者VPS]。
    参数实体:实体名前有%符号。直接引用&xxe;或进行包装绕过。
    2、HTTP请求头特征
    Content-type:通常为application或text/xml。如果Content-type时appliaction/json但却出现XML载荷,很可能时误报或攻击者探测行为。
    User-Agent:特定UA,如XXEinjector
    3、URL参数:攻击载荷可能经过编码后放在GET请求的参数中。请求的URL路径是否时已知、处理xml数据的api接口?(如SOAP服务器接口、文件上传解析接口、单点登录SAML回调接口、明确的API接口/api/xml/import)。
    4、响应体包含敏感文件信息,响应体出现明显XML解析错误信息,但错误信息中泄露了文件路径或部分内容(如 java.io.FileNotFoundException: /etc/passwd (Permission denied))。响应状态码为200,但返回了异常的数据。
    image
posted @ 2025-02-12 18:01  予遂计划  阅读(53)  评论(0)    收藏  举报