首页
社区
课程
招聘
[原创]XXE从入门到放弃
发表于: 2020-2-4 20:23 1290

[原创]XXE从入门到放弃

2020-2-4 20:23
1290


一、认识XML和XXE


XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,是对非安全的外部实体数据进行处理时引发的安全问题。要想搞懂XXE,肯定要先了解XML语法规则和外部实体的定义及调用形式。

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

1. 所有的XML元素都必须有一个关闭标签

2. XML标签对大小写敏感

3. XML必须正确嵌套

4. XML属性值必须加引号””

5. 实体引用 (在标签属性,以及对应的位置值可能会出现<>符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应html的实体对应的表示,比如<傅好对应的实体就是lt,>符号对应的实体就是gt)

6. 在XML中,空格会被保留 (案例如:<p>a空格B</p>,这时候a和B之间的空格就会被保留)

XML元素是指从(且包括)开始标签直到(且包括)结束标签的部分。

每个元素又有可以有对应的属性。XML属性必须加引号。


 

注意:

(1) XML文档必须有一个根元素

(2) XML元素都必须有一个关闭标签

(3) XML标签对大小写敏感

(4) XML元素必须被正确的嵌套

(5) XML属性值必须加引号

DTD文档类型定义,约束了xml文档的结构。拥有正确语法的XML被称为“形式良好”的XML,通过DTD验证约束XML是“合法”的XML。


 

XML 文档有自己的一个格式规范,这个格式规范是由一个叫做 DTD文档类型定义(document type definition) 的东西控制的。

DTD用来描述xml文档的结构,一个DTD文档包含:  

元素的定义规则;元素之间的关系规则;属性的定义规则。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

他就是长得下面这个样子:

内部声明DTD类型

内部声明DTD类型声明:<!DOCTYPE 根元素[子  元素声明]>

我们主要关注XML外部实体的定义和调用方式:

<!ENTITY 实体名称 SYSTEM "URI">

PCDATA的意思是被解析的字符数据/

PCDATA的意思是被解析的字符数据,PCDATA是会被解析器解析的文本

CDATA的意思是字符数据

CDATA是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD实体介绍

(实体定义)

实体是用于定义引用普通文本或者特殊字符的快捷方式的变量

    在DTD中的实体类型,一般分为:内部实体和外部实体,细分又分为一般实体和参数实体。除外部参数实体引用以字符(%)开始外,其它实体都以字符(&)开始,以字符(;)结束。

<!ENTITY 实体名称 "实体的值">

 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

<!ENTITY 实体名称 SYSTEM "URI/URL">

<!ENTITY % 实体名 "实体内容”>


XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

xxe漏洞触发的点往往是可以上传XML文件约位置,没有对上传的XML文件进行过滤,导致可以上传恶意的XML文件。

最直接的方法就是用burp抓包,然后,修改HTTP请求方法,修改Content-Type头部字段等等,查看返回包的响应,看看应用程序是否解析了发送的内容,一旦解析了,那么有可能XXE攻击漏洞,接下来,来看一个小小的展示:

这个是测试xxe的测试点:http://169.254.4.52/bWAPP/xxe-1.php

我们点击下面的Any bugs然后用burp抓包


 

我们随便输入下


 

从上面我们可以看到,web应用正在解析xml的内容,接受用户特定或者自定义的输入,然后呈现给用户。为了验证,我们可以构造如下的输入:

可以看到应用程序确实是直接解析了xml,那么如果xml文档中有一个参数是用来调用远程服务器的内容?这个参数是可控的,我们可以做什么?

PHP中测试POC


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2020-2-5 18:16
2
游客
登录 | 注册 方可回帖
返回
//