本篇内容主要讲解“XXE的基本概念和利用方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“XXE的基本概念和利用方式是什么”吧!
XXE的基本概念和利用方式本文侧重于对XXE原理和概念的总结,简化了细节性的内容。本文从black hat EU 2013 XML Out-Of-Band Data Retrieval、Out-of-band XML External Entity (OOB-XXE)等优质文章中节选了部分具有代表性的内容进行翻译。在保证术语准确性的前提下,尽量精简。
0x00 参考文献什么是XML外部实体(XXE)攻击
带外XML外部实体(OOB-XXE)
XML Out-Of-Band Data Retrieval
XML外部实体处理
A4:2017-XML External Entities (XXE)
0x01 概述XXEXXE全称XML External Entity Injection,也就是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类型:<!DOCTYPE 根元素[子元素声明]>
外部DTD类型:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
内外部DTD文档结合:<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
在XXE中最常用的是内部DTD类型。
在DTD内,我们可以声明外部实体。
什么是XML实体(ENTITY)实体是用于定义引用普通文本或者特殊字符的快捷方式的变量。
XML实体几乎可以来自任何地方-包括外部资源(因此称为XML外部实体)。
在DTD中的实体类型,一般分为:内部实体和外部实体,细分又分为普通实体和参数实体。
实体的具体分类
预定义:&amp;&lt;&#37;
内部实体:<!ENTITY 实体名称 "实体的值">
外部实体:<!ENTITY 实体名称 SYSTEM "URI/URL">
内部实体和外部实体统称为普通实体
普通实体的引用方式是&普通实体名;
参数实体:<!ENTITY % 实体名 "实体内容">
参数实体的引用方式是%实体名;
普通实体和参数实体可能是:
内部的(定义在当前DTD中)
外部的(定义在外部资源中)
可能造成XXE的风险因素该应用程序解析XML文档
实体的系统标识符部分,文档类型声明(DTD)中允许使用受污染的数据
XML解析器配置为验证和处理DTD
XML解析器配置为解析DTD内的外部实体
XXE的影响本地文件读取
内网访问
主机扫描/端口扫描
远程代码执行(不常用)
拒绝服务攻击
防御尽可能使用简单的数据格式(如JSON),并避免敏感数据序列化。
修补或升级XML处理器和库。使用依赖项检查器。
在应用程序的所有XML解析器中禁用XML外部实体和DTD处理。
在服务器端使用白名单输入验证,过滤或清理,防止XML文档、表头、节点内的恶意数据。
XML或XSL文件上传功能使用XSD(XML架构定义)验证传入的XML。
SAST根据检测源代码中的XXE。
使用虚拟补丁程序,API安全网关或Web应用程序防火墙(WAF)来检测和阻止XXE攻击。
0x02 利用方式本地文件读取当用户的输入在响应中回显,这种XXE被称为基于报错的XXE。
攻击者可以使用XML实体。这是因为您不必在XML文档中定义XML实体。实际上,XML实体几乎可以来自任何地方-包括外部资源(因此称为XML外部实体)。这就是XXE成为服务器端请求伪造(SSRF)攻击的一种类型。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。