XXE与XXE-Lab

简介

1. XXE Injection(XML External Entity Injection)XML外部实体注入
服务端接收和解析了来自用户端的XML数据,而又没有做严格的安全控制,从而导致XML外部实体注入。
2. XML(Extensible Markup Language)可扩展标记语言
XML用来传输和存储数据;
XML的标签没有预定义,需要自行定义标签;
XML文档结构包括:XML声明、DTD文档、文档元素。
3. XML声明

version=“1.0”:此XML文档按照1.0版本的XML规则进行解析;
encoding=“utf-8”:此XML文档采用utf-8的编码格式;
standalone=“yes”:此XML文档是独立的,不能引用外部的DTD文档,若此属性为no,表示此XML不是独立的,能够引用外部的DTD文档,此属性默认值为yes。

4. DTD(Document Type Definition) 文档类型定义
定义XML文档的合法构建模块;

  • DTD声明
    内部声明DTD:
    引用外部DTD:
  • DTD实体
    定义引用普通文本或特殊字符的快捷方式的变量;
    通用实体:
    外部通用实体:
    通用实体引用:&实体名;
    参数实体:%后有个空格)
    外部参数实体:
    参数实体引用:%实体名;
    参数实体只能在DTD中被引用

5. 文档元素(XML元素)
定义:
命名规则:

  1. 名称可以包含字母、数字以及其他的字符;
  2. 名称不能以数字或者标点符号开始;
  3. 名称不能以字母 xml(或者 XML、Xml 等等)开始;
  4. 名称不能包含空格;

漏洞原理

XXE注入,即XML外部实体注入,服务端接收和解析了来自用户端的XML数据,而又没有做严格的安全控制,从而导致XML外部实体注入。重点在于外部实体,引用了外部实体,例如:,如果将此处的位置URI/URL设置为文件路径地址,服务器在解析XML的时候就会将文件内容赋值为给该实体变量,再引用此实体变量时,就会将此文件内容作为变量值泄露出来。
更多利用参考文章

XXE-Lab实验

XXE与XXE-Lab_第1张图片

  1. 登录框,尝试观察请求包,POST请求,请求体中的部分像是XML元素部分;
    在这里插入图片描述
  2. 直接构造XML声明和DTD部分,引用外部实体去尝试读取/etc/passwd文件;


    ]>
    并且在元素中引用外部实体参数xiaoLin,格式:&xiaoLin;
    在这里插入图片描述
  3. 放包查看回显结果。
    XXE与XXE-Lab_第2张图片

防御

  1. 使用开发语言禁用外部实体;
  2. 过滤SYSTEM、PUBLIC等关键字;

参考文章

https://xz.aliyun.com/t/3357
https://www.cnblogs.com/r00tuser/p/7255939.html
https://www.cnblogs.com/backlion/p/9302528.html

你可能感兴趣的:(漏洞,安全漏洞,xml)