Xml外部实体注入漏洞(XXE)与防护
转自腾讯安全应急响应中心
一、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)与防护相关推荐
- XML外部实体注入漏洞——XXE简单分析
前言: XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波. 文章目录 一.XXE 漏洞是什么: 二.XML基础知识: 1.XML是什么? 2.XML文档结构: DTD声明方式: ...
- Pikachu-XXE(xml外部实体注入漏洞)
XXE -"xml external entity injection" 既"xml外部实体注入漏洞". 概括一下就是"攻击者通过向服务器注入指定的x ...
- PHP环境 XML外部实体注入漏洞
PHP环境 XML外部实体注入漏洞 环境介绍 漏洞原理 漏洞复现 修补方案和建议 环境介绍 libxml 2.8.0 libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡.为了演示P ...
- XML外部实体注入(XXE)的原理和应用
文章目录 XXE注入 一.XML简介 二.XML实体 三.CTF中XEE攻击 XXE注入 XXE注入全称是xml external entity 注入,也就是xml外部实体注入.XXE漏洞发生在应用程 ...
- XXE(XML外部实体注入)漏洞
如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击.XXE是一种非常常见的漏洞类型,我们几乎每天都会碰到它 什么是 ...
- XML 外部实体注入漏洞
0x01 XXE(XML外部实体注入)漏洞 1.1 漏洞原因 1.2 漏洞构造方式 1.3 XML可解析的协议 0x02 寻找XXE漏洞隐藏的攻击面 2.1 XInclude攻击 2.2 通过文件上传 ...
- 【burpsuite安全练兵场-服务端10】XML外部实体注入(XXE注入)-9个实验(全)
前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...
- 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析
0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...
- 服务端安全之XML外部实体注入(XXE)
1. 什么是XXE? XXE是XML external entity (XXE) injection 2. XXE是怎么发生的? XML规范中包含了一些不安全的特性,如果XML parser实现了这些 ...
最新文章
- 用脑机接口去“搜索一下”,是种什么体验? | CCF C³-03@搜狗
- 就挺凡尔赛的!李开复谈20年后的AI,崔宝秋论开源之道,清华唐杰的PPT成了“香饽饽” | MEET2021智能未来大会...
- 详细学习ORACLE JOBS
- AutoCode For XML(XML解析代码生成器)发布
- angular 模块构建_如何通过11个简单的步骤从头开始构建Angular 8应用
- MySQL 批量添加
- python 蓝牙开发_基于python实现蓝牙通信代码实例
- AtCoder Beginner Contest 171 A - αlphabet
- RNN Attention
- [CSS]关于Flexbox
- Java项目:药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
- JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
- python网易云收费_python网易云音乐抓取
- 扬州工业机器人外壳设计排名_世界十大工业机器人制造商公布,排名第一的竟是……...
- unity 移动设备查看监控视频
- 自动薅羊毛技术方案总结
- [转] 网卡超时实现机制 watchdog_timeo/ndo_tx_timeout
- 图像分类经典卷积神经网络—SENet论文翻译(中英文对照版)—Squeeze-and-Excitation Networks(挤压和激励网络)
- yolov5 deepsort 行人车辆 双向计数 跟踪检测 | 开源项目分享
- TiDB HTAP 深度解读
热门文章
- 空间刚架matlab_2016基本平面刚架各种荷载MATLAB程序
- win7 java修复工具哪个好_教您dll修复工具哪个好
- 视频号:CTO要不要写代码?阿里员工究竟挣多少钱?
- 基于 NI myRIO 的平衡车设计
- 基于springboot+vue的大学生交友活动管理网站 elementui
- MVC 架构解析 - 控制器(Controller)篇
- Jetson TX2 远程控制(Remote Control)
- 最优的宽带出租解决方案——wayos+easyradius
- surfacert能跑java么_Surface RT竟然能跑Linux!微软悄然封杀
- 全国计算机信息处理,全国计算机技术与软件专业技术资格(水平)考试《信息处理技术员(初级)》复习全书【核心讲义+历年真题详解】...