通用xxe检测方法

以是现在的问题是找到终端办事中能够接管XML作为输入的款式,纵然客户端只能应用JSON款式或者是直接路径或者是参数查询的要领来造访办事

Generic XXE Detection

本文,我会先容一些手工渗透历程中检测XXE(XML外部实体注入)破绽的思路,当然也会有一些自动测试这些思路都是我曩昔在黑盒测试历程中碰到的xxe破绽的履历总结,可以很轻易地转化为一种适用于web破绽扫描器的通用措施,作为其扩展来应用

我们会经由过程一个案例来演示,在这个案例中,办事端是没有应用XML款式的,但我们依然可以应用XML作为输进款式来造访办事,从而履行xxe进击

在写这篇文章的时刻,我已经开拓了一个Burp插件,叫“Generic XXE Detector”来自动检测xxe破绽后面有光阴的话,我也会写一个ZAP扩展插件,把这种xxe破绽的检测措施融入到扫描器中

办事端中的xxe检测

在黑盒渗透测试中,我们平日会碰到一些办事端,主如果基于REST架构的,在浏览器的单页利用中应用采纳RESTful架构风格的终端平日都因此JSON作为传输款式,然则许多办事端开拓框架(比如基于RESTful办事的JAX-RS)也容许基于数据互换的XML款式作为输入,以致是输出假如可以进行这种调换,可以经由过程改动哀求头中的Content-Type的值(比如改动成text/xml或者application/xml)来进行验证触发为了将这种检测技术从手工测试扩展到自动化测试的要领,扫描此破绽的Burp对象必要一个通用的XXE检测措施,这样,在渗透时代,active scanner就会对scope中所有的url提议检测

在一次对基于Java的办事终端掘客xxe破绽时(黑盒测试),我发明一个办事终端只有路径和参数查询作为输入源,并且以JSON的款式相应,而且便是一个简单的GET哀求,没有POST,这种环境看起来彷佛不会有xxe破绽,是以人们也没多大年夜兴趣在这个地方进行xxe测试,就连Burp的主动扫描也没有发明xxe破绽

但我手工测试了几回,竟然意外的测出了xxe,由于它确凿是REST架构办事,而且也接管XML款式的输入,所以为了验证xxe破绽,我应用了下面的一些技术:

· 首先,我考试测验者把GET哀求转换为POST哀求,这样就可以在哀求体重发送XML款式的数据,不过,很不行运,办事端只接管GET,并不接管POST,以是我照样只能应用GET哀求

· 接着我删除了哀求URL中的查询参数和路径参数,这样办事端就获取不到这些参数因为是黑盒测试,我只能假设,删除掉落查询参数后,会触发终端办事接管其他款式作为输入的一种模式不加参数和路径造访办事时,呈现了一个差错页面,提示没有供给输入数据

· 纵然只能应用get要领,但我照样改动了Content-Type类型为application/xml,然后在哀求体中添加了一些无效的xml数据,提交哀求后,在相应消息中呈现了XML差错消息,显示某解析历程获取了GET哀求中的Body payload,这就很故意思了,我感觉可以进一步测试一下再添加上路径和参数后,发明相应中呈现了营业差错信息,以是我感到肯定要删除它们,要不然,办事端会优先对它们进行解析

我想让办事端能够解析我的XML数据并至少返回一些技巧性的差错消息,于是我应用老例的XXE技术来获取数据(比如/etc/passwd或者列目录 /),由于我不知道应用这种XML款式对办事提议哀求会呈现什么结果,以是我不得不应用一种更通用的技术,这种技术纵然没有将实体引用放在适当的XML元素中也可以正常事情颠末测试之后,办事器接管到XML数据后,也没有返回什么器械,只回显了技巧差错在这种环境下,只能应用OOB带外通道数据提取措施了

然则由于这种基于URL的OOB数据泄露只能泄露一行文件内容(由于CRLF会瓜分URL),以是我将它与办事器相应的技巧性差错消息结合起来并从中读取数据:

这里的思路便是将含有参数实体的数据通报到另一个文件实体中,以便在造访第二个文件时触发文件未找到的非常,并且将第一个文件的内容作为第二个文件的名字,这样的话,就成功启程了文件未找到非常,也完全返回了第一个文件的内容(这里并不必要纯挚的OOB提取技巧)

进击者的DTD部分利用了文件未找到非常的回应技术,在进击者的办事器上写一个dtd文件,保存在http://attacker.tld/dtd-part中,内容如下:

然后提议哀求(这是使用XXE的老例的OOB技巧):

相应如下(返回文件为找履新错消息,但也返回了我们想要的数据):

应用这种文件未找到回应技术来读取数据不仅办理了只能提取一行数据的问题,还解除了XXE使用中直接在XML元素中应用时的一些限定:文件内容包孕了XML元字符(比如),这会破坏XML的布局应用了上面这种技术之后,就不存在这种问题了

上面的措施运行成功之后,我又发清楚明了一篇好的文章纯OOB使用技巧,这种措施应用ftp://scheme和自定义的FTP办事器,以致能够在Java1.7+版本下获取数据我想这种措施在上面的场景中应该也可行,纵然办事器没有返回技巧性差错消息,但它是一种纯挚的OOB提取技巧

