XXE漏洞的详细原理解释和利用

admin 2022年10月2日05:37:13评论17 views字数 1209阅读4分1秒阅读模式

1.定义

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

简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

例如,如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。

常见的XML语法结构如下所示

XML声明文档定义类型(DATA)]> tove jani reminder don't forget me this weekend 文档元素

2.XML语法结构

其中.文档类型定义(DTD)可以是内部声明也可以引用外部DTD,如下所示

  1. 内部声明DTD格式:

  2. 引用外部DTD格式:

在DTD中进行实体声明时,将使用ENTITY关键词来声明,实体是用于定义引用普通文本或特殊字符的快捷方式的变量,实体可在内部或外部进行声明,如下所示

  1. 内部声明实体格式:

  2. 引用外部实体格式:


3.XXE的危害

①XML拒绝服务这样的DTD一旦进入DOM,将极有可能造成拒绝服务…

XXE漏洞的详细原理解释和利用

payload中先定义了lol实体,值为“lol”字符串,然后下面又定义了lol2实体,在lol2实体中,引用10个lol实体。也就是说现在lol2的值是10个“lol”字符串,下面的lol3又引用了10个lol2实体的值,现在lol3的值是100个“lol”字符串,依此类推,到了最后在lolz元素中引用的lol9中,就会存在上亿个“lol”字符串,如果程序在解析数据时没有做特别的处理,那么极有可能对程序造成拒绝服务攻击。

②XML注入

XXE漏洞的详细原理解释和利用

③外部实体注入

XXE漏洞的详细原理解释和利用

4.实用工具

能手动编辑web请求对于XXE攻击至关重要,这里我推荐大家使用BurpSuite。BurpSuite的扫描功能可以为我们检测潜在的XXE漏洞,其次burp的Intruder功能非常适合用于端口探测。但要提醒的是工具只是我们的辅助,在某些情况下手动测试可能效果更好!

HTTP请求分析工具像RequestBin 和 HookBin 都非常适合OOB XXE的测试。此外,BurpSuite Pro的Collaborator也是个不错的选择,但一些安全研究人员他们更喜欢使用他们自己的VPS。

5.缓解措施

上面讨论的主要问题就是XML解析器解析了用户发送的不可信数据。然而,要去校验DTD(document type definition)中SYSTEM标识符定义的数据,并不容易,也不大可能。大部分的XML解析器默认对于XXE攻击是脆弱的。因此,最好的解决办法就是配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己声明的DTD。


原文始发于微信公众号(小白嘿课):XXE漏洞的详细原理解释和利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月2日05:37:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XXE漏洞的详细原理解释和利用http://cn-sec.com/archives/884639.html

发表评论

匿名网友 填写信息