当前位置: 首页 > article >正文

零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)

本期内容涉及到很多前面的内容,因此复习后可以更好的了解本期内容

介绍

XXE -"xml external entity injection"即"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

具体的关于xml实体的介绍,网络上有很多,自己动手先查一下。
现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

本章提供的案例中,为了模拟漏洞,通过手动指定LIBXML_NOENT选项开启了xml外部实体解析。 

个人评价:需要有一定的网站开发的知识储备

适用场景:适用于任何涉及XML数据解析的应用程序或服务

实际反馈:可以用来攻击内网和读取服务器文件

原理

XXE漏洞(XML外部实体注入)是一种常见的安全漏洞,它允许攻击者利用XML解析器处理外部实体时的安全缺陷,通过注入恶意外部实体,实现敏感数据读取、服务器端请求伪造(也就是SSRF后面会学到)或远程代码执行(RCE)

也就是XML外部实体(XXE)漏洞是指在处理XML输入时,没有正确禁用外部实体引用而导致的安全漏洞。

XXE漏洞就像是一个不设防的快递收发站。

假设你是一个快递收发站的管理员(相当于服务器),正常情况下,你会按照寄件人(外部用户)的要求,接收并转发包裹(数据请求)。但是,这个 XXE 漏洞就好比这个收发站没有对快递包裹进行严格的安检(没有正确配置 XML 解析器)。

攻击者就好比是心怀恶意的寄件人,他们寄来的包裹里面会附带一个特殊的纸条(恶意构造的外部实体引用),比如要求你去隔壁公司的保险柜(系统中的敏感文件,像配置文件、密码文件等)取一份机密文件,然后再把这份文件当作普通包裹寄回给他(把敏感信息泄露出去)。

由于收发站没有安检(服务器存在 XXE 漏洞),它就会按照包裹里的纸条要求去做,导致本该保密的信息被泄露,这就如同服务器执行了攻击者构造的恶意 XML 请求,读取了本地文件等敏感信息并反馈给了攻击者。

很像之前学过的SQL注入,但是是完全不同的,大家一定要仔细理解

因此,我们首先要了解一些新知识

XML声明

假设你正在写一封信,信的开头会写上收信人的地址和邮编等基本信息。XML声明就像是这封信的开头部分,它告诉阅读者(比如浏览器或其他程序)这封信(XML文档)的基本信息。

DTD文档类型定义(Document Type Definition)

假设你写信时,有一套固定的格式要求,比如信必须有开头、正文和结尾,而且开头必须写日期,结尾必须写祝福语。这套格式要求就像是DTD文档类型定义。

文档元素

你写信时,信的内容被分成了几个部分,比如开头是问候语,中间是正文,结尾是祝福语。这些部分就像是文档元素。

实践

首先,什么是api

API(应用程序编程接口)可以比喻为一家饭店的菜单,你想吃什么需要通过菜单来和厨师(应用程序)联系

而本期内容没有标准答案,有很多方法,在此列举一些,和之前讲过的目录遍历方式一样,指定你本地电脑的文件即可

1,

<?xml version="1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
<a>&xxe;</a>
  • <?xml version="1.0"?> :声明了 XML 文档的版本,这里是 1.0 版本,这是标准的 XML 开头声明,用于定义文档的 XML 版本。

  • <!DOCTYPE ANY [ :这是文档类型定义(DTD)的开始标记。ANY 表示文档的根元素可以是任意名称,在这里是为后续定义外部实体做准备。

  • <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]> :这一行定义了一个名为 xxe 的外部实体,SYSTEM 关键字指定了实体的类型为系统外部实体,其值 file:///c:/windows/win.ini 表示从本地文件系统中读取 C 盘 windows 目录下的 win.ini 文件作为该实体的值。通过这种方式,攻击者可以将本地文件的内容包含到 XML 文档中,如果服务器端在解析 XML 时没有正确处理外部实体引用,就会导致 XXE 漏洞被利用。

  • <a>&xxe;</a> :在 XML 元素 <a> 中引用了之前定义的 xxe 外部实体,当服务器端解析这个 XML 时,会将 &xxe; 替换为从 file:///c:/windows/win.ini 文件中读取的内容,从而实现了读取本地文件的目的,这是 XXE 漏洞的一种典型利用方式。

