首页 > 其他分享 >禁用XXE处理漫谈

禁用XXE处理漫谈

时间:2023-03-10 16:35:35浏览次数:61  
标签:XML 实体 禁用 漫谈 漏洞 引用 XXE

前言

近期准备面试题时,XXE漏洞防范措施(或者说修复方式)在一些文章中比较简略,故本文根据研究进行总结,作为技术漫谈罢了。

简述

XXE漏洞

XXE(XML外部实体注入),程序解析XML数据时候,同时解析了攻击者伪造的外部实体。XML用途是为了跨平台语言传输数据,常常用于WEB开发等。

XXE漏洞攻防情况

通常来说,XML文档生成时会常用到XXE和内部实体。因此开发团队根据项目需求去进行防范XXE漏洞。

然而实际情况是,即使采取了防范措施(错误的方法),XXE漏洞仍然可以大行其道。

有一个案例,某开发团队针对CVE-2018-20318漏洞进行了及时的修复,依照的是官方的修复方案:

禁止实体扩展引用,dbFactory.setExpandEntityReferences(false)

然而后续XXE漏洞仍然可以奏效,有师傅又提交了CVE漏洞。

最后有师傅总结正确的修复方法,如下:

CVE-2018-20318修复

禁用XXE处理分析

根据上述所说,XXE漏洞的正确处理是尤为重要的。我们这里以Java为例,并且应用偏向于JAXP API进行分析如何禁用XXE处理。

禁用文档类型

首先可以禁用文档类型。实体通过XML 文档的 DOCTYPE 进行声明。

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

我们在进行安全开发规划时,如确定不需要 DOCTYPE 声明时,可以完全禁用禁用文档类型。

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

当我们设置为true时,disallow-doctype-decl 使XML处理器发现DOCTYPE 声明时抛出异常。

禁用外部实体声明

其次是可以允许声明DOCTYPE,但禁用外部实体声明。

故若想要正常处理其他DTD声明,只针对外部实体进行抛出异常。可以用下面两种方法设置为flase来处理:

factory.setFeature("http://xml.org/sax/features/external-general-entities", false);factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

补充说明:在PHP中,libxml库默认下是安全的,总是禁用外部实体。除非通过设置LIBXML_NOENT参数进行允许。如下:

$doc = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOENT); // !XXE enabled!$doc = simplexml_load_string($xml, "SimpleXMLElement"); // XXE disabled

启用安全处理

在Java中可以使用Feature for Secure Processing (FSP)进行安全处理。如下:

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

FSP属于一种核心Java机制,用于以应用限制去配置XML处理器,从而可以防范XML拒绝服务攻击和XXE漏洞。

默认设置下,FSP处于部分启用的状态,XML拒绝服务攻击可以防范。而XXE漏洞我们需要通过调用setFeature方法,将FSP由部分启用转为完全启用。

不过也有特例,例如Apache Xerces中FSP不限制外部连接,无法防范XXE漏洞。

总之,开发人员应当测试涉及XXE漏洞的FSP配置,并结合其他方式来禁用或者限制XXE。

禁用实体引用扩展

XML文档中寻找实体引用主要有两种方式:

(1)DOM XML解析器作值替换引用

(2)DOM树创建空实体进行引用

将实体作值替换的机制在解析恶意XML文件时,可能会泄露敏感信息。

在Java中,对象DocumentBuilder中的etExpandEntityReferences方法用于配置实体引用:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setExpandEntityReferences(false);

当配置为false时,不会进行实体引用。因而可以防范XXE漏洞。

扩展外部实体引用是发生在已提取外部内容之后。

因此禁用后且攻击者无法造成泄露敏感数据,仍然执行请求外部资源。

不过经过禁用实体引用扩展,攻击者仅能进行blind SSRF攻击,难以实际造成威胁。

所以禁用实体引用扩展也是我们防范XXE漏洞的可选方案。

结束语

本文为XXE漏洞相关的防范措施漫谈,主要针对禁用XXE处理。

可以采取禁用文档类型、禁用外部实体声明、启用安全处理、禁用实体引用扩展这四种方式去进行防范。

更多靶场实验练习、网安学习资料,请点击这里>>

 

标签:XML,实体,禁用,漫谈,漏洞,引用,XXE
From: https://www.cnblogs.com/hetianlab/p/17203839.html

相关文章

  • 漫谈DevOps
    英文原文:ThreeAspectsofDevOps:What’sinaword原文作者:BenRockwood云和DevOps是最近非常火的两个名词,很多人都会思考它们到底是什么。“云”这个名词,相对比......
  • 漫谈Python魔术方法,见过的没见过的都在这里了
    漫谈Python魔术方法,见过的没见过的都在这里了就说一下,不深入假的一览提到魔术方法,学过python都应该知道一些。至少你得会__init__吧。在我之前写的博文中有很多都涉......
  • 6、Redis禁用危险命令和压测工具
    1.Redis禁用危险命令Redis危险的命令有哪些?>FLUSHALL会清空Redis所有数据>FLUSHDB会清除当前DB所有数据>KEYS*在键过多的时候......
  • 查找禁用后的AD用户对象位置
     AD用户禁用后,新建用户与禁用的用户冲突,会导致创建不了,但又不知道禁用的用户处在哪个OU下,可以尝试用以下命令找出禁用的用户OU位置: Get-ADUser|Where-Object{$_.Use......
  • centos7.9系统禁用selinux脚本
    临时关闭setenforcepermissive永久关闭配置文件路径/etc/sysconfig/selinux修改配置项SELINUX=enforcing为SELINUX=disabledsed-i's/SELINUX=enforcing/'SEL......
  • 架构漫谈读后感
    首先,最近在课上老师推荐我们阅读王概凯老师的架构漫谈连载博客,通过详细的阅读,我确实收获颇丰。首先就是对于架构是什么,架构解决的是什么有了一个深入的了解。第一,什么架构......
  • 【Winform】禁用控件但不变灰
    https://blog.csdn.net/Cool2Feel/article/details/81018722[System.Runtime.InteropServices.DllImport("user32.dll")]publicstaticexternintSe......
  • 漫谈丨集团企业的电子档案怎么管?
    今天聊聊集团企业电子档案建设的话题,根据这么多年的项目实践经验,可以从以下4个角度解决。一般情况下,集团企业档案电子化是由集团本部顶层设计,下属产业集团企业试点执行,数据......
  • XXE注入
    XXE有回显利用方式总结结合外部实体声明(实体名称SYSTEM”uri/url“)和参数实体(%实体名称SYSTEM“uri-外部dtd”)有两种方式进行注入攻击姿势一<?xmlversion="1.0"......
  • PHP_XXE
    当输入错误用户名和密码的时候,服务端就会返回用户名并提示登录错误adminloginfail!读取文件同理可以读取网站源码,字符需要base64解码......