我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

现在,很少有xxes具有回声。盲目XXE的重点在于如何传输数据。过去,许多文章可以实现OOB(带外)信息传输,并通过构建DTD从错误信息中获取数据。

无论是上述OOB还是基于错误的方法,都需要毫无例外地引入外部DTD文件。至于为什么引入外部DTD文件,此处已简要提到了许多文章。本文将详细分析这两个盲人XXE的原理,以及为什么需要外部DTD文件。最后,它还发现了一些可以直接完成的情况,而无需引入外部DTD文件(今年可以完成CTF)

以下测试将使用以下PHP代码进行测试。

libxml_disable_entity_loader(false);$xmlfile = file_get_contents('php://input');$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);$creds = simplexml_import_dom($dom);?>

参数实体

XML DTD可以定义两种实体类型:普通实体和参数实体,这两种类型也可以分别是内部实体和外部实体。 xxe,全名是将漏洞注入XML外部实体。通过外部实体请求本地文件URI并以某种方式返回本地文件内容会导致XXE漏洞。内部实体和外部实体声明之间的区别如下

<!ENTITY 实体名 SYSTEM url > //外部实体<!ENTITY 实体名 实体的值 > //内部实体

Blind XXE需要在DTD约束中使用参数实体。参数实体是只能在DTD中定义和使用的实体。 %标志已定义。定义和使用方法如下。

                  %para;            ]><message>&normal;message>

此外,参数实体也可以在嵌套中定义,但是应注意的是,内部层中定义的参数实体%html逃脱,否则会发生解析错误。

'>]><message>&normal;message>

盲人xxe

OOB

介绍服务器DTD文件

由于外部实体可以通过请求内部文件URI获得内部文件内容,因此我们可以编写两个外部参数实体。第一个使用文件协议请求本地文件并将内容保存在参数实体中,第二个使用HTTP或FTP协议请求我们自己的服务器并带上文件内容。

           %send;]>

可以吗?在本书的第10页“ XML,DTD和“这是不可能的”中,这清楚地说明了这一点。几乎所有XML解析器都不会在同一级别分析参数实体的内容。

但是上面我们还表明,当两个参数实体不在同一级别时,参数实体也可以用嵌套术语定义。让我们尝试称呼它。

      ">    %start;    %send;]>

如上所述,我们首先调用启动参数实体并生成发送参数实体声明。在“发送参数实体声明”中,调用文件参数实体并请求相关链接。该测试发现中的误差是指参数实体参考(),该参数禁止内部参考参数实体。

正是由于这种限制,我的前任认为,由于内部的限制不好,我想引用外部DTD尝试。现在,将以下DTD文件添加到您的服务器。

xml.dtd

"">%start;

然后请求的数据如下(使用PHP协议编码已发送的数据)

          %remote;    %send;]><message>1234message>

成功阅读文件!

图片

参考本地DTD文件

如果目标主机的防火墙非常严格,我们不允许我们要求外部网络服务器DTD?由于XML的广泛使用,一些DTD文件实际上存在于各种系统中。根据上述理论,我们只需要从外部介绍DTD文件并定义其中的某些实体内容即可。

首先,让我们查看系统随附的/usr/share/yelp/dtd/.dtd内容。

图片

它定义了许多参数实体并调用它。因此,实际上,我们可以在内部内部重写DTD文件中包含的参数实体,并且该调用是外部的,因此仍然可以实现。

        ">        %eval;        %send;    '>     %remote;]><message>1234message>

其中,这里是嵌套的三层参数实体。当第二层嵌套时,我们只需要编码定义的参数实体的%,第三层需要根据第二层编码所有%,&,',html。

我们将仔细观察并很好地理解它。称为%的第一个参数实体,在/usr/share/yelp/dtd/.dtd文件中被称为%,以及在定义的实体中连续调用和发送。在此不直接使用两层嵌套的原因是,如果您直接使用两层,则仍会报告一个错误。

基于错误报告的盲人xxe

基于与OOB类似的错误报告原理,OOB通过构造带外URL来提出数据,而基于错误报告,它是构造错误URL并将泄漏的文件内容放入URL中,并以这种方式返回数据。

因此,OOB的构造方法几乎与URL相同,其余的完全相同。

通过介绍服务器文件

xml.dtd

"">%start;

        %remote;    %send;]><message>1234message>

通过介绍本地文件

        ">        %eval;        %send;    '>     %remote;]><message>1234message>

重新检查为什么引用外部文件

根据上述语句,似乎必须引用外部文件。 W3中有关于XML协议的段落:

在DTD中,不得发生;它们可能发生在可能发生的地方。 (这不适用于发生在或发生的。)

简短的翻译:在内部DTD集合中,对参数实体的引用在标记的声明中不存在。这不适用于外部参数实体。

这意味着协议本身必须要求内部实体声明中不能引用参数。

CTF BNV

今年的CTF发表了盲目的XXE问题BNV。这个问题的完整WP可以在此处使用。我们只能在此处分析盲目XXE部分。

这个问题可以从错误响应中泄漏信息。因为这个问题无法与外界交流,所以我通过介绍本地DTD文件来考虑并查看他人。不复杂,就像我们上面分析的

            ">        %para2;    '>    %remote;]><message>10message>

但是我发现,如果我不参考外部DTD文件并直接使用嵌套参数实体,也可以完成此问题。

        ">        %para2;    '>    %para;]><message>10message


有趣的发现

我发现,尽管W3C协议不允许引用内部实体声明中的参数实体,但许多XML解析器不能很好地执行此检查。几乎所有XML解析器都可以找到这样的两层嵌套:

      ">    %start;    %send;]><message>10message>

但是,无法检测到使用三层嵌套参数实体构建的一些XML解析器。例如,可以有效地使用PHP7.2 + 2.9.4和PHP5.4 + 2.9.1的两种组合:

        ">        %para2;    '>    %para;]><message>10message>

这意味着可以在不参考外部DTD的情况下实现盲目XXE。

参考链接

#wfc--

二维码
扫一扫在手机端查看

本文链接:https://by928.com/8900.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线