2,

<?xml version="1.0"?>
<!DOCTYPE test [<!ENTITY xxe SYSTEM "http://example.com/test.txt">]>
<content>&xxe;</content>

介绍:通过将外部实体指向一个远程 HTTP URL,从远程服务器上读取文件内容。如果服务器端在解析 XML 时允许外部实体引用,并且网络配置允许访问外部网络,攻击者可以通过这种方式获取远程服务器上的敏感信息,或者进行其他恶意操作,如访问内部网络资源等。

3,


<?xml version="1.0"?>
<!DOCTYPE cmd [<!ENTITY xxe SYSTEM "expect://id">]>
<data>&xxe;</data>

介绍:有些 XML 解析器会将外部实体的值作为系统命令来执行,在这个例子中,expect://id 会尝试在服务器上执行 id 命令,从而获取服务器上当前用户的权限信息等。不过,这种方式对解析器的要求较高,并非所有解析器都会支持。

至此,xxe模块完成

本期内容同样需要一定的网站开发基础,但是通过详细的解释,希望大家可以更好了解

相关文章:

零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)

本期内容涉及到很多前面的内容&#xff0c;因此复习后可以更好的了解本期内容 介绍 XXE -"xml external entity injection"即"xml外部实体注入漏洞"。 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导…...

深入浅出Spring Security

一、Spring Security基本组件 Spring Security的设计理念是提供一种可插拔的、高度可定制的安全服务。其核心功能依赖于以下几个关键组件&#xff1a; Authentication (认证): 概念: 确认用户身份的过程&#xff0c;即验证“你是谁”。核心类: Authentication 接口&#xff0c…...

基于51单片机的红外防盗及万年历仿真

目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体功能&#xff1a; &#xff08;1&#xff09;实时显示年、月、日、时、分、秒、星期信息&#xff1b; &#xff08;2&#xff09;红外传感器&#xff08;仿真中用按键模拟&#xff09;检测是否有…...

Doris 数据库深度解析:架构、原理与实战应用

一、Doris 的架构与原理 1. 架构组成 Doris 是一个分布式 MPP&#xff08;大规模并行处理&#xff09;数据库&#xff0c;它的架构主要由以下几部分组成&#xff1a; FE&#xff08;Frontend&#xff09;&#xff1a;负责管理元数据、解析 SQL 查询、优化查询计划&#xff0…...

【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案

以下是全国产化飞腾AI加固服务器采用飞腾昇腾PCIe Switch解决方案&#xff1a; &#x1f5a5;️ 一、硬件架构亮点 ‌国产算力双擎‌ ‌飞腾处理器‌&#xff1a;搭载飞腾FT2000/64核服务器级CPU&#xff08;主频1.8-2.2GHz&#xff09;&#xff0c;支持高并发任务与复杂计算&a…...

【术语扫盲】评估指标Precision、Recall、F1-score、Support是什么含义?

一、背景 Precision、Recall、F1-score、Support 是分类问题中最常用的评估指标&#xff0c;它们是机器学习、深度学习、数据挖掘中非常基础也非常重要的术语。 二、 详细解释 指标含义公式Precision&#xff08;精准率&#xff09;预测为某类的样本中&#xff0c;有多少是真…...

应用层协议:HTTPS

目录 HTTPS&#xff1a;超文本传输安全协议 1、概念 2、通信过程及关键技术 2.1 通信过程 1> TLS握手协商&#xff08;建立安全通道&#xff09; 2> 加密数据传输 2.2 关键技术 1> 对称加密算法 2> 非对称加密 3> 对称加密和非对称加密组合 4> 数…...

【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具

"国土空间规划后续也是走向数据治理&#xff0c;数据建库已经是涉及到城市规划、建筑、市政、农业、地理信息、测绘等等方方面面。不得不说以后数据库建设跟维护&#xff0c;是很多专业的必修课。小编就湖南省的村庄规划建库过程中规划用地用海中规划状态字段写了个小工具…...

