概念
XXE 攻击是针对解析 XML 文档的应用程序的一种攻击方式。攻击者通过在 XML 文档中注入外部实体(External Entity),从而让应用程序在解析 XML 时执行恶意代码或泄露敏感信息。
xml语言
XML(可扩展标记语言,Extensible Markup Language)是一种用于标记电子文件使其具有结构性的标记语言。以下是关于 XML 语言的知识点:
一、特点
- 可扩展性:用户可以根据需要自定义标记和结构,适应不同的应用场景。
- 平台无关性:XML 文档可以在不同的操作系统和软件平台上被解析和处理。
- 可读性强:XML 文档以文本形式存储,易于阅读和理解,也方便人工编辑。
- 数据与表现分离:XML 主要用于描述数据的结构和内容,而不涉及数据的具体呈现方式,有利于数据的重用和灵活展示。
二、结构
- 声明:通常以
<?xml version="1.0"?>
开头,用于指定 XML 的版本。 - 元素:由开始标签、内容和结束标签组成,例如
<element>content</element>
。元素可以嵌套,形成层次结构。 - 属性:位于开始标签内部,以名值对的形式出现,例如
<element attribute="value">
。 - 注释:使用
<!-- 注释内容 -->
的形式,可以为 XML 文档添加解释说明。
三、用途
- 数据交换:不同的应用程序和系统之间可以使用 XML 作为通用的数据交换格式,确保数据的准确传输和理解。
- 配置文件:许多软件和系统使用 XML 格式的配置文件来存储设置和参数。
- 文档存储:XML 可以用于存储和管理文档,如书籍、报告等,方便检索和处理。
- Web 服务:在 Web 服务中,XML 常用于描述服务的接口、请求和响应消息。
四、XML 与其他技术的关系
- XML Schema:用于定义 XML 文档的结构和数据类型约束,确保 XML 文档的合法性和一致性。
- XPath 和 XQuery:用于在 XML 文档中定位和查询特定的元素和数据。
- XSLT:用于将 XML 文档转换为其他格式,如 HTML、PDF 等。
五、XML 的解析方式
- DOM(文档对象模型):将 XML 文档加载到内存中,构建一个树形结构,方便进行随机访问和修改。但对于大型 XML 文档,可能会消耗较多的内存。
- SAX(简单 API for XML):一种基于事件驱动的解析方式,在解析过程中逐行读取 XML 文档,触发相应的事件处理程序。适用于处理大型 XML 文档,内存占用较小,但不便于随机访问。
危害
- 信息泄露:可以读取服务器上的敏感文件,如配置文件、密码文件等。
- 拒绝服务攻击:如果恶意的外部实体非常大或者引用了一个不存在的资源,可能导致应用程序在解析 XML 时消耗大量资源,造成拒绝服务。
- 命令执行:在某些情况下,攻击者可以通过 XXE 攻击执行服务器上的命令,获取服务器控制权。
检测
防御
- 禁用外部实体:在解析 XML 时,禁用外部实体的引用。不同的编程语言和 XML 解析库有不同的方法来实现这一点。
- 输入验证:对用户输入的 XML 数据进行严格的验证,确保其符合预期的格式和内容。
- 使用安全的 XML 解析库:一些 XML 解析库提供了更好的安全特性,可以减少 XXE 攻击的风险。
- 加强服务器安全配置:限制服务器对外部资源的访问权限,防止攻击者通过 XXE 攻击读取敏感文件或执行命令
pikachu靶场实战
payload
<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY write SYSTEM "file:///etc/passwd">]>
<foo>&write;</foo>
查看passwd文件