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(大小写)开头的名字

  <!-- -->

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

  <!-- -->

  * 不能包含空格

  <!-- -->

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

<!-- -->

*

  ###### 属性规则

  * 不能包含多个值

  <!-- -->

  * 不能包含子节点

  <!-- -->

  * 值必须用引号包裹;引号都会用双引号进行解析
相关推荐
Moliay5 分钟前
【资料分析】刷题日记2
笔记·公考·行测·常识·资料分析
小齿轮lsl44 分钟前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
天玑y2 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
web_learning_3213 小时前
source insight学习笔记
笔记·学习
无妄啊______3 小时前
mysql笔记9(子查询)
数据库·笔记·mysql
z2014z4 小时前
系统架构设计师教程 第5章 5.3 系统分析与设计 笔记
笔记·系统架构
Wrop4 小时前
网络安全实训八(y0usef靶机渗透实例)
安全·web安全
青石横刀策马5 小时前
泛读笔记:从Word2Vec到BERT
笔记·bert·word2vec
Magnetic_h6 小时前
【iOS】单例模式
笔记·学习·ui·ios·单例模式·objective-c