React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用

React 实战项目&#xff1a;实时聊天应用 欢迎来到本 React 开发教程专栏 的第 28 篇&#xff01;在前 27 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和架构模式等核心知识。这一次&#xff0c…...

Go语言中的if else控制语句

if else是Go语言中最基础也最常用的条件控制语句&#xff0c;用于根据条件执行不同的代码块。下面我将详细介绍Go语言中if else的各种用法和特性。 1. 基本语法 1.1. 最简单的if语句 if 条件表达式 {// 条件为true时执行的代码 } 示例&#xff1a; if x > 10 {fmt.Prin…...

【PCIe总线】-- inbound、outbound配置

PCI、PCIe相关知识整理汇总 【PCIe总线】 -- PCI、PCIe相关实现 由之前的PCIe基础知识可知&#xff0c;pcie的组成有&#xff1a;RC&#xff08;根节点&#xff09;、siwtch&#xff08;pcie桥&#xff09;、EP&#xff08;设备&#xff09;。 RC和EP&#xff0c;以及EP和EP能…...

分布式锁实战:Redisson vs. Redis 原生指令的性能对比

分布式锁实战&#xff1a;Redisson vs. Redis 原生指令的性能对比 引言 在DIY主题模板系统中&#xff0c;用户可自定义聊天室的背景、图标、动画等元素。当多个运营人员或用户同时修改同一模板时&#xff0c;若没有锁机制&#xff0c;可能出现“甲修改了背景色&#xff0c;乙…...

MyBatis中foreach集合用法详解

在 MyBatis 中&#xff0c;<foreach> 标签用于遍历集合&#xff08;Collection、List、Array、Map&#xff09;&#xff0c;常用于构建动态 SQL 语句&#xff08;如 IN 查询、批量插入等&#xff09;。以下是详细用法和示例&#xff1a; 核心属性 属性描述collection必填…...

react+taro 开发第五个小程序,解决拼音的学习

1.找一个文件夹 cmd 2.taro init 3.vscode 找开该文件夹cd help-letters 如&#xff1a;我的是(base) PS D:\react\help-letters> pnpm install 4.先编译一下吧。看下开发者工具什么反应。 pnpm dev:weapp 5.开始规则。我用cursor就是不成功。是不是要在这边差不多了&…...

高防IP可以防护什么攻击类型?企业网络安全的第一道防线

“高防IP”成为企业构建网络安全防护体系的重要一环。尤其是对于金融、电商、游戏、政务等业务高度依赖网络稳定性的行业而言&#xff0c;确保系统724小时正常运行已经成为基本要求。高防IP到底可以防护哪些攻击类型&#xff1f;它又是如何帮助企业抵御风险、保障服务稳定运行的…...

Wireshark使用教程(含安装包和安装教程)

Wireshark使用入门教程 0.资源下载以及软件安装1.Wireshark中无法显示网卡列表2.Wireshark抓取H264过程 0.资源下载以及软件安装 参考blog: 抓包神器wireshark安装保姆级教程   压缩包下载&#xff1a;Wireshark安装包 1.Wireshark中无法显示网卡列表 Wireshark中无法显示网…...

Asp.Net Core基于StackExchange Redis 缓存

NuGet安装 StackExchange.Redis Microsoft.Extensions.Options 0. appsettings.json初始化配置 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHos…...

【Linux】SSH:免密登录

配置 SSH 的免密登录&#xff08;基于公钥认证&#xff09;可实现无需输入密码即可登录远程主机&#xff0c;常用于自动化脚本、服务器集群、DevOps 等场景。 生成本地 SSH 密钥对&#xff08;若尚未存在&#xff09; 在本地客户端执行&#xff1a; ssh-keygen -t rsa -b 409…...

kafka(windows)

目录 介绍 下载 配置 测试 介绍 Kafka是一个分布式流媒体平台&#xff0c;类似于消息队列或企业信息传递系统。 下载 Kafka对于Zookeeper是强依赖&#xff0c;所以安装Kafka之前必须先安装zookeeper 官网&#xff1a;Apache Kafka 下载此安装包并解压 配置 新建log…...

