XXE渗透与攻防(一)

news2024/11/20 7:24:11

目录

前言

XML基础知识

XML用途

XML内容 

XML格式要求 

 XML格式校验

不同语言支持的协议 

完整的XML内容 

什么是XXE

 案列演示

盲打-DNSLog

XXE 防御


前言

现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确。当解析器允许XML外部实体解析时,就会造成XXE漏洞,导致服务器被攻击。

XML基础知识

XML用途

XML可以同作于配置文件

 XML可以用来交换数据

XML内容 

XML的内容是怎样的呢?我们来一下样例。

XML格式要求 

 XML格式校验

XML有种格式校验类型叫做DTD

 我们可以自定义DTD内容,以让这个XML文件里面该有哪些元素

 我们也可以去定义实体,让别的XML文件来引用这个实体

实体的引用有两种,一种是内部实体引用:

 

 还有一种就是外部实体引用:

我们可以看到这里通过file文件协议去访问了本机D盘上的资源,除了file协议,那我们还有哪些协议可以使用呢?

不同语言支持的协议 

完整的XML内容 

我们再来看一下一个完整的XML内容是什么样的:

什么是XXE

XXE

XXE(XML External Entity Injection)也就是XML外部实体注入,XXE漏洞发生在应用程序解析XML输入时,XML文件的解析依赖libxml 库,而 libxml2.9 以前的版本默认支持并开启了对外部实体的引用,服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部一般实体和外部参数实体)做合适的处理,并且实体的URL支持 file:// 和 ftp:// 等协议,导致可加载恶意外部文件 和 代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

接下来我们来看一串代码:

这串代码的含义是它有一个表单,它会接受从用户输入的内容,然后把他解析为XML,然后把它输出到浏览器里面。

然后我们将这串代码保存为xxe.php文件,并将其配置在我们的网站上,用浏览器打开它,效果如图下所示:

 我们往里面放入一串内部实体的代码,看看会发生什么:

可以看到,点击提交后,它将我们的数据解析并显示在了浏览器上:

 这里可以看到引用内部实体成功,那如果是外部实体呢?

可以看到这里是外部实体的引用,通过外部实体去引用我们在E盘下的in.txt文件。

可以看到,我们点击提交后,成功引用了外部实体:

那这里是不是任意读取了我们本机E盘下的文件呢?是不是就导致了XXE漏洞了呢?

XXE漏洞除了用来读取任意文件,还可以进行端口探测:

我们利用http协议去探测本机的3307端口有没有开放,如下出现报错,说明没有开放:

同样的,如果是3306端口呢?

结果点击提交后,显示正常,跟上面3307出现的报错情况一对比,可以看出3306端口是开放的。

 

我们还可以利用XXE漏洞去执行系统命令,不过这里有个前提,那就是你的php必须安装了expect扩展才可以执行系统命令。

XXE炸弹攻击,这种攻击方式是通过读取一个很大的随机任意文件,导致你的服务器服务中断:

 案列演示

我们来看一下这个叫做XXE-Lab的靶场:

 我们打开F12,在UserName和Password字段中输入1和1来查看Request信息:

如上所看到这里确实运用了XML文件来传递参数。

接下来我们打开BurpSuite,抓包分析:

抓到如下数据包:

从这里确实可以看出这里用了XML格式,那我们该如何去利用它呢?

首先第一步,我们要先添加上下面这串代码,来去读本机的文件:

然后第二步,我们要去引用这个外部实体,否则这串代码是不会被执行的:

然后我们放包,查看回显信息:

假设这里有一种情况,就是对方网站进行了限制,导致我们恶意执行的命令不会回显在我们的网页上,那我们遇上这种情况该怎么办呢?我们这里就运用到了一种攻击手法,叫做盲打-DNSLog。

盲打-DNSLog

首先我们输入这个网址,打开DNSLog平台:

 点击Get SubDomain获取一个子域名:

 然后我们构造如下的xml数据看看会发生什么:

 可以看到这里通过DNS-Log平台产生了DNS解析的记录。

 还有一种叫做盲打-http接口参数,写入文件。

这串代码是去读取公网下的一个evil.dtd文件。

我们再来看一下evil.dtd文件的内容:

这整串代码的整体思路就是首先去attacker.com网站上解析evil.dtd文件的内容。然后通过php协议通过base64编码去读取c盘下的system.ini文件信息,然后将其赋值给file,最后通过p接受这个file传参将其发送到http://192.168.142.135:8080端口上,这里的192.168.142.135:8080可以是我们攻击者的主机,这样我们就接收到了从目标服务器上回显的信息了。

XXE 防御

PHP :

添加上下面这串代码:

libxml_disable_entity_loader(true);

 Java:

添加上下面这串代码:

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

.Net:

ASP

 

Python

from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=Fa
lse))

 

 

过滤用户提交的XML数据:

安装WAF等安全产品:

 

 

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

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

相关文章

高压放大器在介电泳分选的应用

实验名称:基于高压放大器的介电泳分选 研究方向:滴液分选 测试原理: 在非均匀电场中,介电体表面感生出的正负电荷处于不同场强的位置上在它受到的合力大于一定值时就会被拉向强电场方向。 测试设备:ATA-7030高压放大器…

类与对象(下)

类与对象构造函数构造函数体赋值初始化列表explicit关键字static成员概念特性友元友元函数友元类内部类匿名对象拷贝对象时的一些编译器优化构造函数 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 clas…

勃仔诞生记:Hubbleverse哈勃元宇宙的起源故事

