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

XXE漏洞1-XXE 漏洞简介-XML 语法-DTD 讲解-外部实体讲解

一.XXE漏洞简介及原理。

        XXE(XML External Entity)漏洞是一种基于XML解析的安全漏洞,攻击者通过构造恶意的

XML文档,利用外部实体引用功能读取服务器上的敏感文件、执行远程请求或发起服务端请求伪造

(SSRF)攻击。XXE漏洞源于XML解析器未禁用外部实体加载功能。XML标准允许定义外部实

体,通过SYSTEM关键字引用本地或远程资源。当解析器处理包含恶意外部实体的XML输入时,

可能泄露系统文件或触发非预期网络请求。

二.XML文档介绍

XML指可扩展标记语言是一种标签语言,和HTML很类似。

XML的设计宗旨是传输数据,而非显示数据。HTML被设计用来显示数据。

XML标签没有被预定义,需要自行定义标签。

XML被设计为具有自我描述性。

XML是W3C的推荐标准。

下面进行简单的xml代码认识:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>           

这里注意三个点:

1.这里所以的标签全部是自己定义的,

2.第一行就是自我描述性的体现。

3.一定要严格闭合,上面有<note>下面也要有</note>,否则会报错。

4.严格区分大小写,闭合标签前后大小写一致。

在/var/www/html下写入note.xml。


然后浏览器查看即可。

三.XML DTD 介绍

       拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
DTD 全称是 The document type definition,即是文档类型定义,通过 DTD 验证 XML 是否合
法。

DTD 被包含在您的 XML 源文件中,它会被包装在一个 DOCTYPE 声明中:
ELEMENT就是元素的意思。

内部DTD文件:

<?xml version="1.0" ?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>         对于元素note定义了其有四个内部元素。
<!ELEMENT to (#PCDATA)>        对note下的to元素进行定义
<!ELEMENT from (#PCDATA)>            对note下的from元素进行定义
<!ELEMENT heading (#PCDATA)>             对note下的heading元素进行定义
<!ELEMENT body (#PCDATA)>          对note下的body元素进行定义
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

外部DTD文件:

在 XML 文档内部中引入外部 DTD 文件 note.dtd
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
就是利用SYSTEM引用外部note.dtd文件。
然后我们再创建一个note.dtd:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

四.实体介绍

什么是实体及实体的定义

Entity [ˈentəti] 实体,实体相当于一个变量,可以再DTD里进行定义:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ENTITY free "free nice">
定义了一个实体 free对其赋值free nice

实体的调用

如下图所示:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder
&fjw;</heading>
<body>Don't forget me this weekend!</body>
</note>

实体的分类

1.通用实体

<!ENTITY fjw "fjw nice">

调用方式&fjw;

2.参数实体(只能在DTD内部调用)

<1ENTITY % fjw "fjw nice">

调用方式 %free;

外部实体的介绍

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ENTITY free SYSTEM "file:///var/www/free.txt">

然后再创建一个free.txt文件输入free附的值。

外部实体的调用还是一样的&free;

这就是外部实体。

注意:无论是外部DTD还是外部实体,都是XML文档解析时才会加载的。

http://www.dtcms.com/a/282518.html

相关文章:

  • 【React Native】安装配置 Expo Router
  • HTML基础P1 | HTML基本元素
  • Jmeter中Parallel Controller的配置方法(并发)
  • 小白学HTML,操作HTML文件篇(2)
  • 二进制枚举
  • 基于Canal实现MySQL数据库数据同步
  • 百炼Agent MCP与IoT实战(二):阿里云MQTT Broker配置
  • Unity UGUI 无限循环列表组件
  • 倒立摆系统控制器设计报告
  • PyCharm(入门篇)
  • OpenSearch SQL 查询完整指南
  • Spring Boot 缓存 与 Redis
  • Java-74 深入浅出 RPC Dubbo Admin可视化管理 安装使用 源码编译、Docker启动
  • 【Android】TextView的使用
  • 【Fedora 42】Linux内核升级后,鼠标滚轮失灵,libinput的锅?
  • 颠覆NLP十年范式!OpenCSG中文数据集助推CMU无分词器模型登顶SOTA
  • Jetpack Compose 中 Kotlin 协程的使用
  • 重学SpringMVC一SpringMVC概述、快速开发程序、请求与响应、Restful请求风格介绍
  • 【iOS】源码阅读(六)——方法交换
  • Flutter基础(前端教程①①-底部导航栏)
  • 中医舌诊学习软件,图文视频详解
  • Flutter Web 的发展历程:Dart、Flutter 与 WasmGC
  • 2025华为ODB卷-箱子之字形摆放100分-三语言题解
  • 文字图标设计-色彩魔方:动态变色技术实现场景自适应 大学毕业论文——仙盟创梦IDE
  • 【Unity】Mono相关理论知识学习
  • 深入核心:理解Spring Boot的三大基石:起步依赖、自动配置与内嵌容器
  • Kafka——生产者压缩算法
  • IsaacLab学习记录(一)
  • opencv 值类型 引用类型
  • Hadoop架构演进:从1.0到2.0的深度对比与优化解析