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声明
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
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:<!DOCTYPE 根元素 [元素声明]>
    引用外部DTD:<!DOCTYPE 根元素 SYSTEM "文件名">
    <!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
  • DTD实体
    定义引用普通文本或特殊字符的快捷方式的变量;
    通用实体:<!ENTITY 实体名 "实体内容">
    外部通用实体:<!ENTITY 实体名 SYSTEM "URI/URL"><!ENTITY 实体名 PUBLIC "public_ID" "URI/URL">
    通用实体引用:&实体名;
    参数实体:<!ENTITY % 实体名 "实体内容">%后有个空格)
    外部参数实体:<!ENTITY % 实体名 SYSTEM "URI/URL">
    参数实体引用:%实体名;
    参数实体只能在DTD中被引用

5. 文档元素(XML元素)
定义:<!ELEMENT 元素名 元素类型>
命名规则:

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

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

XXE-Lab实验

在这里插入图片描述

  1. 登录框,尝试观察请求包,POST请求,请求体中的部分像是XML元素部分;
    在这里插入图片描述
  2. 直接构造XML声明和DTD部分,引用外部实体去尝试读取/etc/passwd文件;
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE XL [
    <!ENTITY xiaoLin SYSTEM "file:///etc/passwd">]>
    并且在元素中引用外部实体参数xiaoLin,格式:&xiaoLin;
    在这里插入图片描述
  3. 放包查看回显结果。
    在这里插入图片描述
防御
  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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值