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

  <!-- -->

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

  <!-- -->

  * 不能包含空格

  <!-- -->

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

<!-- -->

*

  ###### 属性规则

  * 不能包含多个值

  <!-- -->

  * 不能包含子节点

  <!-- -->

  * 值必须用引号包裹;引号都会用双引号进行解析
相关推荐
hao_wujing25 分钟前
网络安全攻防演练中的常见计策
安全·web安全
燕雀安知鸿鹄之志哉.1 小时前
攻防世界 web ics-06
网络·经验分享·安全·web安全·网络安全
Mitch3111 小时前
【漏洞复现】CVE-2015-5531 Arbitrary File Reading
web安全·elasticsearch·网络安全·docker·漏洞复现
oneouto2 小时前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh322 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
网安-轩逸3 小时前
网络安全核心目标CIA
安全·web安全
LuH11243 小时前
【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo
论文阅读·笔记
m0_748256785 小时前
WebGIS实战开源项目:智慧机场三维可视化(学习笔记)
笔记·学习·开源
红色的山茶花5 小时前
YOLOv9-0.1部分代码阅读笔记-loss.py
笔记
胡西风_foxww8 小时前
【es6复习笔记】Promise对象详解(12)
javascript·笔记·es6·promise·异步·回调·地狱