XXE外部实体注入的学习笔记的简单整理

XXE外部实体注入

参考链接:https://www.cnblogs.com/backlion/p/9302528.html

xxe外部实体注入漏洞:是XML(可拓展标记语言)在引用外部DTD(文档类型定义)实体

0.XML基础知识

XML:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。它被设计用来传输和存储数据(而不是储存数据),可扩展标记语言是一种很像超文本标记语言的标记语言。

它的设计宗旨是传输数据,而不是显示数据。它的标签没有被预定义。您需要自行定义标签。它被设计为具有自我描述性。它是W3C的推荐标准。

可扩展标记语言(XML)和超文本标记语言(HTML)为不同的目的而设计

XML被设计用来传输和存储数据,其焦点是数据的内容。

超文本标记语言(HTML)被设计用来显示数据,其焦点是数据的外观

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

<?xml version="1.0" encoding="UTF-8"?>

]>

<元素名称 category=“属性”>

文本或其他元素

</元素名称>

外部实体:是一个或者多个XML文档的公共引用的外部资源,有些类似于java里面的接口,谁需要接口里面的内容,谁来调用它.同时,XML处理器一定会对外部实体的数据进行解析.

外部实体表示外部文件的内容,用 SYSTEM 关键词表示。

外部实体的格式为:

<!ENTITY 实体名 SYSTEM "实体内容">

DTD(文档类型定义)可以在XML文档内部声明,也可以作为外部引用声明—使用SYSTEM标识符指向可解析位置中的另一组声明。ENTITY可以使用SYSTEM关键字,调用外部资源,在调用外部资源时是可以支持很多的协议,如:http;file等,然后,在其他DoM结点中可以使用如:&test;引用该实体内容.

如果要引用一个外部资源,可以借助各种协议 几个例子:

file:///path/to/file.ext

http://url/file.ext

php://filter/read=convert.base64-encode/resource=conf.php

通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。所以攻击者可以通过 XML 实体传递自己构造的playload,让处理程序解析它。当引用外部实体时,通过自己构造的playload,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

1.漏洞产生原因

XXE 漏洞的产生是因为应用程序解析XML时,没有过滤外部实体的加载,导致加载了恶意的外部文件,造成命令执行、文件读取、内网扫描、内网应用攻击的等危害。

深度解析:

既然XML可以从外部读取DTD文件,那我们就自然地想到了如果将路径换成另一个文件的路径,那么服务器在解析这个XML的时候就会把那个文件的内容赋值给SYSTEM前面的根元素中,只要我们在XML中让前面的根元素的内容显示出来,不就可以读取那个文件的内容了。这就造成了一个任意文件读取的漏洞。

那如果我们指向的是一个内网主机的端口呢?是否会给出错误信息,我们是不是可以从错误信息上来判断内网主机这个端口是否开放,这就造成了一个内部端口被探测的问题。另外,一般来说,服务器解析XML有两种方式,一种是一次性将整个XML加载进内存中,进行解析;另一种是一部分一部分的、“流式”地加载、解析。如果我们递归地调用XML定义,一次性调用巨量的定义,那么服务器的内存就会被消耗完,造成了拒绝服务攻击。

2.漏洞的利用

  • 文件读取:通过加载外部实体,利用file,phpt等协议读取本地文件.

  • 探测内网信息:利用 XXE 漏洞进行内网探测,根据报错信息或者请求返回时间来判断内网信息情况,如果端口开启,请求返回的时间会很快;如果端口关闭,请求返回的时间会很慢。

    如:<!ENTITY XXE SYSTEM "http://192.1698.30.1:8080">

  • 攻击内网应用:通过 XXE 漏洞对内网应用程序进行攻击。
    例如可以攻击对内网存在 jmx 控制台未授权访问的 Jboss 漏洞进行攻击。

  • 命令执行:利用 XXE 漏洞可以调用 except 伪协议调用系统命令,执行系统命令。

3.XXE漏洞修复

1、禁用外部实体的方法
libxml_disable_entity_loader(true);
2、过滤用户提交的 XML 数据
过滤关键词:<!DOCTYPE 、<!ENTITY、SYSTEM 和 PUBLIC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值