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

  • 全称:XML External Entity

    • 外部实体注入攻击
    • 原理
      • 利用xml进行读取数据时过滤不严导致嵌入了恶意的xml代码;和xss一样

    • 危害
      • 外界攻击者可读取商户服务器上的任意文件;
      • 执行系统命令;
      • 探测内网端口;
      • 攻击内网网站。
      • 商户可能出现资金损失的情况
    • 防御
      • 禁用外部实体
      • 过滤用户的提交文本中的关键词<!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> 内部引用
          • 参数实体(只能用于DTD中)
            • <!DOCTYPE root[<!ENTITY %A "<!ENTITY xxe "123">">%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(大小写)开头的名字
        • 不能数字和标点符号开头
        • 不能包含空格
        • 名字中可以有字符、数字、特殊符号
      • 属性规则
        • 不能包含多个值
        • 不能包含子节点
        • 值必须用引号包裹;引号都会用双引号进行解析

相关推荐

  1. PHP基础知识整理

    2024-02-02 12:44:02       38 阅读
  2. XSS基础知识整理

    2024-02-02 12:44:02       47 阅读
  3. Linux 基础知识整理(四)

    2024-02-02 12:44:02       41 阅读
  4. Linux 基础知识整理(二)

    2024-02-02 12:44:02       60 阅读
  5. Linux 基础知识整理(五)

    2024-02-02 12:44:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 12:44:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 12:44:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 12:44:02       87 阅读
  4. Python语言-面向对象

    2024-02-02 12:44:02       96 阅读

热门阅读

  1. C++入门学习(二十三)选择结构-switch语句

    2024-02-02 12:44:02       59 阅读
  2. React状态管理Zustand简单介绍和使用

    2024-02-02 12:44:02       51 阅读
  3. 如何在redis中存储ndarray

    2024-02-02 12:44:02       50 阅读
  4. 【C语言】深入理解NULL指针

    2024-02-02 12:44:02       48 阅读
  5. github开源代码流程-初始化配置 quick start(2)

    2024-02-02 12:44:02       51 阅读
  6. 【使用python压缩pdf文件大小】

    2024-02-02 12:44:02       48 阅读
  7. Debezium系列之:字段schema详解

    2024-02-02 12:44:02       48 阅读
  8. 【Eclipse平台】1Eclipse平台总体概览

    2024-02-02 12:44:02       34 阅读
  9. EasyExcel实现三级联动

    2024-02-02 12:44:02       47 阅读
  10. K8S-PV 与PVC

    2024-02-02 12:44:02       53 阅读