小提示:这种文件未找到非常回应技术在某些XSS场景中也可能派得上用处,比如考试测验输入alert(1)作为文件名然则这种XSS在实际情况中使用起来照样异常难的,由于你很难诱骗受害者去提议哀求,这就必要结合社工技巧了

[1] [2]下一页

若何进行自动化扫描

此次我在手工渗透测试中无意发清楚明了这个XXE破绽(由于扫描器没有检测到),让我开始思虑能不能有一种通用的措施来自动检测破绽最基础的问题便是这种扫描技术应该能够对scope中的每一个哀求进行扫描,纵然这个哀求没有包孕任何的XML数据(由于上面的例子应用的RESTful架构而且只应用JSON款式也存在xxe破绽)

我灵机一动,就想到了这个法子(我也会很快写成Burp或ZAP的扩展)扫描器应该在其主动扫描的每个哀求中履行下列步骤,下面的步骤也只是来检测上面说起的场景中存在的xxe破绽:

1.应用原始路径和查询参数以POST措施提议哀求,跟原始的HTTP措施一样(纵然是GET措施),在哀求体中添加一个通用的DTD payload,并直接引用参数实体,如下所示:

%xxe; ]>

当然,不要忘了在哀求头中添加Content-Type:application/xml,也可以考试测验text/xml

· 假如相应中包孕如下消息(以文件未找到的形式返回了文件名)

javax.xml.bind.UnmarshalException – with linked exception: [java.io.FileNotFoundException: /some-non-existing.file (No such file or directory)]

就标记为可能存在xxe:

· 对照造访存在文件和不存在文件的相应不存在文件的差错相应和存在文件然则DTD文件中没有有效内容的差错相应肯定会有不合,说不定能发明什么蛛丝马迹

· 假如在文件未找到非常消息中回显了alert(1)作为文件名,那么也可以标记为xss

2.假如第一步没有触发xxe,删除所有原始哀求中的查询参数,再履行一遍着末考试测验删除每个路径参数(以防办事接管到这些参数,然后不会从XML body中去造访输入),重复上面的步骤

3.假如上面两步还没有触发XXE破绽,考试测验应用众所周知的OOB技巧(更多技术的应用细节可以参考这里)

应用下面的payload(设置Content-Type为application/xml)

%xxe; ]>

ReqNo代表的是每个哀求的独一编号我们必要这个独一的编号将日志条款和扫描的哀求关联起来,然后将这些哀求标记为XXE候选项假如scanner供给了某种类型的输入,可以将察看到的webserver日志供给给扫描引擎,以反省已发出的匹配的OOB哀求数,那么我们会获得最佳的结果

4.假如上面的步骤还没有触发xxe破绽(因为办事器无法造访进击者的webserver),可以考试测验应用基于DNS的OOB技巧,在域名中包孕前面提到的XXE哀求编号ReqNo,比如下面这个payload:

%xxe; ]>

这样一来,至少经由过程其DNS办事器对进击者域的DNS解析可以用于触发XXE匹配,当在测试停止后,扫描器会解析DNS办事器的日志,然后与扫描的哀求联系起来

5.假如上述哀求还没有触发XXE前提,那我们就只能在侧通道长进行完全的盲测了,比如计时丈量:我们可以应用不合的payload来反省内网中可以造访的端口,然后对照不合payload的相应光阴,比如这两个payload:

%xxe; ]>

%xxe; ]>

· 当然,也可以对file协议进行类似的测试,造访大年夜文件和小文件进行比较当你应用风险扫描器时,你可以谋略一下当你造访/dev/zero文件时所增添的相应光阴

· 应用风险扫描器也可以丈量内置扩展的处置惩罚光阴,比如billion laughs attack,这是一种DOS进击,关于这种进击可以参考这里

留意,在上述场景中,扫描器并不必要知道详细的XML款式,是以这种扫描技巧利用于哀求之中也异常轻易,即时他们在被动察看历程中没有应用任何XML数据所有的XMLpayload在DTD中都是完全自力的我们的设法主见是对每一个哀求进行扫描,自动检测办事终端中可以应用XML款式进行造访的位置,就跟RESTful开拓框架的例子一样

上面的这些XML DTD payloads(应用OOB哀求去检测XXE,不管是检察进击者的webserver日志照样谋略光阴差),这些payloads都可以简化成一个纯挚的外部DTD措施,如 或者 不过上面供给的更长的payload测试在查找xxe破绽时更有效,由于短版本的payload只验证了外部DTDs,而且不能加载实体

总结

作为pentester

留意利用法度榜样中任何办事端并进行渗透测试,并且强制他们接管XML款式数据,纵然在利用法度榜样中的这些终端只接管其他款式的输入,比如查询参数,路径参数或者是JSON款式假如命运运限好的话,终端也设置设置设备摆设摆设了可以接管XML款式的数据,那么就可以进一步测试是否存在xxe破绽了

作为扫描器厂商

将本文中提到的这些设法主见整合到扫描引擎中,经由过程自动解析日志文件来强化扫描效果,并简化应用OOB技巧来检测通用的XXE破绽,即时在扫描大年夜型进击面时也是如斯简单易用

上一页[1] [2]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包