XXE的基本概念和利用方式是什么

  介绍

本篇内容主要讲解“XXE的基本概念和利用方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“XXE的基本概念和利用方式是什么”吧!

XXE的基本概念和利用方式

本文侧重于对XXE原理和概念的总结,简化了细节性的内容。本文从黑帽欧盟2013 XML带外数据检索,带外XML外部实体(OOB-XXE)等优质文章中节选了部分具有代表性的内容进行翻译。在保证术语准确性的前提下,尽量精简。

0 x00参考文献

什么是XML外部实体(XXE)攻击

带外XML外部实体(OOB-XXE)

XML带外数据检索

XML外部实体处理

A4:2017-XML外部实体(XXE)

0 x01概述

<强> XXE

XXE全称XML外部实体注入,也就是XML外部实体注入。

它是对解析XML输入的应用程序的一种攻击。当<强>配置不当的XML处理器强处理包含<强>对外部实体的<>强引用的XML输入时,就会发生此攻击。

<强> XML的作用

XML被设计用来传输和存储数据,其关注点是数据的内容。XML旨在传输信息。要解释XML数据,应用程序需要XML解析器。

XML文档可以是特定类型。您可以通过指定类型定义在文档中声明此类型XML解析器会在处理文档之前验证XML文档是否遵守此类型定义。您可以使用两种类型的类型定义:XML架构定义(XSD)或文档类型定义(DTD) .XXE漏洞发生在“文档类型定义”中。

<强>什么是DTD(文档类型定义)

DTD(文档类型定义)的作用是定义XML文档的合法构建模块。DTD的声明:指XML文档中声明该文档的DTD或DTD来源的部分,可以包含在使用它的XML文档内部,也可以以独立的DTD文档(* .dtd)文档存在。

所以DTD一般认为有两种引用或声明方式:

1,内部DTD:即对XML文档中的元素,属性和实体的DTD的声明都在XML文档中。

2,外部DTD:即对XML文档中的元素,属性和实体的DTD的声明都在一个独立的DTD文件(.dtd)中。

DTD文档的三种形式:

内部DTD类型:<代码> & lt; !DOCTYPE根元素(子元素声明)在

外部DTD类型:<代码> & lt; !DOCTYPE根元素系统“DTD文件路径“在

内外部DTD文档结合:<代码> & lt; !DOCTYPE根元素系统“DTD文件路径“;(定义内容]在

在XXE中最常用的是内部DTD类型。

在DTD内,我们可以声明外部实体。

<强>什么是XML实体(实体)

实体是用于定义引用普通文本或者特殊字符的快捷方式的变量。

XML实体几乎可以来自任何地方,包括外部资源(因此称为XML外部实体)。

在DTD中的实体类型,一般分为:内部实体和外部实体,细分又分为普通实体和参数实体。

<强>实体的具体分类

预定义:<代码>,ampamp;, amplt;, amp # 37;

内部实体:<代码> & lt; !实体实体名称“实体的值,在

外部实体:<代码> & lt; !实体实体名称系统“URI/URL"在

内部实体和外部实体统称为普通实体

普通实体的引用方式是<代码>和普通实体名;

参数实体:<代码> & lt; !实体%实体名“实体内容“在

参数实体的引用方式是<代码> %实体名;

普通实体和参数实体可能是:

内部的(定义在当前DTD中)

外部的(定义在外部资源中)

<强>可能造成XXE的风险因素

该应用程序解析XML文档

实体的系统标识符部分,文档类型声明(DTD)中允许使用受污染的数据

XML解析器配置为验证和处理DTD

XML解析器配置为解析DTD内的外部实体

<强> XXE的影响

本地文件读取

内网访问

主机扫描/端口扫描

远程代码执行(不常用)

拒绝服务攻击

<>强防御

尽可能<强>使用简单的数据格式(如JSON),并避免敏感数据序列化

修补或升级XML处理器和库,使用依赖项检查器。

在应用程序的所有XML解析器中<强>禁用XML外部实体和DTD处理

在服务器端使用<强>白名单强输入验证,过滤或清理,防止XML文档,表,头节点内的恶意数据。

XML或XSL文件上传功能使用<强> XSD (XML架构定义)验证传入的XML。

科协根据检测源代码中的XXE。

使用虚拟补丁程序,API安全网关或Web应用程序防火墙(WAF)来检测和阻止XXE攻击。

<强> 0 x02利用方式

<强>本地文件读取

XXE的基本概念和利用方式是什么