当前位置: 首页 > article >正文

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

  • 全称:XML External Entity

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

    • 危害
      • 外界攻击者可读取商户服务器上的任意文件;
      • 执行系统命令;
      • 探测内网端口;
      • 攻击内网网站。
      • 商户可能出现资金损失的情况
    • 防御
      • 升级libxml的版本>2.9.1
        • 该版本之后默认不解析外部实体
      • 禁用外部实体解析
      • 过滤用户的提交文本中的关键词<!DOCTYPE等
      • 不允许xml中有自己声明的DTD
      • 设置xml解析使用静态的DTD文件;不允许引用外部的DTD
    • 查找方法
      • 抓包,查看MIME类型是否为xml
      • 抓包,post请求+以下一种格式则可能存在xxe
        • content-type:application/xml text/xml application/json
      • 页面文件为.ashx格式
        • 可以修改文本类型为application/xml进行注入尝试
      • 这对前端无回显的情况
        • 将网站生成的连接作为实体引入
        • 通过该网站进行查看是否有回显:DNSLOG Platform (dig.pm)
  • 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">]> <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">%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(大小写)开头的名字
        • 不能数字和标点符号开头
        • 不能包含空格
        • 名字中可以有字符、数字、特殊符号
      • 属性规则
        • 不能包含多个值
        • 不能包含子节点
        • 值必须用引号包裹;引号都会用双引号进行解析

http://www.kler.cn/a/229662.html

相关文章:

  • antd-design-vue1.7.8浏览器中使用
  • 口碑很好的国产LDO芯片,有哪些?
  • 极大似然估计笔记
  • linux网络 | https前置知识 | 数据加密与解密、数据摘要
  • Flink概念知识讲解之:Restart重启策略配置
  • 用 Python 绘制可爱的招财猫
  • Java——Arrays常用方法
  • C++二维数组
  • jsp商场会员卡管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 远程主机可能不符合 glibc 和 libstdc++ Vs Code 服务器的先决条件
  • vue3项目中的404页面
  • 第4节、电机多段转动【51单片机+L298N步进电机系列教程】
  • 软考21-上午题-数组、矩阵
  • Flutter中的Container小部件介绍与使用
  • 【Linux】线程池
  • 电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python)
  • 一文学会gtest UT测试编写(TEST\TEST_F)
  • 【手写数据库toadb】虚拟文件描述符,连接表对象与物理文件的纽带,通过逻辑表找到物理文件的密码
  • 【数据结构笔记】线性表(代码)
  • 《动手学深度学习(PyTorch版)》笔记7.4
  • 每日一题(づ ̄3 ̄)づ╭❤~(数字在升序数组中出现的次数,整数转换)
  • arm 汇编积累
  • 节点确认交易全过程
  • docker下拉(pull)镜像和生成容器,文章尾部有常用的linux命令
  • PHP实现DESede/ECB/PKCS5Padding加密算法兼容Java SHA1PRNG
  • Jgit Packfile is truncated解决方案