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

  <!-- -->

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

  <!-- -->

  * 不能包含空格

  <!-- -->

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

<!-- -->

*

  ###### 属性规则

  * 不能包含多个值

  <!-- -->

  * 不能包含子节点

  <!-- -->

  * 值必须用引号包裹;引号都会用双引号进行解析
相关推荐
朗迹 - 张伟16 小时前
Golang安装笔记
开发语言·笔记·golang
搞全栈小苏18 小时前
基于Qt QML和C++的MQTT测试客户端(CMakeLists实现)
xml·c++·qt
2301_7807896619 小时前
渗透测试真的能发现系统漏洞吗
服务器·网络·安全·web安全·网络安全
siy233319 小时前
[c语言日记] 数组的一种死法和两种用法
c语言·开发语言·笔记·学习·链表
不会聊天真君6471 天前
ES(springcloud笔记第五期)
笔记·elasticsearch·spring cloud
汇能感知1 天前
光谱相机在AI眼镜领域中的应用
经验分享·笔记·科技
汇能感知1 天前
光谱相机的图像模式
经验分享·笔记·科技
fatiaozhang95271 天前
中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
android·xml·adb·电脑·电视盒子·刷机固件
XFF不秃头1 天前
力扣刷题笔记-三数之和
c++·笔记·算法·leetcode
被遗忘的旋律.1 天前
Linux驱动开发笔记(十)——中断
linux·驱动开发·笔记