xxe学习笔记
什么是xxe
XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load默认情况下会解析外部实体,有XXE漏洞的标志性函数为simplexml_load_string()。
当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。
XML构建模块
元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
属性
属性可提供有关元素的额外信息
实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
PCDATA
PCDATA的意思是被解析的字符数据(parsed character data)。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDATA
CDATA指的是不应由 XML 解析器进行解析的文本数据(unparesed Character Data)
在 XML 元素中,"<" (新元素的开始) 和 "&" (字符实体的开始)是非法的。
某些文本,如JavaScript代码,包含大量 "<" 或 "&" 字符。为例避免错误,可以将脚本代码定义为 CDATA。CDATA 部分在的所有内容都会被解析器忽略。CDATA 部分由 "" 结束。
XML浅浅认识
XML 指可扩展标记语言,只能用来传递数据。
语法
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!--xml文件的声明-->
<bookstore> <!--根元素-->
<book category="COOKING"> <!--bookstore的子元素,category为属性-->
<title>Everyday Italian</title> <!--book的子元素,lang为属性-->
<author>Giada De Laurentiis</author> <!--book的子元素-->
<year>2005</year> <!--book的子元素-->
<price>30.00</price> <!--book的子元素-->
</book> <!--book的结束-->
</bookstore> <!--bookstore的结束-->
·声明是可选的
·所有 XML 元素都须有关闭标签。
·XML 标签对大小写敏感。
·XML 必须正确地嵌套。
·XML 文档必须有根元素。
·XML 的属性值须加引号。
DTD
XML元素以形如 foo 的标签开始和结束,如果元素内部出现如< 的特殊字符,解析就会失败,为了避免这种情况,XML用实体引用(entity reference)替换特殊字符。XML预定义五个实体引用,即用< > & ' "替换 < > & ' " 。 实体引用可以起到类似宏定义和文件包含的效果,为了方便,我们会希望自定义实体引用,这个操作在称为 Document Type Defination(DTD,文档类型定义)的过程中进行、
DTD语法
引入内部的dtd文件
<!DOCTYPE 根元素名称 [元素声明]>
参数实体的定义
<!ENTITY % 实体名称 "实体内容">
可以结合伪协议来运用
<!DOCTYPE test [
<!ENTITY file SYSTEM "file:///etc/passwd">
%file;
]>
%file(参数实体)是在DTD中被引用的,而&file;是在xml文档中被引用的。
XXE注入(XML 外部实体注入)
定义
XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。
危害
XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
漏洞造成
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
XML用实体引用(entity reference) 替换特殊字符
XML元素,例如hello,如果元素内部出现如 < 的特殊字符,解析就会失败,为了避免这种情况,XML 用实体引用(entity reference) 替换特殊字符。XML 预定义五个实体引用。
例题_BUU XXE COURSE 1
[NCTF2019]Fake XML cookbook
XML注入
利用方式
简单来说就是用户能够控制xml文件的输入,攻击者可以通过令语句闭合来改写语句,从而达成目的。
<?xml version="1.0" encoding="utf-8" ?>
<USER>
<user Account="admin">用户输入</user>
<user Account="root">root</user>
</USER>
当我们输入adminhacker时,上述语句就变成了
<?xml version="1.0" encoding="utf-8" ?>
<USER>
<user Account="admin">admin</user>
<user Account="hacker">hacker</user>
<user Account="root">root</user>
</USER>
这样就添加了一个名为hacker的用户。
xxe学习笔记的更多相关文章
- XXE漏洞学习笔记
XXE 参考文章 名称 地址 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357 Web Hacking 101 https://wizardforce ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype
23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
- Web安全攻防(简)学习笔记
Web安全攻防-学习笔记 本文属于一种总结性的学习笔记,内容许多都早先发布独立的文章,可以通过分类标签进行查看 信息收集 信息收集是渗透测试全过程的第一步,针对渗透目标进行最大程度的信息收集,遵随&q ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
随机推荐
- 在.NET Core中使用异步多线程高效率的处理大量数据的最佳实践
目录 一.引言 二.假设场景 三.解决方案 四.示例代码 一.引言 处理大量数据是一个常见的需求,传统的同步处理方式往往效率低下,尤其是在数据量非常大的情况下.本篇将介绍一种高效的多线程异步处理大数据 ...
- 判断移动终端类型安卓苹果鸿蒙、查看设备详细信息、跳转到各手机应用商店、判断APP是否已安装
案例1:判断移动终端类型,微信扫描二维码链接可以区分华为(荣耀).安卓.苹果手机.华为及荣耀会跳到华为应用商店.安卓会提示浏览器打开.苹果跳到苹果商店. <!DOCTYPE html> ...
- Qt数据库应用2-数据导出到xls
一.前言 导入导出数据到csv由于语法简单,适用场景有限,于是乎还是必须再造一个轮子导出数据到xls,在经历过数十年的项目实战经验中不断调整和优化.尤其记得当初第一个版本v0.01大概在2011年左右 ...
- Unity TheHeretic Gawain Demo 异教徒Demo技术学习
<异教徒 Heretic>是Unity在2019年GDC大会上展示的一款技术Demo,部分资源于2020年中旬公开下载. 这款Demo主要用于展示Unity在数字人技术领域的最新进展,尤其 ...
- linux下查看文件行数和列数
查看行数: wc -l 文件名 查看列数: cat 文件名 | awk '{print NF}' 注意:默认是\t分割 但是可以使用-F参数指定分隔符,例如以 | 进行分割: cat 文件名 | aw ...
- # 个人认为windows下最好用的一批软件 #
个人认为windows下最好用的一批软件 chrome 为什么是chrome而不是edge2? 这当然不是因为我是谷歌吹什么的.其实当得知edge2比chrome更省内存,运行更快,而且不跨越城墙就能 ...
- 注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,第8篇时只回答了注册中心的工作原理的内容,面试官的第二个问题还没回答,今天再来讲讲各个注册中心的原理,以及区别,最后如何进行选型 上一篇文章:如何设计一个注册 ...
- MAC 使用问题汇总
1. 在.zshrc中添加的环境变量不起作用 Answer: 需要把/etc/zshrc文件复制到 ~, 并命名为.zshrc,然后设置环境变量即可:
- 数字世界中的纸张——理解 PDF (转载)
转载自 https://type.cyhsu.xyz/2018/09/understanding-pdf-the-digitalized-paper/ 引言 PDF 是我们打交道最多的文件格式之一.提 ...
- 在shell脚本中为日志添加颜色
在 Shell 脚本中,可以通过添加 ANSI 转义序列来为日志输出添加颜色.以下是一个完整的 Shell 脚本示例,包含日志颜色定义.日志函数封装以及使用示例: 完整脚本:colored_logs. ...