XXE基础知识整理(附加xml基础整理)

全称:XML External Entity

  • 外部实体注入攻击
复制代码
##### 原理

* 利用xml进行读取数据时过滤不严导致嵌入了恶意的xml代码;和xss一样 ![](https://file.jishuzhan.net/article/1753640443184156673/555c28b7470437bb2180f3a4b1105d4f.webp)
复制代码
##### 危害

* 外界攻击者可读取商户服务器上的任意文件;

<!-- -->

* 执行系统命令;

<!-- -->

* 探测内网端口;

<!-- -->

* 攻击内网网站。

<!-- -->

* 商户可能出现资金损失的情况
复制代码
##### 防御

* 禁用外部实体

<!-- -->

* 过滤用户的提交文本中的关键词\<!DOCTYPE等

<!-- -->

* 不允许xml中有自己声明的DTD

<!-- -->

* 设置xml解析使用静态的DTD文件;不允许引用外部的DTD
复制代码
##### 查找方法

* 通过抓包随便输入闭合标签和内容看回显;有回显说明有漏洞

XML语言:可扩展的标记语言

  • 用于程序之间的数据通信;常用于配置文件中
复制代码
##### 文档结构

*

  ###### xml声明

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

<!-- -->

*

  ###### DTD:文档类型定义(文档框架)

  *

    ###### 内部文档声明

    * \<!DOCTYPE 根元素名称 \[声明元素的位置\] \>

    <!-- -->

    * \<!DOCTYPE note\[\<!ELEMENT note(to,from,heading,body)\> \<!ELEMENT to(#PCDATA)\> \<!ELEMENT form(#PCDATA)\>\<!ELEMENT heading(#PCDATA)\>\<!ELEMENT body(#PCDATA)\>\]\>

  <!-- -->

  *

    ###### 外部文档声明

    * \<!DOCTYPE 根元素名称 SYSTEM "文件名"

    <!-- -->

    * \<!DOCTYPE note SYSTEM "http:127.0.0.1/1.txt"\>

  <!-- -->

  *

    ###### 实体:\<!ENTITY \>

    * 普通实体
      * \<!DOCTYPE ANY\[\<!ENTITY xxe "123"\>\]\> \<value\>\&xxe\</value\> 内部引用

      <!-- -->

      * \<!DOCTYPE ANY\[\<!ENTITY xxe "[http://127.0.0.1/1.txt](http://127.0.0.1/1.txt "http://127.0.0.1/1.txt")"\>\]\> \<value\>\&xxe\</value\> 外部引用

    <!-- -->

    * 参数实体(只能用于DTD中)
      * \<!DOCTYPE root\[\<!ENTITY %A "\<!ENTITY xxe "123"\>"\>%A;\]\> \<value\>\&xxe\</value\>

      <!-- -->

      * \<!DOCTYPE root\[\<!ENTITY %A SYSTEM "[http://127.0.0.1/1.txt](http://127.0.0.1/1.txt "http://127.0.0.1/1.txt")"\>%A;\]\> \<value\>\&xxe\</value\>

<!-- -->

*

  ###### 元素

  * 实体:用于定义普通文本的变量

  <!-- -->

  * PCDATA:需要被解析的字符数据

  <!-- -->

  * CDATA:不被解析的字符数据

  <!-- -->

  *

    ###### 元素类型(声明时用)

    * EMPTY :不能包含子元素和文本;但可以有属性

    <!-- -->

    * ANY :可以包含DTD中的任意元素

    <!-- -->

    * #PCDATA :可以使用任意字符数据;但不能有子元素

  <!-- -->

  *

    ###### 属性

    * 属性声明语法
      * \<!ATTLIST 元素名称 属性名称 属性类型 默认值\>

      <!-- -->

      * \<!ATTLIST student id CDATA #REQUIRED\>

    <!-- -->

    * 属性类型
      * CDATA

      <!-- -->

      * (en1\|en2\|..)

      <!-- -->

      * ID

    <!-- -->

    * 默认值
      * #REQUIRED :必须有

      <!-- -->

      * #IMPLIED :不是必须的

      <!-- -->

      * #FIXED value :固定值
复制代码
##### 规则和限制

*

  ###### 基础规则

  * xml文档中有且只能有一个根元素

  <!-- -->

  * 区分大小写

  <!-- -->

  * 标签格式必须闭合而且一一对应;只有双标签;否则出错

  <!-- -->

  * 特殊字符必须用文本实体编码代替;\& " ' \< \>等

  <!-- -->

  * 实体编码必须以\&开头;结束;格式要规范

  <!-- -->

  * 允许多余空格保留

<!-- -->

*

  ###### 元素命名规则

  * 不能有xml(大小写)开头的名字

  <!-- -->

  * 不能数字和标点符号开头

  <!-- -->

  * 不能包含空格

  <!-- -->

  * 名字中可以有字符、数字、特殊符号

<!-- -->

*

  ###### 属性规则

  * 不能包含多个值

  <!-- -->

  * 不能包含子节点

  <!-- -->

  * 值必须用引号包裹;引号都会用双引号进行解析
相关推荐
wangcheng303几秒前
AI+制造正悄然改变工业生产
笔记
晓梦林1 小时前
homelab2靶场学习笔记
笔记·学习
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2026.05.19 题目:2540. 最小公共值
笔记·leetcode·排序算法
LN花开富贵1 小时前
Ubuntu aarch64 架构安装 NoMachine 远程控制 避坑与实战
linux·运维·笔记·学习·ubuntu·嵌入式
不是山谷.:.2 小时前
前端性能优化全解析:从原理到落地,覆盖全领域与多技术栈
前端·笔记·性能优化·状态模式
dusk_star2 小时前
go语言--笔记--封装、组合(继承)
笔记·golang
不动明王呀3 小时前
almalinux8.10用户添加到root权限笔记
笔记
不是光头 强3 小时前
Java 后端实战进阶:从踩坑到架构的系统化笔记
java·笔记·架构
叶~小兮3 小时前
ELK技术栈全套学习笔记(Elasticsearch+Logstash+Filebeat)
笔记·学习·elk
路baby3 小时前
RCE漏洞的原理详细讲解并基于pikachu靶场的实战演戏
安全·web安全·网络安全·系统安全·网络攻击模型·安全威胁分析·rce