XXE
一、XML介绍
不同于HTML,XML用来传输和存储数据。一种树形结构,从“根”到“叶”。
允许创作者定义自己的标签和自己的文档结构。
二、XXE漏洞
全称:xml external entity injection,即xml外部实体注入。
xxe漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起DOS攻击等危害。xxe漏洞触发的点往往是可以上传XML文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
三、相关函数及内容
1.file_get_content()函数把整个文件读入一个字符串中。
2. php://input
可以访问请求的原始数据的只读流。file_get_contents("php://input")可以读取POST提交的数据。
3.simplexml_load_string函数将xml格式字符串转换为对应的SimpleXMLElement。
4.XML注入回显 输出函数,使用 print_r()、echo 输出想要输出的内容。
完整的存在XXE漏洞代码:
<?php
$xml=file_get_contents("php://input");
$data=simplexml_load_string($xml);
echo"</pre>";
print_r($data);
?>
用BP抓包,修改提交方式为POST。在下边粘贴payload内容。提交即可实现利用。
四、XXE漏洞利用
以下内容提交到POST下面作为payload(测试POC)。
file://path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php
五、XXE漏洞防御
XXE漏洞已经逐渐消亡,原因是libxml2.9.0以后,默认不解析外部实体。
1.使用开发语言提供的禁用外部实体方法。
2.过滤用户提交的XML数据。
原文地址:https://www.cnblogs.com/fengyufei/p/15314238.html
- PyQt5 GUI应用程序工具包入门(1)
- grpc部署初体验
- Java中的ReentrantLock和synchronized两种锁机制的对比
- 用Python从零开始创建区块链
- 基于 Python 的僵尸网络将 Linux 机器变成挖矿机器人
- Oracle导入导出常用命令
- Spring Cloud实战小贴士:Zuul处理Cookie和重定向
- 设计模式之代理模式(二)CGLIB动态代理实现
- ios手势复习值之换图片-转场动画(纯代码)
- 顺序广播和无序广播
- Netflix Zuul与Nginx的性能对比
- 最有价值的50道java面试题(一)
- 用 Python 从零开始玩微信跳一跳
- ios地图小例子和手势的使用 供大家参考一下呦
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux下命令行cURL的10种常见用法示例
- Apache Web 服务器的安装配置方法
- Linux(Ubuntu 18.04)上安装Anaconda步骤详解
- seaborn关联图表之折线图和散点图
- Linux 系统下安装JDK1.8的教程详解
- Linux yum 命令安装mysql8.0的教程详解
- linux中叹号命令(!)的使用小结
- ubuntu下rz/sz命令的安装与使用说明
- Linux环境变量配置的完整攻略
- linux中使用boost.python调用c++动态库的方法
- linux下pip的安装步骤及使用详解
- CentOS7安装配置 Redis的方法步骤
- Linux下Oracle如何导入导出dmp文件详解
- Linux中samba服务器的搭建教程
- linux环境搭建图数据库neo4j的讲解