欢迎来到Hubbleverse 🌍 关注我们 关注宇宙新鲜事 📌 预计阅读时长:9分钟 本文仅代表作者个人观点,不代表平台意见,不构成投资建议。 想象一个属于你的世界,一个资源丰富的世界,你可以在其中…

Android TV刷机Mstar篇——以乐视超4-X50Pro为例

家里这台乐视使用好几年了,最近闲来无事,就琢磨着刷一刷,打造一个纯净使用体验。 记录下刷机历程,方便后期再查看。 一、准备工作 1、下载刷机固件,这里使用了ZNDS大神出的包。 超4X43 Pro/超4X50 Pro通用流畅精简…

pytorch应用(入门1)

目录学习用具张量的定义和运算Variable(变量)Dataset数据集之前一直是拿一个个项目来学pytorch,感觉不是很系统,借着假期的机会系统学一下。预计先把入门的知识一周学完吧。 学习用具 《深度学习入门之Pytorch》廖星宇 在Z-lib…

数字孪生流域建设及其应用

2021年底水利部召开推进数字孪生流域建设工作会议,会议按照“需求至上、应用至上、数字赋能、提升能力”要求,以数字化、网络化、智能化为主线,以数字化场景、智慧化模拟、精准化决策为路径,以算据、算法、算力建设为支撑&#xf…

美国服务器安全吗?如何进行安全检测和使用?

对服务器安全检测是保证稳定运行的一种方式,尤其面向海外的一些用户,因为使用的服务器无法时刻检查,对安全系数要求又很高。因此,在租用前和使用时进行安全检测是十分有必要的。那么,美国服务器怎么进行安全检测呢? 一…

为深度学习选择最好的GPU

在进行机器学习项目时,特别是在处理深度学习和神经网络时,最好使用GPU而不是CPU来处理,因为在神经网络方面,即使是一个非常基本的GPU也会胜过CPU。 但是你应该买哪种GPU呢?本文将总结需要考虑的相关因素,以便可以根据…

直播倒计时1天!“基于AIOps的全面可观测性网络研讨会”与你不见不散

当企业云化不断加速,应对重复冗杂的运维活动,引入智能算法的AIOps已成发展趋势: 高效定位故障来源,保证数字业务稳定可靠运行,深挖数据价值促进企业创新……AIOps能做的还有很多。 想了解更多关于AIOps的相关内容&am…

Spring注册Bean系列--方法4:@Import+ImportSelector接口

原文网址:Spring注册Bean系列--方法4:ImportImportSelector接口_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法:ImportImportSelector接口。 注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Be…

php宝塔搭建部署实战SDCMS蓝色系列包装行业网站源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的SDCMS蓝色系列包装行业网站源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&…

房产管理系统平台架构求分析

数图互通房屋管理系统遵循高校房产“分级授权、分类管理、网络化、图形化、精细化、流程化”的管理理念,在资产管理部门统一管理全校房产的前提下,注重二级单位在房产管理中的参与,注重针对不同类型类别房产的分类管理提高学校房产的使用效率…

加强舆情监控有哪些方法,互联网舆情监控平台有哪些?

加强舆情监控是指企业通过提升监控能力,更好地了解公众对其产品、服务、品牌形象等的看法,并及时采取应对措施。接下来TOOM舆情监测小编带您简单了解加强舆情监控有哪些方法,互联网舆情监控平台有哪些? 企业可以通过以下方式加强舆…

C# 并行编程

一 并行任务库TPL 1 并行任务库(TPL,Task Parallel Library) 2 最重要的是Task类,还有Parallel类 3 Task类,是利用线程池来进行任务的执行 比如直接用ThreadPool更优化,而且编程更方便 4 Paallel类&…

右值引用与移动语义

目录 一、左、右值引用 1.1 什么是左值 1.2 什么是右值 1.3 右值引用特性 1.4 move语义 二、左、右值引用的比较 三、右值引用的使用场景 3.1 左值引用的短板 3.2 解决方案 四、移动构造与移动赋值 注意情况 五、万能引用与完美转发 5.1 万能引用 5.2 完美转发 …

【SpringMVC】SpringMVC中异常处理

1.异常处理的思路 系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的 dao、service、controller 都通过 throws Excepti…

以前的互联网技术几乎是解决一切痛点和难题的万能解药

事实上,以往,我们所经历的那个互联网玩家频出的年代,其实就是一个以互联网技术为主导的年代。在那样一个年代里,互联网技术几乎是解决一切痛点和难题的万能解药,几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…

怎么恢复删除的照片?分享5种恢复 iPhone /iPad 照片的方法

从 iPhone 中删除照片可能会带来压力。以下是如何使用几种不同的方法从 iPhone 恢复最近删除的照片。运气好的话,如果照片没有被新数据覆盖,您可以取回照片。 方法 1. 使用iPhone照片恢复工具 以下是如何使用图像恢复软件从 iPhone 中恢复已删除的图片&a…

字节跳动模型大规模部署实战

动手点关注干货不迷路1. 背景介绍在字节跳动,基于深度学习的应用遍地开花,工程师关注模型效果的同时也需要关注线上服务一致性和性能,早期这通常需要算法专家和工程专家分工合作并紧密配合来完成,这种模式存在比较高的 diff 排查验…

电磁兼容教程

------------------------20221228--------------------------------- 定义: 电磁环境,设备正常工作,不干扰其他设备。共存 电磁兼容研究 有限时间、空间、频谱设备共存的科学 要素: 电磁环境是由空间、时间、频谱三要素组成。…