深度学习习题3

1.训练神经网络过程中&#xff0c;损失函数在一些时期&#xff08;Epoch&#xff09;不再减小, 原因可能是&#xff1a; 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务&#xff0c;我们不是将神经网络中的随机权重…...

勒让德多项式

勒让德多项式 (Legendre) 当区间为 [ − 1 , 1 ] [-1,1] [−1,1]&#xff0c;权函数 ρ ( x ) 1 ρ(x)1 ρ(x)1时&#xff0c;由 1 , x , . . . , x n , . . . {1,x,...,x^n,...} 1,x,...,xn,...正交化得到的多项式称为勒让德多项式&#xff0c;并用 P 0 ( x ) , P 1 ( x ) ,…...

atc abc409E

原题链接&#xff1a;E - Pair Annihilation 题目背景&#xff1a; n 个点 n - 1 条边的有权无向图&#xff0c;每个点都有一个值&#xff0c;两个连通的点的值可以互相抵消&#xff0c;既将u 的 -1 传给 v 时可以抵消掉 v 的 1 并花费边权值&#xff1b;求最小花费。 考察算…...

Mysql批处理写入数据库

在学习mybatisPlus时&#xff0c;看到一个原本没用过的参数&#xff1a; rewriteBatchedStatementstrue 将上述代码装入jdbc的url中即可使数据库启用批处理写入。 需要注意的是&#xff0c;这个参数仅适用于MySQL JDBC 驱动的私有扩展参数。 作用原理是&#xff1a; 原本的…...

基于安卓的文件管理器程序开发研究源码数据库文档

摘 要 伴随着现代科技的发展潮流&#xff0c;移动互联网技术快速发展&#xff0c;各种基于通信技术的移动终端设备做的也越来越好了&#xff0c;现代智能手机大量的进入到了我们的生活中。电子产品的各种软硬技术技术的发展&#xff0c;操作系统的不断更新换代&#xff0c;谷歌…...

EMC VNXe 存储系统日志收集方法

写在前面 有朋友找来看看VNXe的故障&#xff0c;这种问题总是要收集日志&#xff0c;顺便这里也分享给大家。 注意&#xff0c;VNXe和VNX 属于完全不同的产品&#xff0c;不要看名字很类似&#xff0c;操作系统已经完全重构了&#xff0c;如果说是否有联系&#xff0c;大概就…...

嵌入式链表操作原理详解

嵌入式链表操作原理详解 链表是嵌入式软件开发中最基础的数据结构之一&#xff0c;其设计采用嵌入式链表节点的思想&#xff0c;实现了高度通用的链表管理机制。以下是核心原理和操作的全面解析&#xff1a; 一、基础数据结构 struct list_head {struct list_head *next, *pr…...

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态

离境退税新政核心内容与外贸企业影响 &#xff08;一&#xff09;政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店&#xff0c;并放宽备案条件至纳税信用M级企业。以上海为例&#xff0c;静安区计划新增1000家退…...

一.设计模式的基本概念

一.核心概念 对软件设计中重复出现问题的成熟解决方案&#xff0c;提供代码可重用性、可维护性和扩展性保障。核心原则包括: 1.1. 单一职责原则‌ ‌定义‌&#xff1a;一个类只承担一个职责&#xff0c;避免因职责过多导致的代码耦合。 1.2. 开闭原则‌ ‌定义‌&#xf…...

以人类演示视频为提示,学习可泛化的机器人策略

25年5月来自清华大学、上海姚期智研究院和星动纪元&#xff08;RoboEra&#xff09;公司的论文“Learning Generalizable Robot Policy with Human Demonstration Video as a Prompt”。 最近的机器人学习方法通​​常依赖于从通过遥操作收集的大量机器人数据集中进行模仿学习…...

split方法

在编程中&#xff0c;split 方法通常用于将字符串按照指定的分隔符拆分成多个部分&#xff0c;并返回一个包含拆分结果的列表&#xff08;或数组&#xff09;。不同编程语言中的 split 方法语法略有不同&#xff0c;但核心功能相似。以下是常见语言中的用法&#xff1a; ​1. P…...