转自腾讯安全应急响应中心

一、XML基础知识

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

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

内部声明DTD

<!DOCTYPE 根元素 [元素声明]>

引用外部DTD

<!DOCTYPE 根元素 SYSTEM "文件名">

或者

<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

内部声明实体

<!ENTITY 实体名称 "实体的值">

引用外部实体

<!ENTITY 实体名称 SYSTEM "URI">

或者

<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

二、XML外部实体注入(XML External Entity)

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

引入外部实体方式有多种,比如:

恶意引入外部实体方式1:

XML内容:

恶意引入外部实体方式2:

XML内容:

DTD文件(evil.dtd)内容:

恶意引入外部实体方式3:

XML内容:

DTD文件(evil.dtd)内容:

另外,不同程序支持的协议不一样,

上图是默认支持协议,还可以支持其他,如PHP支持的扩展协议有

以下举例说明XXE危害,当然XXE不止这些危害。

XXE危害1:读取任意文件

该CASE是读取/etc/passwd,有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。

另外,数据不回显就没有问题了吗?如下图,

不,可以把数据发送到远程服务器,

远程evil.dtd文件内容如下:

触发XXE攻击后,服务器会把文件内容发送到攻击者网站

XXE危害2:执行系统命令

该CASE是在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系统命令。

XXE危害3:探测内网端口

该CASE是探测192.168.1.1的80、81端口,通过返回的“Connection refused”可以知道该81端口是closed的,而80端口是open的。

XXE危害4:攻击内网网站

该CASE是攻击内网struts2网站,远程执行系统命令。

三、客户端XXE案例

日前,某office文档转换软件被爆存在XXE漏洞(PS:感谢TSRC平台白帽子Titans`报告漏洞),某一应用场景为:Web程序调用该office软件来获取office文档内容后提供在线预览。由于该软件在处理office文档时,读取xml文件且允许引用外部实体,当用户上传恶意文档并预览时触发XXE攻击。详情如下:

新建一个正常文档,内容为Hi TSRC,

使用该软件转换后可以得到文本格式的文档内容,

当往该docx的xml文件注入恶意代码(引用外部实体)时,可进行XXE攻击。

四、防御XXE攻击

方案一、使用开发语言提供的禁用外部实体的方法

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

dbf.setExpandEntityReferences(false);

Python:

from lxml import etree

xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

方案二、过滤用户提交的XML数据

关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

【最后】

无论是WEB程序,还是PC程序,只要处理用户可控的XML都可能存在危害极大的XXE漏洞,开发人员在处理XML时需谨慎,在用户可控的XML数据里禁止引用外部实体。

文中涉及到的代码和技术细节,只限用于技术交流,切勿用于非法用途。欢迎探讨交流,行文仓促,不足之处,敬请不吝批评指正。

【参考】

http://www.vsecurity.com/download/papers/XMLDTDEntityAttacks.pdf

http://2013.appsecusa.org/2013/wp-content/uploads/2013/12/WhatYouDidntKnowAboutXXEAttacks.pdf

https://www.owasp.org/images/5/5d/XML_Exteral_Entity_Attack.pdf

https://www.youtube.com/watch?v=j2cfebNEfic

Xml外部实体注入漏洞(XXE)与防护相关推荐

  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)的原理和应用

    文章目录 XXE注入 一.XML简介 二.XML实体 三.CTF中XEE攻击 XXE注入 XXE注入全称是xml external entity 注入,也就是xml外部实体注入.XXE漏洞发生在应用程 ...

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

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

  6. XML 外部实体注入漏洞

    0x01 XXE(XML外部实体注入)漏洞 1.1 漏洞原因 1.2 漏洞构造方式 1.3 XML可解析的协议 0x02 寻找XXE漏洞隐藏的攻击面 2.1 XInclude攻击 2.2 通过文件上传 ...

  7. 【burpsuite安全练兵场-服务端10】XML外部实体注入(XXE注入)-9个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

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

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

  9. 服务端安全之XML外部实体注入(XXE)

    1. 什么是XXE? XXE是XML external entity (XXE) injection 2. XXE是怎么发生的? XML规范中包含了一些不安全的特性,如果XML parser实现了这些 ...

最新文章

  1. 用脑机接口去“搜索一下”,是种什么体验? | CCF C³-03@搜狗
  2. 就挺凡尔赛的!李开复谈20年后的AI,崔宝秋论开源之道,清华唐杰的PPT成了“香饽饽” | MEET2021智能未来大会...
  3. 详细学习ORACLE JOBS
  4. AutoCode For XML(XML解析代码生成器)发布
  5. angular 模块构建_如何通过11个简单的步骤从头开始构建Angular 8应用
  6. MySQL 批量添加
  7. python 蓝牙开发_基于python实现蓝牙通信代码实例
  8. AtCoder Beginner Contest 171 A - αlphabet
  9. RNN Attention
  10. [CSS]关于Flexbox
  11. Java项目:药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
  12. JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
  13. python网易云收费_python网易云音乐抓取
  14. 扬州工业机器人外壳设计排名_世界十大工业机器人制造商公布,排名第一的竟是……...
  15. unity 移动设备查看监控视频
  16. 自动薅羊毛技术方案总结
  17. [转] 网卡超时实现机制 watchdog_timeo/ndo_tx_timeout
  18. 图像分类经典卷积神经网络—SENet论文翻译(中英文对照版)—Squeeze-and-Excitation Networks(挤压和激励网络)
  19. yolov5 deepsort 行人车辆 双向计数 跟踪检测 | 开源项目分享
  20. TiDB HTAP 深度解读

热门文章

  1. 空间刚架matlab_2016基本平面刚架各种荷载MATLAB程序
  2. win7 java修复工具哪个好_教您dll修复工具哪个好
  3. 视频号:CTO要不要写代码?阿里员工究竟挣多少钱?
  4. 基于 NI myRIO 的平衡车设计
  5. 基于springboot+vue的大学生交友活动管理网站 elementui
  6. MVC 架构解析 - 控制器(Controller)篇
  7. Jetson TX2 远程控制(Remote Control)
  8. 最优的宽带出租解决方案——wayos+easyradius
  9. surfacert能跑java么_Surface RT竟然能跑Linux!微软悄然封杀
  10. 全国计算机信息处理,全国计算机技术与软件专业技术资格(水平)考试《信息处理技术员(初级)》复习全书【核心讲义+历年真题详解】...