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

  <!-- -->

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

  <!-- -->

  * 不能包含空格

  <!-- -->

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

<!-- -->

*

  ###### 属性规则

  * 不能包含多个值

  <!-- -->

  * 不能包含子节点

  <!-- -->

  * 值必须用引号包裹;引号都会用双引号进行解析
相关推荐
一轮弯弯的明月2 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
那个失眠的夜2 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
航Hang*2 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
zjnlswd2 天前
tkinter学习案例--笔记代码
笔记·学习
独小乐2 天前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
无聊大侠hello world2 天前
Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记
人工智能·笔记·学习
CheerWWW2 天前
C++学习笔记——箭头运算符、std::vector的使用、静态链接、动态链接
c++·笔记·学习
网络安全许木2 天前
自学渗透测试第12天(渗透测试流程与DVWA部署)
web安全·网络安全·渗透测试
ZhiqianXia2 天前
Pytorch 学习笔记(17):decompositions.py —— 算子分解的百科全书
pytorch·笔记·学习
xian_wwq2 天前
【学习笔记】大模型如何理解图片
笔记·学习