-
2020-05-20 20:15:06
XXE漏洞原理
XXE(外部实体注入)是XML外部实体注入。
当应用程序允许引用外部实体时,通过XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等。
常规的POST的content-type为application/x-www-form-urlencoded,但只要将其修改为application/json,就可以传入json格式的POST数据,修改为application/xml,就可以传入XML格式的数据。常规的WAF一般只检测application/x-www-form-urlencoded的数据。
防御方法:
1.禁用外部实体(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)
2.过滤用户提交的XML数据
DTD
DTD(文档类型定义)用来是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
内部:
<!DOCTYPE 根元素 [元素声明]>
ex:<!DOCTYOE test [any]>
外部:
<!DOCTYPE 根元素 SYSTEM "文件名">
ex:<!DOCTYPE test SYSTEM 'http://www.test.com/evil.dtd'>
结合:
<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
DTD实体
1.内部实体声明
<!ENTITY 实体名称 "实体的值">
<?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3School.com.cn"> ]> <test>&writer;©right;</test>
2.外部实体声明
<?xml version="1.0"?> <!DOCTYPE a [ <!ENTITY b SYSTEM "file:///home/ctf/flag.txt"> ] > <c>&b;</c>
读取flag.txt输出到页面
更多相关内容 -
XXE漏洞原理--简单理解
2022-03-05 15:10:38XXE漏洞全称XML External Entity Injection,即xmI外部实体注入漏洞, XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站...XXE漏洞简介
(1)XXE漏洞全称XML External Entity Injection,即xmI外部实体注入漏洞, XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害,XML(也是一种语言)被设计用来传输和存储数据
(2)也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致漏洞DTD(Document Type Definition 文档类型定义)
1.DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用
2.外部实体(即可能存在漏洞的地方)声明:<!ENTITY 实体名称 SYSTEM "URI">
3.通过URL的不同访问而造成不同影响下图为XML文档的一个完整简单的组成
解析:
(1)在DTD中,定义name为实体名,后面url为实体文本
(2)在XML元素中,&name表示实体变量,实际值为DTD定义的实体文本,即URL
(3)服务器后台解析执行代码元素,实际上服务器就是访问url,并且可能会把执行结果返回给用户,即漏洞存在 -
XXE漏洞原理分析
2020-10-16 14:47:09什么是XXE漏洞? 在web攻防中有很多的漏洞,这里就来介绍一种基于XML数据格式的漏洞. 那么大家经常说的XXE漏洞到底是个什么漏洞呢? XML 外部实体漏洞 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE...一.什么是XXE漏洞?
除了json外,xml也是一种常用的数据传输格式。对xml的解析有以下几种常用的方式:DOM,SAX,JDOM,DOM4J,StAX等。然而这几种解析方式都可能会出现外部实体注入漏洞,这类漏洞统称 XML 外部实体漏洞。
提到这里我们就要明白xml的格式,尤其是xml的实体含义,显然那不是本文的重点,不明白的朋友可以去弄明白XML的格式定义含义(参考链接: )
以下提供一个请求如果接受的值是xml格式数据,则会存在xxe漏洞,我们使用下面简单的xml内容来分析:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>
在上面的代码中,xml外部实体 xxe 被赋值为
file://etc/passwd
内容的值(也就是paswd文件的内容),关键字SYSTEM 会告诉XML解析器, xxe 实体的值是从其后的URI中获取.简单说就是攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件/远程系统上的文件).
二.XXE漏洞的应用场景
许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。
大量XXE缺陷已经被发现并被公开,这些缺陷包括嵌入式设备的XXE缺陷。最简单的方法是上传可被接受的恶意XML文件:
场景 #1:攻击者尝试从服务端提取数据:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>
场景 #2:攻击者通过将上面的实体行更改为以下内容来探测服务
器的专用网络:<!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>
场景 #3:攻击者通过恶意文件执行拒绝服务攻击:
<!ENTITY xxe SYSTEM "file:///dev/random" >]>
总结:
通过xml解析器存在的漏洞, 基于URI的方式访问一些协议(比如 file, ftp,dict, gopher,expect…)下的资源非法获取一些服务器上的文件,或者将外部的文件通过实体的方式写入服务器.
三.XXE漏洞的解决办法
开发人员培训是识别和减少XXE缺陷的关键,此外,防止XXE陷还需要:
• 尽可能使用简单的数据格式(如: JSON),避免对敏感数据行序列化。
• 及时修复或更新应用程序或底层操作系统使用的所有XML处和库。同时,通过依赖项检测,将SOAP更新到1.2版本或更版本。
• 在应用的所有XML解析器中禁用XML外部实体和DTD进程。
• 在服务器端实施积极的(“白名单”)输入验证、过滤和清以防止在XML文档、标题或节点中出现恶意数据。
• 验证XML或XSL文件上传功能是否使用XSD验证或其他类似方法来验证上传的XML文件。
• 尽管在许多集成环境中,手动代码审查是大型、复杂应用程最佳选择,但是SAST 工具可以检测源代码中的XXE漏洞。 -
xxe漏洞原理,简单复现及防御
2022-04-11 21:38:24xxe漏洞原理 Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以创建一个包含外部实体的XML,使得其中的内容会被服务器端执行 当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统...xxe漏洞原理
- Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以创建一个包含外部实体的XML,使得其中的内容会被服务器端执行
- 当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
xxe联系靶场
复现步骤
打开代理进行抓包操作
明显看到使用的是json读取
我们将包放进重发模块修改成xml读取方式
读取flag包
<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///home/ctf/flag.txt"> ]> <x>&f;</x>
其他的执行未截图,感兴趣的可以试一试
执行系统命令
如果服务器环境中安装了某些特定的扩展,即可利用其造成任意命令执行,如攻击者构造如下的XML文档:
<?xml version="1.0" encoding-"utf-8"?><!DOCTYPE ANY [<!ENTITY xxe SYSTEM "expect://whoami">]><x>&xxe;</x>
读取任意文件命令
如果攻击者可以控制服务器解析的XML文档的内容,引入攻击者想要读取的文件内容作为外部实体,即可尝试读取任意的文件内容。如攻击者构造如下的XML文档就会将/etc/passwd文件的内容引入进来并回显在页面中,造成敏感文件内容泄露。
<?xm1 version="1.0" encoding-"utf-8"?><!DOCTYPE ANY[<!ENTITY xxe SYSTEM "file:///etc/passwd">]><x>&xxe;</x>
探测内网接口
如果Web服务器的的执行环境在内网,则可以通过请求内网IP的某个端口来判断该IP 的相应端口是否开放,这可以通过直接引用外部实体的方式引入要访问该端口的链接即可实现:
<?xm1 version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM http://ip:80/mark
]>
<x>&xxe</x>
如果回显结果为“Connection Refused”,即可以判断该IP的80端口是开放的。如何防御xxe漏洞
1.使用开发语言提供的禁用外部实体的方法
2.过滤用户提交的XML数据,过滤关键词
3.使用第三方应用代码及时升级补丁
-
XXE漏洞原理/防御
2021-07-16 14:38:49原理 XXE又叫 XML外部实体注入 , 攻击者修改DTD引入的外部文件 , 从而执行攻击 , 比如读取任意文件 , 命令执行 , 内网探测 或者 DOS拒绝服务 防御 XXE的防御有两个方向 过滤 和 禁用 过滤参数中的关键词<!... -
XXE漏洞原理及防御
2020-07-13 16:36:001.XXE漏洞 XXE漏洞就是XML外部实体注入,就是当xml引用外部实体并解析的时候会产生的漏洞,xml解析器去获取其中的外部资源并存储到内部实体中,攻击者可引用外部实体对目标进行文件读取、命令执行、DDOS、内网探测等... -
XXE漏洞原理及防御方式。
2021-11-15 12:25:23写这篇文章目的就是想认真理理XEE这个漏洞...XXE这个漏洞的理解,首先我们了解xml文档,因为该漏洞就是由xml文档引起的 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用. -
xxe漏洞原理与防御
2019-04-05 00:43:26要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。另外php版本大于5.4.45的默认不解析外部实体 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户... -
xxe漏洞原理
2021-07-26 13:39:15xxe漏洞原理 -
XXE漏洞原理及常见利用方式(以xxe-lab为示例)
2022-03-11 15:55:52为了防止把事情搞复杂,先从一个常见的文件读取xxe payload示例开始 第一行是 XML 声明。它定义 XML 的版本(1.0) 接下来的部分是DTD !DOCTYPE 用来声明文档类型,!ELEMENT定义一个元素(XML 标签名)这里类型为... -
(渗透学习)XXE漏洞原理 & 挖掘 & 利用 & 防御
2022-01-13 22:14:352、XXE漏洞利用方法 ① 读文件(有回显) ]> &xxe; ② 内网探测(存活主机) 无法探测到未开启80端口的主机 ]> &rabbit; 根据响应时间或响应长度判断,也可以通过回显进行判断 如: 192.168.96.152主机存活 回显:... -
xxe漏洞原理和案例实验演示
2019-06-03 01:20:14xxe漏洞原理和案例实验演示 xml一般指可扩展标记语言 可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记... -
XXE漏洞原理和案例实验演示;ssrf漏洞原理和实验案例演示
2019-06-03 09:37:54一、XXE漏洞原理和案例实验演示 XXE(xml external entity -injection“) 1.XML xml是一种可扩展的标记语言,可用来存储数据、传输数据 XML格式: 第二部分:DTD DTD:Document Type Defintion 文档类型定义,用来... -
XXE漏洞的原理和利用
2022-01-03 19:47:30XXE全称为XML外部实体注入、 XML XML是可扩展标识语言的简写,和HTML的形式很像,后来用于应用程序之间数据传输的常用格式 HTML旨在显示信息,XML旨在传输信息 XML实体 根据实体来源可定义为内部实体和外部实体。XML... -
XXE漏洞原理+复现
2020-03-23 11:20:48XXE -“xml external entity injection"既”xml外部实体注入漏洞”。攻击者通过向服务器注入指定的xml实体内容,使服务器按照指定的配置进行执行,也就是说服务端接收和解析了来自用户端的xml数据,没有做严格的安全... -
1.7服务端漏洞——XXE漏洞原理
2021-07-07 17:40:57XXE漏洞原理 1.XXE是什么 XXE全称是——XML External Entity,也就是XML外部实体注入攻击.漏洞是在对不安全的外部实体数据进行处理时引发的安全问题。 xml实体注入就是利用了客户端返回xml提交数据时,注入远程调用... -
xxe漏洞原理和案例演示
2019-06-08 23:06:31原理: 演示: 打开pikachu,找到xxe,先看一下后台代码怎么写的, 咱们先通过一个正常的例子来测一下 <?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY hacker "ESHLkangi"> ]> <... -
XXE漏洞(原理+实践操作)
2022-01-03 11:17:29xxe攻击原理+实践操作 -
OWASP TOP 10(七)XXE漏洞(XML基本语法、DTD(声明类型、数据类型、实体)、XXE漏洞原理、PHP相关函数、XML...
2020-12-27 20:02:37文章目录XML学习一、XML概述1.... 漏洞原理2. PHP相关函数- file_get_contents()- php://input- simplexml_load_string()3. XML注入回显 输出函数 XML学习 一、XML概述 1. 简述 XML 指可扩展标记语言 -
xxe漏洞原理与案例
2020-12-11 10:19:101、基本知识 :XXE漏洞学习https://www.cnblogs.com/zhaijiahui/p/9147595.html#autoid-5-1-6 2、案例分析 一篇文章带你深入理解漏洞之 XXE 漏洞https://xz.aliyun.com/t/3357 xxe攻击测试讲解...