#前言:

今天学习了 xee漏洞的简单利用。为此记录一下。

xml

在学习xee漏洞开始前,要先了解xml文档的语法。

什么是xml?

可延伸标记式语言(英语:E x tensible M arkup L anguage,简称:XML)是一种[标记式语言XML是从标准通用标记式语言(SGML)中简化修改出来的。它主要用到的有可延伸标记式语言、可延伸样式语言(XSL)、XBRL和XPath等。

xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,非常适合Web传输,而且xml有助于在服务器之间穿梭结构化数据,方便开发人员控制数据的存储和传输。

xml 语法

1.XML元素都必须有关闭标签。
2.XML 标签对大小写敏感。
3.XML 必须正确地嵌套。
4.XML 文档必须有根元素。
5.XML 的属性值须加引号。

xee漏洞

从所周知大部分漏洞基本都是通过用户可控参数进行传参,xee漏洞也是如此。

xxe的漏洞所在位置在DTD部分 ,而DTD相当于根,这个又分为 内部DTD文档 外部DTD文档 内外部DTD文档。

内部DTD文档

<!DOCTYPE 根元素[定义内容]>

外部DTD文档

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

内外部DTD文档结合

<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

DTD文档里又包含了 实体部分。也分为 内部实体 和外部实体,参数实体。

XML中对数据的引用称为实体,实体中有一类叫外部实体,用来引入外部资源,有SYSTEMPUBLIC两个关键字,表示实体来自本地计算机还是公共计算机,外部实体的引用可以利用如下协议

file:///path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php

内部实体

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

一个实体由三部分构成: &符号, 一个实体名称, 以及一个分号 (;)

外部实体

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

参数实体

<!ENTITY %实体名称 "值">
<!ENTITY %实体名称 SYSTEM "URL">

例如,一个内部DTD文档和内部实体的例子

<!DOCTYPE xee [<!ENTITY xss "ofccie">]>    //这个根元素可以自定义,【】是实体内容
<xee>&xss;<\xee> 这个部分是 xml 部分 最后输出 ofccice

用靶场能更直观的展示。

最底下部分就是xml 文档结构 。

这是个用户名重置的链接使用的xml 而bee这个是我们可以控制的。当我们点击发送响应回来的是。bee’s ….

当我们把它改为xxx.

试着去写一个DTD 文档 (如上举例)

当我们试着去写一个外部实体引用去读取本地文件。(由于靶场并不是安装在机器上,无法演示)

<!DOCTYPE xee [<!ENTITY xss SYSTEM "file:///etc//passwd">]>
<xee>&xss;</xee>

上面是有回显,还存在无回显的情况。以及dos 攻击 内网探测。(后面在学😃,记笔记吧)