《Web漏洞防护》读书笔记——第6章,XXE防护

XXE介绍

XXE漏洞是指由于在XML文件中注入了外部实体而造成的攻击。

XML介绍:XML是一种用于标记电子文件并使其具有结构性的可扩展标记语言。

由以下几个元素所组成:
XML声明,DTD(跟在XML声明后,程序既可以在内部声明DTD,也可以引用外部的DTD文件),实体(需要在DTD内进行声明,分为内部声明实体、外部引用实体),根元素(XML文件有且仅有一个根元素,可以自定义根元素),元素(XML文件的主体内容,也可以成为XML代码),注释(使用格式进行注释)。

XXE攻击方式介绍

XXE是一种针对应用程序的解析XML输入的攻击,当输入包含外部实体引用的XML文件到未进行安全配置的XML解析器中,产生此类攻击。

XXE攻击原理:
XML1.0标准定义了XML文档的结构,其中实体是指某种类型的存储单元,其具有各种类型,包括外部通用实体、参数解析实体等。
可以通过已生命的系统标识符访问本地或远程的内容。
系统标识符可以假定为一个URL,在处理实体时,XML解析器会对其进行引用,然后将外部实体命名的地方替换成系统标识符锁引用的内容。
如果系统标识符包含了恶意数据冰杯XML解析器解析,XML解析器可能会泄露无法通过应用程序直接访问的机密数据,类似的攻击同样适用于外部DTD文件包含恶意数据时的情况。

XXE攻击造成的危害

1.泄露本地文件:文件中可能包含敏感信息,如密码和用户私有数据等,可以通过使用file://系统标识符或相对路径引用到相关的文件。
2.CSRF/SSRF攻击:XXE攻击发生在应用程序处理XML文档的过程中,因此攻击者可以使用这个受信任的应用程序来攻击内部的其他系统,可以通过HTTP请求或其他内部服务发起SSRF攻击。
3.命令执行:XXE攻击在特定的环境下可以执行系统命令,如安装了Exptect扩展的PHP环境,使用expect://系统标识符执行系统密令。
4.拒绝服务:XXE攻击可以通过执行特定的操作占用系统大量内存,从而造成系统的瘫痪。
5.内网端口探测:通过访问特定的短偶,来探测端口是否开放的情况。

根据外部实体锁在的位置将XXE分为两种类型:
1.内部XXE:外部实体包含在本地DTD中。
2.外部XXE:外部实体包含在外部的DTD文件中。

XXE攻击的检测

如果代码中包含了XML解析操作,且处理的XML文件能够被用户所控制,同时解析的代码中未禁用DTD或DTD中的外部实体,基本可以认定代码中存在XXE漏洞。JAVA应用程序解析XML会特别受影响,因为大多数JAVA XML解析器默认弃用DTD和DTD外部实体。

检测流程:
1.确定应用中是否包含XML解析的操作。
2.确认服务器需要处理的XML文件是否可以被用户控制。
3.确认XML文件是否允许包含DTD。
4.如果XML文件允许包含DTD,需要确认DTD中是否允许包含外部实体。
5.如果XML文件中允许包含DTD及外部实体,构造函数的XML文件发送到服务端,观察是否会出发XML文件中定义的操作,如果触发了相关操作,则可以断定应用中存在XXE漏洞。

XXE的防护

分成两种情况:
1.禁用DTD:由于外部实体必须注入到DTD中,所以禁用DTD能够防止外部实体的注入。
2.禁用DTD中的外部实体:如果XML文件中不能禁用DTD,可以禁止在DTD中注入外部实体。

《Web漏洞防护》读书笔记——第6章,XXE防护相关推荐

  1. 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程

    上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...

  2. 《Spring实战》读书笔记-第4章 面向切面的Spring

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  3. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

  4. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  5. 《Java编程思想》读书笔记 第十三章 字符串

    <Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...

  6. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  7. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

    Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 ACID原则:即一个事务具有原子性.一致性. ...

  8. PMP读书笔记(第9章)

    大家好,我是烤鸭:     今天做一个PMP的读书笔记. 第九章 项目资源管理 项目资源管理 项目资源管理的核心概念 项目资源管理的趋势和新兴实践 裁剪考虑因素 在敏捷或适应型环境中需要考虑的因素 9 ...

  9. PMP读书笔记(第2章)

    大家好,我是烤鸭:     今天做一个PMP的读书笔记. 第二章 项目运行环境 2.1 概述 2.2 事业环境因素 2.2.1 组织内部的事业环境因素 2.2.2 组织外部的事业环境因素 2.3 组织 ...

  10. PMP读书笔记(第1章)

    大家好,我是烤鸭:     今天做一个PMP的读书笔记. 第一章 引论 1.1 概述指南和目的 1.1.1 项目管理标准 1.1.2 通用词汇 1.1.3 道德与专业行为规范 1.2 概述指南和目的 ...

最新文章

  1. C#中base关键字的几种用法
  2. 编程大白给编程小白的四点建议
  3. 关于无法获取客户端IP地址
  4. python写入指定行_python文件操作如何写在指定的行
  5. 实战篇—关于某产品的切分细则
  6. connection对象的参数
  7. CSDN怎么获取下载积分
  8. 2022年计算机软件水平考试网络工程师(中级)练习题及答案
  9. 类似MSN的消息提示
  10. lisp型材库_STMX
  11. 简历编辑导出工具(类似wps简历助手)
  12. python提取格式化日志
  13. 电脑操作系统维护10条基础知识!
  14. 年薪五万程序员的生活及他的理财梦
  15. Apsara Clouder基础技能认证-阿里巴巴编程规范考试流程
  16. 微贷七年之痒:重线下、追科技、争存量,能否赢未来?
  17. choco无法将choco识别_choco入门
  18. 蛇形走线用于什么方面,一文告诉你
  19. Login.aspx
  20. Lattice:1、MachXO系列CPLD器件专业名词(缩略语及器件介绍)

热门文章

  1. android 隐藏系统音量的接口_Android9.0 系统默认配置清单
  2. 【ZOJ4110】Strings in the Pocket (马拉车算法+分析)
  3. 联想微型计算机改win76,装不了Win7?采用第六代酷睿处理器的电脑改装Win7的方法...
  4. mysql银行储蓄额度格式_mysql创建表用于银行储蓄系统
  5. MATLAB--查表
  6. 线性代数 : 矩阵乘法和矩阵的逆
  7. 翻译: TensorFlow 2.0 中的新功能
  8. 翻译: 欢迎使用 KITTI Vision Benchmark Suite!
  9. 容器技术Docker K8s 41 Serverless Kubernetes(ASK)详解-ASK集群管理
  10. centos 6.4 安装java_CentOS6.4 64位系统安装jdk 转载